FORTRAN-90-程序编程规范
- 格式:doc
- 大小:55.00 KB
- 文档页数:9
fortran90整理1语句编译1.Build—Compile:编译;Build—Build:连接;Build—Exetuce:运⾏;或单击⼯具栏相应按钮。
注意:a、保存⽂件时将⾃动创建同名的project⽂件,形成*.dsp⽂件;b、同时还将⾃动创建同名的workspace,形成*.opt和*.dsw⽂件;c、编译连接后⾃动形成Debug⽬录,该⽬录中存放编译连接后⽂件。
如:*.obj,*.lnk,*.exe等2.Free Format(⾃由格式)1.!感叹号后⾯的⽂本都是注释。
2.每⾏可以编写132个字符。
3.⾏号放在每⾏程序的最前⾯。
4.⼀⾏程序代码的最后如果是符号&,代表下⼀⾏程序会和这⼀⾏连接。
如果⼀⾏程序代码的开头是符号&,代表它会和上⼀⾏程序连接。
3.书写格式⾏的书写(⾏的长度、分⾏、续⾏)1⼀⾏可以是0~132个字符,空格有意义,2语句最长不超过2640个字符3⼀⾏可以有多个语句,⽤“;”分隔4⼀个语句可分⾏写,读⾏标记为&(放在尾部),但如为关键字,⾸尾均加&。
5最多可有511个续⾏。
4.语句的分类注释语句:!后的所有字符都被编译器忽略1.可独占⼀⾏,可在其它语句之后,a)空⾏为注释⾏(固定格式⽤C和*)2.说明语句:⽤于说明变量的类型、属性等3.可执⾏语句:输⼊、赋值、输出……5.语句有位置规定:说明语句必须出现在可执⾏语句之前,格式说明语句(FORMAT语句)除外。
6.标志符⼩结注释标志符:1⾃由格式:!固定格式:C *2语句分隔符:分号;(仅⾃由格式可以使⽤)3续⾏符:⾃由格式:&4申明标号:1到5位⽆符号整数5空格:关键字、变量、常量内部不能⽤空格,但相邻两者之间须⽤空格6.FORTRA90源程序基本结构1、FORTRAN90程序是⼀种分块结构,由若⼲个程序单元块组成:主程序、外部⼦程序、模块、块数据单元⽆论是主程序单元,还是⼦程序单元,都是独⽴的程序单位,应该独⽴编写,它们的形式相似。
FORTRAN90学习指导一、FORTRAN90基础知识1.源程序及其构成书写格式:主程序定义语句、结束语句注意:在没有程序名称的时候,程序开头的PROGRAM也不要出现。
如果使用了程序名称且在END语句中出现,则END语句中的PROGRAM不能省略。
语句行可以是0~132个字符;除赋值语句外,每个语句都要使用关键字开头。
如果希望一行中出现多个语句,语句一定要用分号隔开。
空格不能随便使用,关键字、变量和常量名以及操作符中的空格会使字符失去其原有的含义。
但它们之间一定要加空格。
注释行:以感叹号为标记,或“C”、“*”(FORTRAN90中不提倡此用法)续行标记:在句末尾添加续行符&,如果将关键字分成两行,则下一行开头也要加续行标记。
如果续行符出现在注释语句中,则失去了续行的功能。
2.FORTRAN90字符集126个英文字母(大小写字母等价)210个阿拉伯数字3下划线421个特殊字符:空格= + - * / (), . ‘: !“% & ;< > ? $5其他字符(只可以出现在字符常量、字符串编辑描述符、注释和输入输出记录中)3.基本数据类型1 整型KIND值可以为1、2、4类型说明关键字:INTEGERKIND值决定数据的范围。
对于整数没有误差。
I=3/2=1;I=1/2=0INTEGER(KIND=4)::AINTEGER*4::AINTEGER(4)::A2 实型KIND值可以为4(单精度7位有效数字)、8(双精度15~17位有效数字)类型说明关键字:REAL小数表示形式、指数表示形式(规格化的指数形式)错误表示形式:E34、.E34、0.14E2.38开3次方:8.0**(1.0/3.0)3 复型KIND值为4、8是实数的有序对,将两个实数中间用逗号分隔,然后放在一对括号中类型说明关键字:COMPLEX复数的运算:+、—、*、/4 字符型KIND值为国家语言种类由一对单撇号或一对双撇号之间的字符序列组成。
FORTRAN90程序设计实验指导FORTRAN90程序设计实验指导第一节 FORTRAN PowerStation 4.0快速入门1.1 安装FORTRAN PowerStation 4.01.1.1 系统要求安装Microsoft FORTRAN PowerStation 4.0需要具备以下软硬件条件:●80486或以上处理器,运行Windows 95/Windows NT 3.51或以上操作系统。
●如果安装标准版,需要3.5英寸软盘驱动器或光盘驱动器,如安装专业版,则必须具有光盘驱动器。
●16MB或以上内存。
●足够的硬盘空间。
安装程序根据安装选项提示所需的硬盘空间。
标准版和专业版的典型安装分别需要约45MB和70MB硬盘空间。
●VGA显示器(推荐使用SVGA显示器)。
●鼠标。
1.1.2 安装步骤下面以Windows 95操作系统为例,对于Windows NT操作系统,安装过程与此类似。
首先,将含FORTRAN PowerStation 4.0的光盘插入光盘驱动器,在资源管理器中运行Setup程序,屏幕显示MicrosoftFORTRAN PowerStation Setup窗口;安装程序自动搜索已有组件,单击【Continue】(继续)按钮,并按提示输入CD-Key后,安装程序会显示安装选项对话框(图 1.1);如果要改变安装FORTRAN PowerStation 4.0的文件夹,单击【Change Folder...】(改变文件夹)按钮,选择或输入所需的文件夹名;如果输入的文件夹不存在,安装程序会自动生成该文件夹,并生成几个下级文件夹以存放相应的各类文件。
图1.1还显示了各安装选项的简短说明和安装时所需的硬盘空间。
选择下列四个安装选项之一继续安装:Typical(典型)Custom/Complete(定制/完全)Compact(紧凑)图1.1 Setup程序的安装选项对话框Run from CD-ROM(从光盘运行) Typical(典型)安装选项将安装最常用的部分,约需70MB硬盘空间。
(完整版)FORTRAN90用法总结,推荐文档FORTRAN90用法总结1、数据类型整型 INTEGER实型 REAL复型 COMPLEX字符型 CHARACTER逻辑型 LOGICAL2、特殊函数1>定值函数PARAMETER(变量列表) 或类型说明符,PARAMETER::变量列表2>IMPLICIT 类型说明符(字母表)类型定义函数(默认I-N规则,取消IMPLICIT NONE)3>** 乘方4>STOP[标号]终止执行5>PAUSE[标号]暂停程序6>字符串长度函数 LEN(String)、 LEN_TRIM(String)7>除去字符串尾部空格 TRIM(String)8>字符串位置函数 INDEX(String1,String2)9>字符串比较函数LGE(String1,String2)LGT(String1,String2)LLE(String1,String2)LLT(String1,String2)10>字符串空格首位调整ADJUSTL(String)、ADJUSTR(String)11>字符串、ASSII码互相转化函数①化为ASSII码 ICHAR(String)、IACHAR(String)②化为字符串CHAR(I)、ACHAR(I)12>.LT.(<) .LE.(<=) .EQ.(=) .NE.(/=) .GT.(>) .GE.(>=)13>.AND.与 .OR.或 .NOT.非 .EQV.等于 .NEQV.不等 .XOR.异或3、IF函数1> 单支IFIF(逻辑表达式) THEN块语句END IF2> 双支IFIF(逻辑表达式) THEN块语句1ELSE块语句2END IF3>多支IFIF(逻辑表达式1) THEN块语句1ELSE IF(逻辑表达式2) THEN块语句1...ELSE IF(逻辑表达式N) THEN块语句NELSE块语句N+1END IF4>逻辑IFIF(条件表达式)可执行语句5>算术IFIF(算术表达式)标号1,标号2,标号3 标号1 可执行语句1 标号2 可执行语句2标号3 可执行语句3 4、CASE块SELECT CASE(表达式) CASE(表达式1)块语句1...CASE(表达式N)块语句NCASE DEFAULT默认块语句END SELSCT5、循环函数1>循环控制语句IF(e) EXIT 终止循环2>CYCLE跳出此次循环3>DO循环DO i=e1,e2[,e3]循环体END DO4>DO WHILE循环DO WHILE(逻辑表达式) 循环体END DO6、输入输出1>表控输入输出READ *,变量表PRINT *,输出表WRITE(*,*)输出表2>自定义输入输出标号 FORMAT(格式说明)3>其他编辑符①nX 向右跳过n个字符②nH 输出字符串③/ 换行④\ 连接7、数组1>说明数组DIMENSION 数组名类型说明,DIMENSION(维说明)::数组名2>数组赋初值DA TA 数组名/....../,数组名/....../,...3>动态数组①声明[类型],DIMENSION(:[,:]...),ALLOCA TABLE::数组名[类型],ALLOCATABLE::数组名(:[,:]...)...②申请ALLOCATE(数组名(维说明))③释放DEALLOCATE(数组名)8、子程序1>子程序CONTAINS(内部子程序的标志(外部EXTERNAL))[类型说明] FUNCTION 函数名(虚参表)函数体END2>子例行程序SUBROUTINE 子例行程序名(虚参表)函数体END调用CALL 子例行程序名(实参表)3>递归调用RECURSIVE FUNCTION(SUBROUTINE)函数名(虚参表) RESULT(返回值) 函数体END9、结构体1>定义TYPE [,ACCESS[::]] 派生类名称(ACCESS=PRIV ATE(私有),PUBLIC(公有)) 分量表END TYPE 派生类名称2>类型定义TYPE(派生类名称)::结构体变量名3>结构体成员引用①结构体名%成员名②结构体名.成员名4>定义的同时赋值TYPE(派生数据类型名)::结构体变量名=派生数据类型名(成员初值表)5>结构体数组TYPE(派生数据类型名),DIMENSION(维说明符)::结构体数组名10、指针1>定义指针类型说明,POINTER::指针变量名...类型说明,TARGET::目标变量名...P=>A2>动态变量例:INTEGER,POINTER::PINTEGER SALLOCA TE(P)P=4S=PDEALLOCA TE(P)PRINT *,SEND3>指针数组变量定义类型说明,DIMENSION(:...:),POINTER::指针变量名ALLOCATE(X(20))DEALLOCA TE(X)4>定义结点TYPE NODEINTEGER V ALUETYPE(NOPE),POINTER::NEXTEND TYPE NODE5>定义头指针TYPE LISTPRIV ATETYPE(NODE),POINTER::ENDEND TYPE LIST6>对指针初始化(对头指针清空)SUBROUTINE SETUP(L) TYPE(LIST)LNULLIFY(L%END)END SUBROUTINE SETUP。
FORTRAN 90 程序编程规范Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。
使编出的程序更易懂、易于维护。
1 语言选择数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。
选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。
Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。
2 Fortran 90 的新特性2.1.1 建议使用的Fortran 90 新特性建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。
尽量使用数组下标三元组,这样可优化并减少所需的代码行数。
为提高可读性,要在括号内表明数组的维数,例如:1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:)2dArray(: , :) = scalar * Another2dArray(: , :)当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。
例如:2dArray(: , 2:len2) = scalar *( &Another2dArray(:, 1:len2 -1) &- Another2dArray(:, 2:len2) &)对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。
在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。
新的表示方法更接近标准的数学符号在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。
从效率的角度考虑,除递归定义的数据结构外,应尽量避免使用递归程序(它在使用内存和cpu 上会降低效率)。
建议定义新的操作符,而不要重载已有的操作符,这样可以清晰地表明功能,避免降低代码的可读性和可维护性。
2.1.2 关于Interface使用Interface 接口块。
在FORTRAN 语言中,主调程序与被调程序是分别编译的。
由于Fortran 90 对过程的许多功能做了扩充,有些功能单靠简单的调用语句已无法反映,因而系统也就无法进行正确的编译。
这时需要在主调程序中加入interface 接口块,通过它为主调程序与被调程序指明一个显式的接口。
如果被调用程序中哑元含有假定形状(assumed-shape )数组,或含可选变元,或含键盘输入的参数,就需要interface 接口块说明。
一般来讲,在Fortran 90 程序之间需要提供的interface 块,建议将interface 接口块明确写入调用程序,并复制被调用程序的参数列表。
这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化就必须相应改变interface 接口块和调用(call )语句。
2.1.3 关于动态内存的使用并行程序中存在着动态内存使用不充分的情况,合理使用动态内存可提高效率。
在Fortran90 中常采用下列方法获取动态内存。
自动数组(automatic arrays):这种数组的大小在子程序中指定,其大小取决于运行时的变量,例如,可通过参数列表向子程序传递实元变量。
使用自动数组优先于其它形式的动态内存分配方法。
可分配数组(allocatable arrays):声明为ALLOCATABLE 属性的数组变量可在运行时通过ALLOCATE 命令分配空间。
与指针不同的是ALLOCATABLE 属性不能用于派生数据类型中。
这种方法申请的空间要使用DEALLOCATE 命令释放。
在一个程序中,不要重复进行“ALLOCATE—DEALLOCATE-然后再ALLOCATE 一个更大的空间”这样的操作,这样会导致大量不可利用的碎片空间产生。
应在程序中对要开辟的动态数组空间进行连续分配,或连续释放。
在使用ALLOCATE 和DEALLOCATE 命令之后,要利用ALLOCATE 和DEALLOCATE 命令参数中的返回值来判断操作是否成功;不建议使用指针数组。
2.2 Fortran 90 中不建议使用的过时的特性不要使用固定书写格式,采用Fortran 90 的自由书写格式。
不要使用旧式的DO 循环和CONTINUE 语句。
在以前的DO 循环中,关键字之后大多有一个标号,循环在该标号处结束,如:DO 10 I = 1, 10DO 20 j= 1, 20A(i,j)=0.20 CONTINUE˜10 CONTINUE˜建议采用统一的DO 结构,如:DO i = 1, 10DO j = 1, 20A(i, j) = 0.END DOEND DO不能使用实循环变量˜在DO 循环中若用实数作循环变量,由于截断误差的存在,会导致得不到预期的循环次数,如应将下面的DO 循环DO r = 0.1 ,0.9 ,0.1...END DO改写为:DO i = 1 , 9r = i * 0.1...END DO不要使用DO WHILE 语句,可用不带循环变量的DO 语句配合exit 替代,如:不要使用选择性返回。
例如:CALL Foo( x, y, *100, *200, *300 )在执行完该子程序后程序根据Foo 的返回语句后的表达式值选择从标号为100 、200 、300 处继续执行。
可将上述子程改写为结构化CASE 语句:CALL Foo(x, y, return_code)SELECT CASE(return_code)...不要使用算法IF 语句:使用块IF 结构来代替;不要使用计算GO TO 语句,如GO TO (10,20,30) i ;不要使用标号赋值语句,如ASSIGN 300 iGO TO i不要使用除IMPLICIT NONE 之外的任何implicit 语句,如IMPLICIT REAL(a-z)不要使用DATA 语句,对变量赋初值可在声明时进行,或在程序中进行。
DATA 语句是唯一可用于对变量赋二进制、八进制、十六进制初值的语句,但它很可能造成程序的不可移植,因此除非必须这样做,一般建议不要采用。
不要使用COMMON 公共块:使用Modules 参数列表代替公共块向子程序传递数据;不要使用EQUIVALENCE 等价语句:Fortran90 中,由于模块、动态存储、指针、数据结构以及固有函数transfer 的引用,没有必要继续使用EQUIVALENCE 语句;不要使用数据块程序单元DATABLOCK ,在FORTRAN 77 中它用于给公用块内数据赋初值。
不要使用FORMAT 语句。
不要使用err= ,end= 及eor= 等描述符。
在输入输出语句中,这些描述符后面跟语句标号,指示如果出现错误则程序转向执行标号所标识的语句。
我们可用检查iostat 来替代,如:READ ( * , ”(A)” , iostat=status ) line不要使用语句函数,如f(x) = x**2 - 1可用contain 内部函数子程序来代替。
不要使用假定大小数组它是作为哑元使用的,它的最后一维无上界,而用*代替,如DIMENSION a(100,*)。
在Fortran 90 中可用假定形状数组代替,它的每一维都是可调的,并用(:)来声明, 如:REAL , DIMENSION( 100 , : ) :: a不要使用FORTRAN 的INCLUDE 行。
在多数情况下可用USE 来代替,有些则采用预处理#include 来代替。
不能使用双精度类型,采用Fortran 90 的种别参数。
不要使用PAUSE 语句;不要使用ENTRY 语句:一个子程序只能有一个入口点;Fortran90 中避免数组在子程序之间传递时维数的隐式改变。
尽量不要采用经销商扩充的功能。
2.3 在FORTRAN 90 中限制使用的功能GO TO 语句和语句标号只能在程序出现异常情况需要立即退出时才能使用,即允许使用GO TO 语句的唯一例外,是在出现错误时跳到程序的末尾处,这时用9999 作为Labels (这样可使所有人都知道GO TO 9999 的意思)。
2.4 关于预编译器(Precompilers )的使用建议在数值预报创新系统中使用预编译器,因为它提供了一种可有选择的对程序系统的某一部分程序进行编译的方法(条件编译);另外,为了提高程序的可移植性,同样也需要使用预编译器。
由于超级计算机都是用UNIX 操作系统,C 预编译器(cpp, C language pre-processor)可能是最好的选择。
2.4.1 文件的包含Fortran 90 提供了利用“INCLUDE ”语句引入文件的功能,但有时需要加入文件的目录结构信息,因此可以改用cpp 中的#include 功能,是程序更加清晰。
“include ”后的文件可以是用于变量定义、子程序注释或interface 接口块等的一段程序。
如,SUBROUTINE FooIMPLICIT NONE...INTERFACE#include <type_package1.int>#include <type_package2.int>#include <type_package3.int>...CALL TypePackageIni#endif...END SUBROUTINE Foo将视type_package_init 的定义调用子程序TypePackageIni 。
3可读性与可维护性本节将主要介绍如何使Fortran 90 程序更易读、更易维护。
3.1 空白的使用空白的使用可以使程序更易读、易维护。
加入空白的方法主要有空行、空格。
3.1.1 空行在程序“段落”之间加入空行,可以使程序的逻辑结构更加清楚,程序段落更加明白。
如PROGRAM FooUSE module_aUSE module_bIMPLICITE NONEREAL :: timeREAl :: valueINTEGER loopvalue = 3.1415926WRITE(*,*) valueEND PROGRAM Foo3.1.2 空格在一行中加入一些空格,可以使程序更易读,如在赋值号左右至少加一个空格,在逗号后加一个空格。