科研小技巧

Frotran程序要点整理(使用、读写和编译)

2021-02-03  本文已影响0人  三叠纪的小黑猫

1、Frotran程序主要用于科学和工程计算(formula translator,译为“公式翻译器”)。

2、Frotran语言不区分大小写,可以直接对矩阵和复数进行运算,执行效率高,支持openMPI并行计算,在数值计算领域积累了大量源程序。

3、Frotran语言目前主要有两种类型:Frotran 77标准的固定格式(老,以.for或.f结尾)和 Frotran 90标准的自由格式(新,以.f90结尾)。

4、几个著名的Frotran程序包:IMSL,BLAS 和 LAPACK。

5、Linux系统中主要有两种主流的Fortran程序编译器,一种是微软的ifort编译(商业软件需付费),一种是gfortran编译。gfortran属于GNU编译器套件中的一部分,安装方便,使用免费。但一般认为ifort的编译效率和优化好于gfortran。

-o output_filename:编译输出的可执行文件名称为outfile_filename(若无则默认名称为a.out)。

-O、-O2、-O3、-O4:对编译过程进行优化,不同数字表示不同的优化等级(具体和编译器相关)。编译优化对计算密集型程序的性能提高很有帮助,但对有些应用程序,过分的优化会导致计算结果错误。

-lm:表示链接名为“libm.a”的数学函数库。


ifortgfortran的区别:

1、数组空间的区别(以写入二进制数组为例)

INTEGER :: nx,nz

REAL, ALLOCATABLE, DIMENSION(:,:) :: vel

ALLOCATE(vel(1:nx,1:nz))

gfortran编译下的语法

open( 10, file=file_name_string, access='direct' , recl=4*nz*nx)

write(10, rec=1) vel(:,:)

close(10)

ifort编译下的语法

open( 10, file=file_name_string, access='direct' , recl=1*nz*nx)

write(10, rec=1) vel(:,:)

close(10)

DEALLOCATE(vel)

2、OpenMP并行编译的区别:

intel编译器: ifort -openmp

GNU编译器:gfortran -fopenmp

gfortran -c test.f90(编译test.f90生成test.o)


默认的输入输出WRITE(10, *) 和 READ(10, *)有时会导致错误,如字符串中存在斜杠符号“/”时,无法正确读入字符串。这时就需要考虑使用 format 函数进行格式化的输入输出控制。

常用的格式有:I(整数) 、F(浮点数)、E(科学计数法)、A(字符串)

write(*,"(I5)") 100

输出:_ _100

含义:5个字符宽度输出整数,前面两字符为空格。

write(*,"(F9.3)") 123.45

输出:_ _123.450

含义:9个字符宽度输出浮点数,小数部分占3个字符的宽度,前面两字符为空格,后补0。

write(*,"(E15.7)" 123.45

输出:_ _0.1234500E+03

含义:15个字符宽度的科学计数法输出浮点数,小数部分占7个字符。

write(*,"(A10)") "Hello"

含义:用10个字符宽度输出字符串,不足部分前面补空格。

write(*,"(5X,I3)") 100

含义:先填5个空格,再输出整数。


固定格式(Fortran 77)与自由格式(Fortran 90)的区别

固定格式

每行第1-6个字符为特殊含义字符,程序语句只能写在后面的第7-72个字符中。

第73个字符及以后的部分会被忽略,有的编译器会发出错误信息。

第一个字符为C,c或*,表示注释该行。

第1-5个字符为改行代码的代号,不然只能为空格。

第6个字符如果是“0”以外的任何字符,表示该行程序上接上一行程序。

自由格式

!后面同一行的文本都是注释。

每行可以编写132个字符。

行号要放在每行程序的最前面。

程序中行与行之间的连接用&符号。

程序命令之间的空格无意义。

上一篇下一篇

猜你喜欢

热点阅读