ChinaNet

标题: 直接调用CERNLIB的子程序 [打印本页]

作者: 鸿飞冥冥    时间: 2015-4-8 09:49
标题: 直接调用CERNLIB的子程序
  很多时候,我们都是设置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
###############################################################################





欢迎光临 ChinaNet (http://www.nuclear.net.cn/) Powered by Discuz! X3.1