Fortran90数值计算chap2c2f9
- 格式:pdf
- 大小:98.79 KB
- 文档页数:50
FORTRAN90用法总结
Fortran90是Fortran的最新标准程序设计语言,它是在Fortran77
基础上的新增功能,支持面向对象的功能,同时也支持可变参数,数据语
句和开发语句,使其具有更高的强大功能。
它也支持宏的使用,以帮助程
序编写者更好的实现一些高级程序功能,以提高程序性能,提高程序易用性。
下面将重点介绍Fortran90的五大用法。
第一,利用Fortran90进行函数的编写。
Fortran90的函数可实现参
数的多次组合,通过对用户函数的调用,就可达到想要的结果,而不用写
复杂的循环程序,这有助于提高程序的可管理性,降低程序的出错率。
第二,通过宏的使用来完成Fortran90的程序编写。
宏语言有助于程
序的复杂编写和优化,通过它可以大大提高程序的性能,节约程序的开发
时间,从而提高程序的可用性。
第三,Fortran90的数组操作功能。
Fortran90支持数组的多维操作,能够进行大数组操作,从而编写出简洁的程序,节约存储空间,提高程序
的执行效率。
第四,Fortran90的指针操作功能。
它可以完成复杂数据的指针操作,以实现数据的重排、排序、和传输,可以让程序编写者有效地运用指针操作,提高程序性能和稳定性。
最后,Fortran90的结构化编程功能。
附录 F O R T R A N90标准函数符号约定:l I代表整型;R代表实型;C代表复型;C H代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;A T为任意类型。
l s:P表示s类型为P类型(任意k i n d值)。
s:P(k)表示s类型为P类型(k i n d值=k)。
l[…]表示可选参数。
l*表示常用函数。
表1数值和类型转换函数函数名 说明A B S(x)*求x的绝对值∣x∣。
x:I、R,结果类型同x;x:C,结果:RA I M A G(x)求x的实部。
x:C,结果:RA I N T(x[,k i n d])*对x取整,并转换为实数(k i n d)。
x:R,k i n d:I,结果:R(k i n d)A M A X0(x1,x2,x3,…)*求x1,x2,x3,…中最大值。
x I:I,结果:RA M I N0(x1,x2,x3,…)*求x1,x2,x3,…中最小值。
x I:I,结果:RA N I N T(x[,k i n d])*对x四舍五入取整,并转换为实数(k i n d)。
x:R,k i n d:I,结果:R(k i n d)C E I L I N G(x)*求大于等于x的最小整数。
x:R,结果:IC M P L X(x[,y][,k i n d]))将参数转换为x、(x,0.0)或(x,y)。
x:I、R、C,y:I、R,k i n d:I,结果:C(k i n d)C O N J G(x)求x的共轭复数。
x:C,结果:CD B L E(x)*将x转换为双精度实数。
x:I、R、C,结果:R(8)D C M P L X(x[,y])将参数转换为x、(x,0.0)或(x,y)。
x:I、R、C,y:I、R,结果:C(8)D F L O A T(x)将x转换为双精度实数。
x:I,结果:R(8)D I M(x,y)*求x-y和0中最大值,即M A X(x-y,0)。
Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes booksor CDROMs, visit websitehttp://www.nr.com or call 1-800-872-7423 (North America only),or send email to directcustserv@cambridge.org (outside North America).C2.AlphabeticalListingof
ExplicitInterfaces
Thefilesuppliedasnr.f90containsexplicitinterfacesforalltheNumericalRecipesroutines(exceptthosealreadyinthemodulenrutil).Theinterfacesareinalphabeticalorder,bythegenericinterfacename,ifoneexists,orbythespecificroutinenameifthereisnogenericname.Thefilenr.f90isnormallyinvokedviaaUSEstatementwithinamainprogramorsubroutinethatreferencesaNumericalRecipesroutine.See§21.1foranexample.
MODULEnrINTERFACESUBROUTINEairy(x,ai,bi,aip,bip)USEnrtypeREAL(SP),INTENT(IN)::xREAL(SP),INTENT(OUT)::ai,bi,aip,bipENDSUBROUTINEairyENDINTERFACEINTERFACESUBROUTINEamebsa(p,y,pb,yb,ftol,func,iter,temptr)USEnrtypeINTEGER(I4B),INTENT(INOUT)::iterREAL(SP),INTENT(INOUT)::ybREAL(SP),INTENT(IN)::ftol,temptrREAL(SP),DIMENSION(:),INTENT(INOUT)::y,pbREAL(SP),DIMENSION(:,:),INTENT(INOUT)::pINTERFACEFUNCTIONfunc(x)USEnrtypeREAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP)::funcENDFUNCTIONfuncENDINTERFACEENDSUBROUTINEamebsaENDINTERFACEINTERFACESUBROUTINEamoeba(p,y,ftol,func,iter)USEnrtypeINTEGER(I4B),INTENT(OUT)::iterREAL(SP),INTENT(IN)::ftolREAL(SP),DIMENSION(:),INTENT(INOUT)::yREAL(SP),DIMENSION(:,:),INTENT(INOUT)::pINTERFACEFUNCTIONfunc(x)USEnrtypeREAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP)::funcENDFUNCTIONfuncENDINTERFACE
1384AppendixC2.AlphabeticalListingofExplicitInterfaces1385Sample page from NUMERICAL RECIPES IN FORTRAN 90: THE Art of PARALLEL Scientific Computing (ISBN 0-521-57439-0)Copyright (C) 1986-1996 by Cambridge University Press.Programs Copyright (C) 1986-1996 by Numerical Recipes Software. Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machine-readable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes booksor CDROMs, visit websitehttp://www.nr.com or call 1-800-872-7423 (North America only),
or send email to directcustserv@cambridge.org (outside North America).
ENDSUBROUTINEamoebaENDINTERFACEINTERFACESUBROUTINEanneal(x,y,iorder)USEnrtypeINTEGER(I4B),DIMENSION(:),INTENT(INOUT)::iorderREAL(SP),DIMENSION(:),INTENT(IN)::x,yENDSUBROUTINEannealENDINTERFACEINTERFACESUBROUTINEasolve(b,x,itrnsp)USEnrtypeREAL(DP),DIMENSION(:),INTENT(IN)::bREAL(DP),DIMENSION(:),INTENT(OUT)::xINTEGER(I4B),INTENT(IN)::itrnspENDSUBROUTINEasolveENDINTERFACEINTERFACESUBROUTINEatimes(x,r,itrnsp)USEnrtypeREAL(DP),DIMENSION(:),INTENT(IN)::xREAL(DP),DIMENSION(:),INTENT(OUT)::rINTEGER(I4B),INTENT(IN)::itrnspENDSUBROUTINEatimesENDINTERFACEINTERFACESUBROUTINEavevar(data,ave,var)USEnrtypeREAL(SP),DIMENSION(:),INTENT(IN)::dataREAL(SP),INTENT(OUT)::ave,varENDSUBROUTINEavevarENDINTERFACEINTERFACESUBROUTINEbalanc(a)USEnrtypeREAL(SP),DIMENSION(:,:),INTENT(INOUT)::aENDSUBROUTINEbalancENDINTERFACEINTERFACESUBROUTINEbanbks(a,m1,m2,al,indx,b)USEnrtypeINTEGER(I4B),INTENT(IN)::m1,m2INTEGER(I4B),DIMENSION(:),INTENT(IN)::indxREAL(SP),DIMENSION(:,:),INTENT(IN)::a,alREAL(SP),DIMENSION(:),INTENT(INOUT)::bENDSUBROUTINEbanbksENDINTERFACEINTERFACESUBROUTINEbandec(a,m1,m2,al,indx,d)USEnrtypeINTEGER(I4B),INTENT(IN)::m1,m2INTEGER(I4B),DIMENSION(:),INTENT(OUT)::indxREAL(SP),INTENT(OUT)::dREAL(SP),DIMENSION(:,:),INTENT(INOUT)::aREAL(SP),DIMENSION(:,:),INTENT(OUT)::alENDSUBROUTINEbandecENDINTERFACEINTERFACESUBROUTINEbanmul(a,m1,m2,x,b)USEnrtypeINTEGER(I4B),INTENT(IN)::m1,m2REAL(SP),DIMENSION(:),INTENT(IN)::xREAL(SP),DIMENSION(:),INTENT(OUT)::bREAL(SP),DIMENSION(:,:),INTENT(IN)::a