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)

第二部分

    1. WRITE模块书写原则及方式

Write(*,*)第一个星号表示默认输出设备为屏幕,第二个表示默认输出格式

    1. Fortran95在程序中不区分大小写英文字母,程序单元名,模块名为全局名称,且唯一;
    2. 关键字:if()then,program,integer,real, read,print,write,do end do,function,subroutine
    3. 可以对关键字不予保留,就是program program,第一个program是关键字,第二个program就是程序名;
    4. !注释符号,‘;’一行书写多条语句需要分开,’&‘续行符,且只能用于末尾
    5. 实数与实数之间不允许出现逗号等,一般用空格隔开就行,小数点前后不能同时为空,指数形式用字母E表示以10为底的指数,且字母E后面是整数,不能是其他类型数字;若指数标识为D则表示双精度实数,一般均用D表示指数声明
    6. 字符及字符串文本,一般需要确定字符串长度,同时字符串后面跟C表示可以出现非打印字符,如PRINT*,'ABC\\DEF'C其中\\表示'\',原文表示为ABC\DEF
    7. IMPLICIT NONE:表示取消I-N规则,即所有变量名必须申明才能使用
    8. 有关REAL时型变量的用法:
      1. REAL:: 包含符号::表示可直接赋初值,没有则不能直接赋初值,如REAL A,B,C,D不能直接赋初值,REAL::A=1,B=2则可以直接赋初值
      2. CHARACTER::含义和上文一样,只是CHARACTER::A='CHINA',赋的是字符串,同时CHARACTER*4::A='THIS'表示定义字符串长度为4
      3. INTEGER和**之间不能出现空格;同理CHARACTER和::之间也不能出现空格;
      4. 运算符优先顺序:相邻同级运算符左结合,**运算符按照右结合,如A**B**C**D实际表示为A**(B**(C**D))
      5. 字符串连接操作//,如str2='this';str3='is';str4=str2//str3则STR4='this is'
    9. 表控输入输出语句:其中*表示默认输出设备,read*,print*等,
      1. 参数语句PARAMETER:名称为常量名,具有唯一性,同一个程序的那元中智能定义一次,例如:PARAMETER (PI=3.1415926)
      2. PARAMETER语句是非执行语句,必须在可执行语句前声明,如
        1. INTEGER A,B,
        2. A=100;B=120
        3. PARAMETER(PI=3.14)错误,非法PARAMETER语句,不能在赋值语句后面
      3. 常用函数表:
ABS(X) 绝对值
EXP(X) 指数运算,以e为底
LOG(X) 求自然对数ln(x)
LOG10(X) 对数,以10为低
INT(X) 取整函数

发布于 2021-08-20 22:43