fotran学习手册
1 fortran77和fortran90的关系
固定格式 | 自由格式 | |
英文 | Fixed-format | Free-format |
扩展名 |
.for
.f ... |
.f90 .f95
.f03 ... |
语法 | F66、F77、F90、F95、F03、F08 | F66、F77、F90、F95、F03、F08 |
格式 | 代码从第7格开始 | 任意 |
续行 | 在第6格键入一个非0字符 | 在前一行最后加入 & |
行宽 | 72 | 132 |
注释 |
行首打 C 或
c 或 * |
注释前打感叹号 ! |
说明 | 不推荐,已废止 | 推荐 |
此外,如果已经写好了fortran77的程序,可以通过如下网站将其转为fortran90
2 程序单元间的变量是不相通的,这点可以极大地缩减变量的个数,比如我写的用来描述shape memory polymer本构模型的材料用户子程序,因为本构方程过于复杂,需要的变量数极多,因此,搞明白这点在写程序时将十分方便;
3 数据类型的声明:一定要留意数据的类型,整型integer和实型real,在整除时会明显发现二者的区别,这点在进行数据计算时极为重要。
4 fortran变量声明:UMAT用的是fortran77格式,所以我特别关注旧写法
旧写法 | 新写法 |
REAL A
DIMENSION A(30) |
Real ,
dimension(30) :: a 或 Real :: a(30) |
REAL*8 A | Real(Kind=8) :: a |
DOUBLE PRECISION
A |
Integer ,
parameter :: DP = kind(0.0d0) Real(Kind=DP) :: a(30) |
PARAMETER(N=30,M=40) |
Integer ,
parameter :: N=30 , M=40 |
CHARACTER A*30
或 CHARACTER*30 A 或 CHARACTER(30) A |
Character(len=30)
:: a |
5 .‘*’,‘C’代表注释行;!注释行;一行程序代码的最后是&或者最前面是&代表着与下一行或者前一行程序连接。
6 .程序间空格无意义;如果fortran的关键字分为两行,则两行都要加续行符号。一行可以有多个语句,用‘;’分开。
7 .program: 程序名称,end代表程序结束,一般采用大写!FORTRAN是一个分块结构,主程序,外部子程序,模块,快数据单元;
8 .INTEGER:整形常量;小数形式中小数点必须有,如100.0 .5之类的,E代表底数10;例如:0.879表示为876E-3;0.0876E+1;指数部分只能为整数;10^-4表示为1E-4才对;
9. real(4)单精度,默认值;real(8)双精度;
整型:INTEGER;实型:REAL;复型:COMPLEX;逻辑型:LOGICAL ;字符型:CHARACTER
变量说明采用双分隔符表示INTEGER:I,J,K末尾不加上任何符号,不是matlab,c++那些的
REAL::X,Y,Z
8. 派生数据类型:根据需要由基本的数据类型定义新的数据类型;如
TYPE STUDENT
CHARACTER::DEPARTMENT
CHARACTER::NAME
CHARACTER::CLASS
END TYPE STUDENT
9 数组的引用:通过下标值的方法来实现,不能越界,个数必须与数组的秩相同;
主程序执行部分不包含RETURN或者ENTRY语句;主程序作用范围内不得包含OPTIONAL,INTENT,PUBLIC语句,主程序内SAVE语句不起作用;主程序内任何内部过程的定义必须跟在CONTAINS语句后面;
CHARACTER::C CHARACTER类型的长度缺省为1;
关键字:PARAMETER DIMENSION PUBLIC INTENT PRIVATE SAVE TARGET ALLOCATABLE INTRINSIC
基本函数: SQRT LOG LOG10 EXP(e^x) MOD(求余数) SIGN(符号) INT(符号转换意义)
乘方** 2**(Y+2)
READ(*,*)简单的输入语句 WRITE(*,*)输出表 PRINT*,输出表
10 逻辑运算符
.NOT. :求反运算;, .AND. ;.OR. ; .EQV. 两个值相等,表达式为真;.NEQV. 不相等,表达式为真;.NE.:表示不相等
DO 循环体 ENDDO 用于循环次数未知,仅给定循环终止条件,执行条件为从DO语句下面的第一句顺次执行到ENDDO前的最后一句,在返回执行DO语句下面的第一句,重复执行整个DO模块,期间遇到EXIT语句,停止执行DO,退出循环,转向执行ENDDO下面的语句,对于不带控制变量的DO模块,必须有EXIT语句,使他停止循环,形成死循环
Fortran77语法概述: FORTRAN 77 语法概述_Qiwen雯_新浪博客 (sina.com.cn)
第二部分
- WRITE模块书写原则及方式
Write(*,*)第一个星号表示默认输出设备为屏幕,第二个表示默认输出格式
- Fortran95在程序中不区分大小写英文字母,程序单元名,模块名为全局名称,且唯一;
- 关键字:if()then,program,integer,real, read,print,write,do end do,function,subroutine
- 可以对关键字不予保留,就是program program,第一个program是关键字,第二个program就是程序名;
- !注释符号,‘;’一行书写多条语句需要分开,’&‘续行符,且只能用于末尾
- 实数与实数之间不允许出现逗号等,一般用空格隔开就行,小数点前后不能同时为空,指数形式用字母E表示以10为底的指数,且字母E后面是整数,不能是其他类型数字;若指数标识为D则表示双精度实数,一般均用D表示指数声明
- 字符及字符串文本,一般需要确定字符串长度,同时字符串后面跟C表示可以出现非打印字符,如PRINT*,'ABC\\DEF'C其中\\表示'\',原文表示为ABC\DEF
- IMPLICIT NONE:表示取消I-N规则,即所有变量名必须申明才能使用
- 有关REAL时型变量的用法:
- REAL:: 包含符号::表示可直接赋初值,没有则不能直接赋初值,如REAL A,B,C,D不能直接赋初值,REAL::A=1,B=2则可以直接赋初值
- CHARACTER::含义和上文一样,只是CHARACTER::A='CHINA',赋的是字符串,同时CHARACTER*4::A='THIS'表示定义字符串长度为4
- INTEGER和**之间不能出现空格;同理CHARACTER和::之间也不能出现空格;
- 运算符优先顺序:相邻同级运算符左结合,**运算符按照右结合,如A**B**C**D实际表示为A**(B**(C**D))
- 字符串连接操作//,如str2='this';str3='is';str4=str2//str3则STR4='this is'
- 表控输入输出语句:其中*表示默认输出设备,read*,print*等,
- 参数语句PARAMETER:名称为常量名,具有唯一性,同一个程序的那元中智能定义一次,例如:PARAMETER (PI=3.1415926)
- PARAMETER语句是非执行语句,必须在可执行语句前声明,如
- INTEGER A,B,
- A=100;B=120
- PARAMETER(PI=3.14)错误,非法PARAMETER语句,不能在赋值语句后面
- 常用函数表:
ABS(X) | 绝对值 |
EXP(X) | 指数运算,以e为底 |
LOG(X) | 求自然对数ln(x) |
LOG10(X) | 对数,以10为低 |
INT(X) | 取整函数 |