直接调用CERNLIB的子程序 - 核能革新 ChinaNet
热图推荐
    查看: 9249|回复: 0
    打印 上一主题 下一主题

    直接调用CERNLIB的子程序

    [复制链接]

    39

    主题

    49

    帖子

    152

    积分

    QQ游客

    积分
    152
    跳转到指定楼层
    楼主
    发表于 2015-4-8 09:49:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      很多时候,我们都是设置CERNLIB,由程序自己调用CERNLIB里的库文件,最近在写程序,查找了一下CERNLIB里面的MATHLIB库,找到了对应的一些子程序的调用名字,里面提供了很多现成的函数程序,比如库仑波函数程序,贝塞尔函数,Gamma,球谐函数等等,里面有详细的调用说明,参数介绍等,有些程序可以在网上找到源码,大部分程序只能调用。如果有你感兴趣的函数,就可以直接调用了,而不用辛苦的自己去写,或者去找找这些函数子程序了。

       (1)先说一下在VF6.5里面的调用,下载CERNLIB库,其实我们现在只用到了packlib,mathlib和kernlib,如果想要直接将你的数据采用paw的格式输出,也可以加入pawlib等库文件(我不用root,但是我见到其他人使用root调用的,也不是很难),将这个文件目录加入到tools->options->directories->library file 里面,然后在project->setting->obiect/library modu里面加入:
    kernel32.lib PACKLIB.LIB KERNLIB.LIB MATHLIB.LIB
    其中kern32.lib是原有的。

      在你的程序里面直接使用CALL xxxx(子程序名)就可以编译通过了。
    给出几个子程序的名字:
    GAMMA (C302) HTML, PS
    Gamma Function for Positive Argument
    GAMMF (C303) HTML, PS
    Gamma Function for Real Argument
    ALGAMA (C304) HTML, PS
    Logarithm of the Gamma Function
    CGAMMA (C305) HTML, PS
    Gamma Function for Complex Argument
    CLGAMA (C306) HTML, PS
    Logarithm of the Gamma Function for Complex Argument
    CCLBES (C309) HTML, PS
    Coulomb Wave, Bessel, and Spherical Bessel Functions for Complex Argument(s) and Order
    BESJ0 (C312) HTML, PS
    Bessel Functions J and Y of Orders Zero and One
    BESI0 (C313) HTML, PS
    Modified Bessel Functions I and K of Orders Zero and One
    RRIZET (C315) HTML, PS
    Riemann Zeta Function
    RPSIPG (C316) HTML, PS
    Psi (Digamma) and Polygamma Functions
    CPSIPG (C317) HTML, PS
    Psi (Digamma) and Polygamma Functions for Complex Argument
    RELFUN (C318) HTML, PS
    Jacobian Elliptic Functions sn, cn, dn
    CELFUN (C320) HTML, PS
    Jacobian Elliptic Functions sn, cn, dn for Complex Argument
    CGPLG (C321) HTML, PS
    Nielsen's Generalized Polylogarithm
    RFRSIN (C322) HTML, PS
    Fresnel Integrals
    RFERDR (C323) HTML, PS
    Fermi-Dirac Function
    RATANI (C324) HTML, PS
    Arctangent integral
    RCLAUS (C326) HTML, PS
    Clausen Function
    BSIR4 (C327) HTML, PS
    Modified Bessel Functions I and K of Order 1/4, 1/2 and 3/4
    CWHITM (C328) HTML, PS
    Whittaker Function M of Complex Argument and Complex Indices
    RASLGF (C330) HTML, PS

      (2)在VMS下面调用,呵呵,VMS操作系统已经有很多人不知道了。cern_root:[lib]为定义的cernlib文件路径
    $ FOR  xxx.FOR
    $ LINK xxx,-
                          cern_root:[lib]mathlib/lib,-
           cern_root:[lib]kernlib/lib
    $RUN xxx

    (2)在LINUX下面调用,感谢ZHOUTOU将他设置为精华!那就接着说完,呵呵。

    我使用了makefile文件,具体调用见下面的文件,其中cern为指向CERNLIB的路径。因为FORTRAN文件版本较老,所以使用g77,现在GCC 4.0 以后没有g77了,可能使用gfortran也可以编译现在写的FORTRAN 程序了。
    #DEBUG = ON
    UNAME := $(shell uname)

    ifeq ($(UNAME),Linux)
        CC = gcc
        CP = g++
        LD = g++
            CERNINCLS=$(CERN)/99/src/inc
            CERNLIBS=$(CERN)/2003/lib

        FF         = g77 -g
        IDIRS      = -I. -I$(CERNINCLS)
        FFLAGS     = -c $(IDIRS) -fdollar-ok -finit-local-zero \
                         -fno-automatic -fno-second-underscore -O2
        LINKER = $(FF) -o $(HOME)/bin/$@
        ROOTS      = -L$(CERNLIBS) -L/usr/lib -L/usr/X11R6/lib

        LIBRARY    = -lpawlib -llapack3 -lblas -lpacklib \
                         -lgraflib -lgrafX11 -lX11 \
                         -lmathlib -lcrypt -ldl -lm -lnsl
    endif
    #==============================================================================
    xxx: xxx.o yyy.o
        $(FF) xxx.o yyy.o -o xxx

    xxx.o: xxx.for
        $(FF) $(FFLAGS) xxx.for

    yyy.o: yyy.for
        $(FF) $(FFLAGS) yyy.for
    clean:
        rm *.o
    ###############################################################################
    回复

    使用道具 举报

      关注我们
    • 微信公众号:
    • NuclearNet
    • 扫描二维码加关注

    Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.

    联系我们|网站声明|中国核网-核能领域第一垂直门户网站

    快速回复 返回顶部 返回列表