


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、FORTRAN 90程序编程标准编程标准,使程序代码高度组织化'更加易读、易懂、易于 维护,程序更加高效。使编出的程序更易懂、Fortran 90易于维护。1语言选择数值预报创新系统软件开发应防止使用KtFortran90不一致的特征。选择FortranFortra n77的某些过时特征以90作为开发语言,并采用Fortran90的新功能,如动态内存的分配(dynamic memory allocation) 丄亠:$亠N,模块(modules)recursi on、POINTER、递归上札、长变量名、自由格式等。Fortra n77其中某些只是些冗余的功能,这些功能已经过时,另外,还
2、有一些在Fortran90中被证明是不好的用法,建议不要使用。2 Fortran 90 的新特性建议使用的Fortran 90 新特性建议使用Fortran 90module中哪些变量或派生类型定义可用于调用程序。提供的模块module ,并用Use ONLY 指定粤1V'组下标三元组,这样可优化并减少所需的代码行数。为提高可读尽量使性,要在括号内说明数组的维数,例如:F _1 <1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:)2dArray(: , :) = scalar * An other2dArray(:,:)当访问数组的子集时,例如在有限差
3、分等式中,可以通过使用下标三元组实L现。例如:2dArray(:, 2:len2)scalar *Ano ther2dArray(:, 1:le n2 -1)&-Ano ther2dArray(:, 2:le n2)&jS段)对程序单元program units命名,并使用End program学习文档仅供参考,Endsubrout ine ,End in terface,End module 等结构再次指定“ programunit 的名称。替.gt.在逻辑表达式中使用>、ge. 、.eq.、t.>=、=、e.、 .ne.它们分别代。新的表示方法更接近标准的数&l
4、t;=、/=,学符号在变量定义中始终使用“:;始终用“DIMENSION 定义数组形状;始终用len=的语法格式声明字符变量的长度。从效率的角度考虑,除递归定义的数据结构外,应尽量防止使用递归程序它T<NK在使用内存和cpu上会降低效率。建议定义新的操作符,而不要重载已有的操作符,这样可以清晰地说明功能,防止降低代码的可读性和可维护性。2.1.2 关于 In terface VKl使用In terface 接口块。在FORTRAN语言中,主调程序与被调程序是分别编译的。由于Fortran 90亠对过程的许多功能做了扩充,有些功能单靠简单if.J, -E的调用语句已无法反映,因而系统也就无
5、法进行正确的编译。这时需要在主调程序中参加in terface接口块,通过它为主调程序与被调程序指明一个显式的接口。如果被调用程序中哑元含有假定形状assumed-shape丨数组,或含可选变元,或含键盘输入的参数,就需要in terface接口块说明。一般来讲,在Fortran 90 程序之间需要提供的in terface块,建议将in terface 接口块明确写入调用程序,并复制被调用程序的参数列表。这种方法简单易用,但也相应增加了维护代码的工作量,因为只要被调用程序的参数列表发生变化就必须 相应改变in terface接口块和调用call 语句。 关于动态内存的使用yyyy并行程序中存
6、在着动态内存使用不充分的情况,合理使用动态内存可提高效率。在Fortran90中常采用以下方法获取动态内存。自 动数组(automatic arrays)V:这种数组的大小在子程序中指定,其大学习文档仅供参考小取决于运行时的变量,例如,可通过参数列表向子程序传递实元变量。使用自 动数组优先于其它形式的动态内存分配方法。可分配数组(allocatable arrays):声明为ALLOCATABLE属性的数组变量可在运行时通过ALLOCATE命令分配空间。与指针不同的是ALLOCATABLE属性不能用于派生数据类型中。这种方法申请的空间要使用DEALLOCATE命令严释放。ill在一个程序中,不
7、要重复进行“ALLOCATE-DEALLOCATE-然后再ALLOCATE一个更大的空间这样的操作,这样会导致大量不可利用的碎片空间产生。 程序中对要开辟的动态数组空间进行连续分配,或连续释放。应在在使用ALLOCATE和DEALLOCATE命令之后,要利用DEALLOCATE命令参数中的返回值来判断操作是否成功;2.2 Fortran 90中不建议使用的过时的特性不要使用固定书写格式,采用Fort 不要使用旧式的DO循环和CONTINUE语句 之后大多有一个标旦DO 10 I = 1, 10DO 20 j= 1,20 A(i,j)=O.20 CONTINUE?10 CONTINUE?ran
8、90号,循环在该标号处结束,如:ALLOCATE 和r r不建议使用指针数组。的自由书写格式。在以前的DO循环中,关键字建议采用统一的DO结构,如:DO i = 1, 10DO j = 1,20A(i, j) = 0.END DOEND DO不能使用实循环变量苗?在DO循环中假设用实数作循环变量,Ig由于截断误差的存在,会导致得不到学习文档仅供参考Aljt A.li常预期的循环次数,如应将下面的DO循环END DO改写为:DO i = 1,9END DO不要使用DOWHILE语句,可用不带循环变量的DO语句配合exit替代,如:不要使用选择性返回。例如:CALL Foo( x, y, *100
9、, *200, *300 )Foo的返回语句后的表达式值选择从标号为在执行完该子程序后程序根据200、300处继续执行。可将上述子程改写为结构化 CASE语句:100 、E . CALL Foo(x, y, return亠code)SELECT CASE(return_code)不要使用算法IF语句:使用块IF结构来代替;it不要使用计算GO TO语句,如GOTO (10,20,30) i於不要使用标号赋值语句,如ASSIGN 300 iGO TO i不要使用除IMPLICIT NONE*IMPLICIT REAL(a-z)之外的任何implicit吾句,如不要使用DATA语句,对变量赋初值可
10、在声明时进行,或在程序中进行。DATA语句是唯一可用于对变量赋二进制、八进制、十六进制初值的语句,但它很可能学习文档仅供参考造成程序的不可移植,因此除非必须这样做,一般建议不要采用。不要使用COMM ON公共块:使用Modules 参数列表代替公共块向子程序传递 数据;隹$gf不要使用EQUIVALENCE等价语句:Fortran90中,由于模块、动态存储、TkT指针、数据结构以及固有函数transfer的引用,没有必要继续使用JrJfJFJrpip- * 翻丄 5 牛 . < * a, I 1 i【金 Ei' - I " EQUIVALENCE 语句;不要使用数据块程
11、序单元DATABLOCK ,在FORTRAN 77中它用于给公用块 内数据赋初值。KW不要使用FORMAT语句。亠N亠N亠/亠亠_JL不要使用err= ,end=及eor=等描述符。在输入输出语句中,这些描述符后面跟语句标号,指示如果出现错误那么程序转向执行标号所标识的语句。我们可用检查iostat来替代,S£如:4i>$READ ( * , (A) ,iostat=status ) line r不要使用语句函数,如制 f(x) = x*2 - 11 - 1 可用con tain内部函数子程序来代替。不要使用假定大小数组它是作为哑元使用的,它DIMENSION a(100,*)
12、,而用在 Fortran 90中可用假定形状数组代替,它的每维都是可调的,并用(:)来声明,*V 如:REAL , DIMENSION( 100 , : ) : a不要使用FORTRAN的INCLUDE行。在多数情况下可用USE来代替,有些那么T u| fl 4'jlvjSF:". ifajp Sr采用预处理#i nclude来代替。学习文档仅供参考1.li不能使用双精度类型,采用Fortran 90的种别参数。不要使用PAUSE语句;不要使用ENTRY语句:一个子程序数组在子程序之间传递时维数的隐式改变。尽量不要采用经销商扩充的功能。2.3在FORTRAN 90 中限制使用
13、的功能序只能有一个入口点;Fortra n90中防止GO TO 语句和语句标号只能在程序出现异常情况需要立即退出时才能使用,即允许使用GO TO语句的唯一例外,是在出现错误时跳到程序的末尾处,这时用9999作为Labels这样可使所有人都知道GO TO 9999 的意思。2.4关于预编译器Precompilers 的使用建议在数值预报创新系统中使用预编译器,因为它提供了一种可有选择的对 程序系统的某一局部程序进行编译的方法条件编译;另外,为了提高程序的 可移植性,同样也需要使用预编译器。由于超级电脑都是用UNIX操作系统,C预编译器(cpp, C Ian guage pre-processor
14、)可能是最好的选择。241文件的包含Fortran 90提供了利用“ INCLUDE 语句引入文件的功能,但有时需UrBp0要参加文件的目录结构信息,因此可以改用cpp中的#include功能,是程序更加清晰。“ include后的文件可以是用于变量定义、子程序注释或in terface接口块等的一段程序。如,SUBROUTINE FooIMPLICIT NONE.INTERFACE#i ncludeZa-#in elude#in elude<type_package1.i nt><type_package2.i nt>e_package3.i nt>qjr学习文
15、档仅供参考CALL TypePackage Ini#en difEND SUBROUTINE Foo将视 typepakagenitft心【的定义调用子程序TypePackagelni3可读性与可维护性本节将主要介绍如何使Fortran 90 程序更易读、更易维护。3.1空白的使用空白的使用可以使程序更易读、易维护。参加空白的方法主要有空行、空格空行在程序“段落之间参加空行,可以使程序的逻辑结构更加清楚,更加明白。如PROGRAM FooUSE module aUSE mod$e_b程序段落jOiv*IMPLICITE NONEREAL : timeREAl : valueINTEGER lo
16、opWRITE(*,*) valueEND PROGRAM Foo空格在一行中参加一些空格,可以使程序更易读,如在赋值号左右至少加一个空 格,在逗号后加一个空格。! Initljplize variables丿X=1Meanin gfulName=3RealNumber=5可改写为:tv学习文档仅供参考! Initialize variablesX= 1Meanin gfulName = 3RealNumber = 5缩进为了能够更加清楚的显示程序的逻辑结构,我们采用四格缩进的方法,即在上一行开始处空三格在第四格开始书写。例如下面是IF语句块的一个例如:!Example If blockIF(
17、.J THEN! a comme ntDO Loop = 1, En dLoop! ano ther comment,- . code statements .END DOELES IF ( . ) THENftf(p! ano ther comme ntco*气stateme nts VVEND IF3.2程序文档及注释程序文档和注释可以帮助读者了解仅看程序不易或无法了解的信息,这有几个层次:程序外应有科学文档、程序文档及用户指南等软件文档。在程序头应有程序头文件在程序中应有段落注释及行注释。软件文档软件工程中除了要编写工程文档外,还要编写软件文档,这是软件工程必不可少的局部。澎护曲孑曲豪多
18、数情况下,程序软件文档提供软件包级的文档,而不是单个程序的文档, 它包括:科学文档:陈述软件包拟解决的问题以及采用方法的根本原理 码本身无关。该文档与代程序文档:说明在科学文档中描述的方法的实现。 所有软件包中的程序都要 列出并作简短的功能说明,并列出软件包中各程序的调用关系树或流程图。用户指南:详细描述软件包的输入输出参数和文件。 这包括软件包内程序的 参数、开关值、可调参数的取值范围,要说明缺省值和敏感值的范围。要对读入的文件和namelist 有详细的说明。 学习文档仅供参考til322程序头文件每个程序都要有头文件,一般放在程序开头,内容包括本程序模块的功能和 目的说明、模块的接口说明
19、如调用实例、参数描述和子模块清单等、有关数 据的说明如重要的变量及其用途、约束和限制条件,以及其它有关信息、开 发历史记录包括模块设计与编程人员名单、复审人员及复审日期、修改日期和有关说明等;头文件还描述程序的函数、引用的外部文档和程序使用的变量, 程序中使用的变量都要在头文件中声明并注明用途。附录A给出了程序头文件的标准模板。文件头的写法将在第六章中详细讨 论。程序注释bIM1JwM|i程序内部的注释说明本段或本行程序代码的含义或要进行的操作。片段注释:把代码分成一些逻辑片段,注释放在定义片段开始的局部,它嵌在程序体内用以描述处理功能,如在函数/子程序/过程语句调用前后,循环语句前后以及重要
20、语句旁边都要加上注释语句。 片段注释的目的是说明代码某一部分的功能,它应当放在要注释的代码行上,或者放在要注释的代码行的前一行Hla注释应当顺序编号,如使用1.0,2.0 等:! ?! <片段号 > < 片段标题>建议:软件文档使用中文编写,并提供相应的英文摘要;程序头和注释全部 使用英文编3.3给文件、子程序、常量、变量一个有意义的名称 剧文或缩写、习惯名称命名。意义的名称般的做法是用相应的英选择一个有意义的名称,在程序中始终不变;如当给一组与当需要缩写时,采用统一的方1关的函数命名,可用dr_规定;半“ Data refresher .缩写应防止误解,如不要用inch 表示in put char ,可用in_char _表示;用下划线使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路专业笔试题及答案
- 农村信用社甘南藏族自治州夏河县2025秋招数据分析师笔试题及答案
- 专业人员试题及答案
- 客户信息收集与分类管理工具客户细分辅助
- 跨部门协作沟通指南提升团队沟通效率的技巧
- 媒体合作协议及宣传安排条款
- 2025年微课开发考试题及答案
- 2025年书法生集训考试题及答案
- 描述家庭活动的话题作文(8篇)
- 消防安全常识培训应知应会问答题及答案
- 监理工程师质量控制
- 小学生用药安全培训(课件)
- 通天河水电规划
- 盟史简介12.10.18课件
- 2023年04月湖北经济学院创新创业学院招聘1名孵化器日常管理专员笔试参考题库答案解析
- 法律方法阶梯
- GB/T 26081-2022排水工程用球墨铸铁管、管件和附件
- GB/T 26480-2011阀门的检验和试验
- 医院普通外科病史采集、查体及病历书写要点精讲课件
- 食品执行标准对照新版表
- 最新苏教牛津译林版英语五年级上册Unit 4《Hobbies》Grammar time 公开课课件
评论
0/150
提交评论