1琼了、Frotran程序主要用于科學和工程計算(formula translator所袁,譯為“公式翻譯器”)。
2前翎、Frotran語言不區(qū)分大小寫午衰,可以直接對矩陣和復數(shù)進行運算宦言,執(zhí)行效率高响疚,支持openMPI并行計算践盼,在數(shù)值計算領域積累了大量源程序肄程。
3拓提、Frotran語言目前主要有兩種類型:Frotran 77標準的固定格式(老,以.for或.f結(jié)尾)和 Frotran 90標準的自由格式(新,以.f90結(jié)尾)。
4、幾個著名的Frotran程序包:IMSL,BLAS 和 LAPACK。
5刨肃、Linux系統(tǒng)中主要有兩種主流的Fortran程序編譯器,一種是微軟的ifort編譯(商業(yè)軟件需付費),一種是gfortran編譯。gfortran屬于GNU編譯器套件中的一部分航厚,安裝方便赦抖,使用免費舍杜。但一般認為ifort的編譯效率和優(yōu)化好于gfortran熬词。
-o output_filename:編譯輸出的可執(zhí)行文件名稱為outfile_filename(若無則默認名稱為a.out)。
-O、-O2椎镣、-O3拍摇、-O4:對編譯過程進行優(yōu)化巡语,不同數(shù)字表示不同的優(yōu)化等級(具體和編譯器相關(guān))。編譯優(yōu)化對計算密集型程序的性能提高很有幫助,但對有些應用程序襟齿,過分的優(yōu)化會導致計算結(jié)果錯誤涧黄。
-lm:表示鏈接名為“l(fā)ibm.a”的數(shù)學函數(shù)庫疚颊。
ifort與gfortran的區(qū)別:
1、數(shù)組空間的區(qū)別(以寫入二進制數(shù)組為例)
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并行編譯的區(qū)別:
intel編譯器: ifort -openmp
GNU編譯器:gfortran -fopenmp
gfortran -c test.f90(編譯test.f90生成test.o)
默認的輸入輸出WRITE(10, *) 和 READ(10, *)有時會導致錯誤,如字符串中存在斜杠符號“/”時迟杂,無法正確讀入字符串布蔗。這時就需要考慮使用 format 函數(shù)進行格式化的輸入輸出控制。
常用的格式有:I(整數(shù)) 涂身、F(浮點數(shù))揣钦、E(科學計數(shù)法)团驱、A(字符串)
write(*,"(I5)") 100
輸出:_ _100
含義:5個字符寬度輸出整數(shù)道逗,前面兩字符為空格此蜈。
write(*,"(F9.3)") 123.45
輸出:_ _123.450
含義:9個字符寬度輸出浮點數(shù)桨嫁,小數(shù)部分占3個字符的寬度爷辙,前面兩字符為空格血当,后補0臊旭。
write(*,"(E15.7)" 123.45
輸出:_ _0.1234500E+03
含義:15個字符寬度的科學計數(shù)法輸出浮點數(shù)奸鸯,小數(shù)部分占7個字符娄涩。
write(*,"(A10)") "Hello"
含義:用10個字符寬度輸出字符串钝满,不足部分前面補空格碎捺。
write(*,"(5X,I3)") 100
含義:先填5個空格诵叁,再輸出整數(shù)。
固定格式(Fortran 77)與自由格式(Fortran 90)的區(qū)別
固定格式
每行第1-6個字符為特殊含義字符,程序語句只能寫在后面的第7-72個字符中。
第73個字符及以后的部分會被忽略瑰妄,有的編譯器會發(fā)出錯誤信息。
第一個字符為C,c或*映砖,表示注釋該行间坐。
第1-5個字符為改行代碼的代號,不然只能為空格邑退。
第6個字符如果是“0”以外的任何字符竹宋,表示該行程序上接上一行程序。
自由格式
地技!后面同一行的文本都是注釋蜈七。
每行可以編寫132個字符。
行號要放在每行程序的最前面莫矗。
程序中行與行之間的連接用&符號飒硅。
程序命令之間的空格無意義。