FORTRAN-90-程序编程规范

合集下载

笫十五章 FORTRAN 90

笫十五章  FORTRAN 90
(三) 数组赋值 a(1:9,1:9) a(2:4,5:8)=a(3:5,1:4) 有效 a(1:4,1:3)=a(1:3,1:4) 无效 因形状不同 a(k+1:n,k)=0 给多个元素赋标量,有效 (四) where语句和where结构 where语句可用于为数组赋值,如a和b是两个形状相同的数组,将b中与 a的负元素对应位置上的元素置0,可写成 where(a<0) b=0 where结构 where(c/=0) a=b/c elsewhere a=0 c=1 end where
笫十五章 FORTRAN 90
FORTRAN 90 与FORTRAN 77 不同之处
一、说明语句
(一)固有数据类型 整型、实型、复型,其后都可以接一个下划线_和另一个 整型常量或有名整型常量用来指明种别参数。如 42_2 42_long 0.3_double (3.14_double,_7) ascii_’john Q.public’ 种别参数(kind parameter):当它是一个整数1,2,3…时, 可能表示单精度双精度和四精度,在不同的系统中可能是 4,8,16。 (二)变量 integer (kind=2):: x,y character (len=20,kind=kanji) ::name kinji为一整型常量 real ::a=1.2,b=2.3, 初始化变量的值在执行过程中可变
六、数组
(六) 列表检索 1. 对无序列表的顺序检索 subroutine search_1(lost_card,card_number,found) integer,dimension(:),intent(in) :: lost_card integer,intent(in) ::card_number logcal,intent(out) ::found integer ::I found=.false. do I=1,size(lost_card) if(card_number==lost_card(I)) then found=.trun. exit end if end do end

FORTRAN90程序设计1[1]

FORTRAN90程序设计1[1]

程序设计举例
算法

算法是计算机软件中的一个基本概念,它是对解决实际问题的方法和步
骤的描述。设计算法是程序设计的核心,也是编写程序的基础。

正确的算法有以下几个显著特点:
(1)有穷性(flniteness)。 (2)确定性(certainty)。 (3)有效性(effcctivencss)。 (4)有零个或多个输入(input)。 (5)有一个或多个输出(output)。
简单的FORTRAN90程序分析

(6)空格并不是随处都可以使用的,一个像关键字、变量和常量名以 及操作符等的字符,其内部是不能使用空格的,空格会使字符失去其原 有的含义。 (7)FORTRAN90的注释语句是以感叹号为标志的,一行中感叹号后的 所有字符都被编译器作为注释语句而忽略。注释语句可以单独占一行, 也可在程序的其他语句后面出现。在FORTRAN90中,空行被作为注释 语句。 (8)如果遇到一条语句的长度超过了FORTRAN90所允许的行最大长度, 需要写成几行,FORTRAN90提供了一个续行符 ( & ) ,通过在语句末尾 添加续行符,编译器就会把下一行作为续行来处理。如果是把一个如关 键字这样的字符分成两行,那么需要在下行语句的开头再加一个续行符。
CHARACTER ( LEN = 10 ) :: STRING 子字符串是字符串中的若干个连续字符的集合。子字符
CHARACTER (LEN = 5 ) :: SUBSTRING 串的表示方法如下: CHARACTER (LEN = 1 ) :: CHAR STRING=’JANEJORDE’ 字符串变量名([FIRST-POSITION] : [END-POSITION]) ! SUBSTRING的值为“JANE” SUBSTRING=STRING ( :5 ) 缺省的开始位置是1,缺省的结束位置是字符串的长度。 SUBSTRING=STRING ( 5:6 ) ! SUBSTRING的值为“J” 如果开始位置大于结束位置则子字符串为空,即它的长 SUBSTRING=STRING ( 3:7 ) ! SUBSTRING的值为“NEJO” N=7 度为0。 CHAR=’ABCDEFGHIJK’ ( N:N ) ! CHAR的值为“G”

Fortran90编程

Fortran90编程

字。以关键词end type结束。
派生类型的声明和使用
n 声明: n 赋值: n 引用结构成员:
例一:派生数据类型
模块(Module)
n 是一种不能直接执行的程序单元,但可以包含
数据声明和过程
n
使不同的过程实现过程和数据的共享 n 可以实现对自定义数据类型的封装
n 相对于program,function,subroutine,是一种特
例三:数据类型的范围
定义符号常量
n 符号常量在程序中不可以改变其值 n 定义符号常量可以增强程序的可读性和可维护
性 n 定义方法:加上parameter属性
real (8) ,parameter :: pi=3.1415926535_8
例四:定义符号常量
三、控制结构
n if语句:if then elseif else endif
n
在Compaq Visual Fortran中调用 CXML
n 第一种方法:在工程中加入cxml.lib
n 第二种方法:使用include
PROGRAM example INCLUDE 'CXML_INCLUDE.F90’
在Compaq Visual Fortran中调用 Intel MKL
n 添加库函数路径 n 在工程中加入mkl_s.lib
总结:Fortran90的新特性
n n n n n n n n
高级的表达能力:数组运算 (例如, X(1:N)=R(1:N)*COS(A(1:N))) 动态存储分配 (ALLOCATE, DEALLOCATE, ...) 导出类型(derived types)与操作符重载(operator overloading) 更好的变量声明方式(parameterized types),提高移植性 模块 更多的现代控制结构 (SELECT CASE,END SELECT,DO, END DO,EXIT...) 更多的内部函数 (date, precision, arrays, ...) 新的源程序书写格式-自由格式(free format) 指针

fortran90整理

fortran90整理

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指导

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程序设计1、2、3

FORTRAN90程序设计1、2、3

[例2-1]
PROGRAM H_TO_C !Given the F temprature,to calculate the Centigrade REAL::TC,TH READ *,TH TC=5*(TH-32)/9 PRINT *,TH,TC END PROGRAM H_TO_C
[例2-2] PROGRAM CAL_M_SUM IMPLICIT NONE INTEGER::N,M REAL::T,A N=0;T=0 PRINT *,'Input number of data:' READ *,M DO READ *,A T=T+A ;N=N+1 IF(N>=M)EXIT END DO PRINT *,T END PROGRAM CAL_M_SUM
输出结果S
[例1-1]N-S图
FORTRAN 语言的发展 源程序及其构成
语言元素
程序单元概念
FORTRAN 是 FORmula TRANslation 的缩写 1954年 1978年 第一个FORTRAN文本的提出 推出FORTRAN77
1991年
FORTRAN90问世
几个简单的FORTRAN90程序 FORTRAN90程序的构成
PROGRAM CAL_FACTOR IMPLICIT NONE INTEGER::FACTOR,S=0,I DO I=4,8 S=S+FACTOR(I) END DO PRINT *,'S=',S END PROGRAM CAL_FACTOR
FORTRAN90程序的构成
1.FORTRAN90是分块形式的程序,一个程序含有 多个程序单元,每个程序有且仅有一个主程序单元。 2.各程序单元由若干行构成。程序行主要有: 说明语句行 可执行语句行 注释行(用!开始)

总结

总结

(八)字符处理 1.字符串、字符型变量和字符型数组。 2.字符型数据的赋值和运算。
3.字符型数据的输入与输出。
(九)文件
1.文件与记录的概念。 2.文件的打开与关闭。
3.顺序文件的存取方法。
4.直接文件的存取方法。
练习题:
一、填空题: 1.表达式1 / 2 * 3.6 + 1.3的值是 。
2.若A=2,B=7.5,C=-3.6,L1 = .TRUE.,L2 = .FALSE.。
Fortran90 程序设计
课程总结
(一)FORTRAN程序的结构、书写规则 1.FORTRAN程序的构成(主程序和子 程序)。 2.FORTRAN源程序的书写格式。
(二)、数据类型及其运算 1.常量和变量的类型(整型、实型、双精度型、 复型、逻辑型、字符型) 2.定义变量类型的方法(用I——N规则隐式说明 和显示说明)。
则表达式 .NOT. L2 .OR. B – A <= C /2 .AND. C>= -3.6的值 是 。
3.若DO I=1.5, 3.6 , 1.2,计算循环次数是
4.若I=10,J=20,A=12.3,B=156.0,C=846.0, 执行语句PRINT ‘(1X, I3, I4/1X, 3F6.1)’, I, J, A, B, C
3.符号常量及其定义方法(PARAMETER语句)。
4.运算符及运算优先级。 5.表达式(算术表达式、关系表达式、逻辑表 达式和字符表达式)及其求值规则。不同类型 数据的混合运算。
(三)最基本的语句
1.赋值语句(算术、逻辑和字符型赋值语句)。 2.表控格式的输入和输出。 3.格式输入与输出。 (1)格式编辑符(X、H、I、F、E、D、A、L、/ ),Байду номын сангаас式的重复作用。 (2)格式语句与输入输出语句(包括READ, WRITE语句)的相互作用。 (3)在输入输出语句中包括含格式说明的方法。

FORTRAN90-子程序浅

FORTRAN90-子程序浅
20
100
Program Main REAL MYEXP WRITE(*,*) ‘Enter X:’ READ(*,*)X Y=(MYEXP(X)-MYEXP(-X))/2.0 WRITE(*,100)’Sinh(‘,X,’)=‘,Y FORMAT(1X, A, F5.2, A, E13.6) END

9
f(x) = x * x + 2 * x + 5 x = 3.0 y = x * f(1.0) WRITE(*,*) y END
24.00000
10
四、语句函数的应用
例:利用二分法求方程x3-x2-1=0在[0,3]上的实根。
Real::a=0.0,b=3.0,m Fa=a**3-a*a-1.0; Fb=b**3-b*b-1.0 m=(a+b)/2; Fm=m**3-m*m-1.0 Do while (Fm>1.0e-6) If(fm*fa>0) then a=m;Fa=Fm Else b=m Endif m=(a+b)/2.0; Fm=m**3-m*m-1.0 Enddo Write(*,*)’方程的根为:‘,m End
Program Main
REAL W(5,5)
CALL READIN(W) CALL OPP(W,X1,X2) WRITE(*,100)X1,X2 100 FORMAT(1X, ‘The two sum of opposite angles &
elements:’/1X,’X1=‘,F8.2,’X2=‘,F8.2)
(1)
SUBROUTINE SUB(B) DIMENSION B(-1:5) . . . END
B(-1) B(0) B(1) B(2) B(3) B(4) B(5)

FORTRAN90程序设计教程 第1章 FORTRAN程序设计基础

FORTRAN90程序设计教程 第1章 FORTRAN程序设计基础

例1.1 求
其中
2
x y u x y
2
a b x 2 2 a b
ab ab
a b a b y 4 a b
ab ab
这一题的算法并不难,可写成: (1)从键盘输入a、b的值。 ab x a b ,y (2)如果a<b,则 ab , 4 x a b , y 否则 。 ab (3)计算u的值。 (4)输出u的值。
3. N-S图
由于传统流程图的缺点,1973年美国学者 I.Nassi和B.Shneiderman提出了一种新的流程图工 具─N-S图。N-S图以三种基本结构作为构成算法 的基本元素,每一种基本结构用一个矩形框来表 示,而且取消了流程线,各基本结构之间保持顺 序执行关系。N-S图可以保证程序具有良好的结 构,所以N-S图又叫做结构化流程图。
例1.3的算法:
(1)输入m和n的值。 (2)求m除以n的余数r。 (3) 若r=0 ,则转至第 (6) 步,否则执行第 (4) 步。 (4)n→m,r→n。 (5)转第(2)步。 (6)输出n。
算法的五个特征:
(1) 有穷性。算法中执行的步骤总是有限次数的, 不能无止境地执行下去。 (2) 确定性。算法中的每一步操作必须具有确切 的含义,不能有二义性。 (3) 有效性。算法中的每一步操作必须是可执行 的。 (4) 要有数据输入。算法中操作的对象是数据, 因此应提供有关数据。 (5) 要有结果输出。算法的目的是用来解决一个 给定的问题,因此应提供输出结果,否则算法 就2没有实际意义。
1.2.2 算法的描述
算法的描述有许多方法,常用的有:自 然语言、一般流程图、N-S图等。前面例 1.1~例1.3的算法是用自然语言──汉语描述 的,其优点是通俗易懂,但它不太直观, 描述不够简洁,且容易产生二义性。在实 际应用中常用流程图表示算法。

FORTRAN90程序设计9

FORTRAN90程序设计9

几点应该注意
(8) 一个辅程序中的接口块不允许含有一个被该辅程序定义的过程的接 口体。一个接口块中可以有多个接口体。
(9) 接口块还可用来说明一个外部过程或虚过程,并为之提供显式的调 用接口,这比EXTERNAL语句提供了更多的信息,因而也提高了程序 的可读性。例如:下面是没有类属说明的接口块:
接口块能将子程序中所需的信息精确的拷贝过来,通过它可 以为主调程序和被调用子程序指明一个显式接口。
几点应该注意
(1) 接口块以INTERFACE语句开始,以END INTERFACE 语句结束,块内只能取被调用过程中的说名部分,不允许出 现任何可执行语句。
(2) 类属说明的形式为:
类属名 或OPERATOR(定义的运算符) 或ASSIGNMENT(=) 其中,类属名用于定义类属过程、OPERATOR用于定义运算
USE语句
USE语句的最简单形式为: USE 模块名1,模块名2,……,模块名N
这条语句提供了对模块的所有公共的有名数据对象、派生类型、接口块、 过程等的访问。
在作用域单位内,USE语句必须出现在其他说明语句之前。 如果需要对两个或两个以上的模块进行访问,可能会在不同的模块中用
到了相同的名字,因此允许USE语句对被访问的对象重新命名,以解决 局部对象和模块中访问对象之间的名字的冲突问题。要重新命名时, USE语句应具有下列形式: USE 模块名,更名表 其中,更名表的形式为: 局部名=>使用名,局部名=>使用名,…… 例如:
END FUNCTION LOG_PLUS_LOG
括号时必须的,因为运算符“+”
END MODULE LOGICAL_PLUS PROGRAM TEST_LOGICAL_PLUS

Visual Fortran 90 编译器及代码书写格式

Visual Fortran 90 编译器及代码书写格式
Floating point division by zero
error FOR3592:missing END IF Statement :
结果有错
2,处理方法: ,处理方法: 1* 编译连接错误:output窗口中双击错误 编译连接错误: 窗口中双击错误 窗口中 信息(高亮度显示) 信息(高亮度显示)指针指向编辑窗口源程 序中包含错误的相应的行. 序中包含错误的相应的行. 2*光标放在 光标放在output窗口内,按F4切换到下 窗口内, 光标放在 窗口内 切换到下 一个错误shift+F4切换到上一个错误 一个错误 切换到上一个错误 注意: 注意: 连接错误不是出现在具体的某一行上. 连接错误不是出现在具体的某一行上.
四,程序运行环境
操作系统( 以上) 操作系统(windows95以上) 以上 Visual Fortran 5.0/6.0(Fortran PowerStation 4.0) ( ) 要了解:编辑程序, 要了解:编辑程序,编译程序和连接装配程序的功能
五,基本编译和输入(同word) 基本编译和输入( )
Format(自由格式) Free Format(自由格式)
返回目录
基本上允许非常自由的编写格式,但要注意: 基本上允许非常自由的编写格式,但要注意:
1.!感叹号后面的文本都是注释. 感叹号后面的文本都是注释. 上一页 2.每行可以编写 每行可以编写132个字符. 个字符. 每行可以编写 个字符 下一页 3.行号放在每行程序的最前面. 行号放在每行程序的最前面. 行号放在每行程序的最前面 结束 4.一行程序代码的最后如果是符号 ,代表下一行程序会 一行程序代码的最后如果是符号&, 一行程序代码的最后如果是符号 和这一行连接.如果一行程序代码的开头是符号&, 和这一行连接.如果一行程序代码的开头是符号 ,代 表它会和上一行程序连接. 表它会和上一行程序连接. 5.程序命令之间的空格,无意义. 程序命令之间的空格,无意义. 程序命令之间的空格

Visual Fortran90 编译器及代码书写格式

Visual Fortran90 编译器及代码书写格式
1、界面组成:菜单、工具栏——上端
左边:项目工作区窗口 右边:可用于编辑文件和阅读文档的主工作区 下端:输出窗口和状态栏
Developer Studio解题过程



分析问题,设计算法,绘制框图,编写程序。 创建有关工作空间、项目(已建,可省略)。 创建并输入源程序,创建其它辅助文档。 编译源程序。 构建、连接生成目标程序(可执行程序)。 运行目标程序。 调试程序
Visual Fortran 90 程序设计
编译器简介 代码书写格式
编译器简介
作用:把高级语言翻译成机器码,也就是常常可以 看到扩展名为EXE、COM的文件。 相同的程序代码可用不同厂商的编译器来编译, 所生成的文件也不会完全相同。编译器的好坏主要 取决于编译结果。
一、启动和退出Fortran PowerStation
空行为注释行(固定格式用C和*)
说明语句:用于说明变量的类型、属性等 可执行语句: 输入、赋值、输出……
语句有位置规定:
说明语句必须出现在可执行语句之前,格式说明语句
(FORMAT语句)除外。
标志符小结
注释标志符:
自由格式:!
固定格式:C *
语句分隔符:分号;(仅自由格式可以使用) 续行符: 申明标号: 自由格式:& 1到5位无符号整数
书写格式
!Free Format
program main write(*,*)”Hello” !这也是注释
write(*,*)&
”Hello” 6: 7: end 如果把Fortran的关键字分为两行书写,则两行都要 加续行符号。如6、7行。 wri& &te(*,*)”Hello”
书写格式

FORTRAN90程序设计实验指导

FORTRAN90程序设计实验指导

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用法总结,推荐文档

(完整版)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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 空格在一行中加入一些空格,可以使程序更易读,如在赋值号左右至少加一个空格,在逗号后加一个空格。

相关文档
最新文档