Frotran程序要点整理(使用、读写和编译)
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”的数学函数库。
ifort与gfortran的区别:
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个字符。
行号要放在每行程序的最前面。
程序中行与行之间的连接用&符号。
程序命令之间的空格无意义。