fortran常見問題解決_第1頁
fortran常見問題解決_第2頁
fortran常見問題解決_第3頁
fortran常見問題解決_第4頁
fortran常見問題解決_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、樓主為了減少重復(fù)回答問題,特編此帖,并不定期添加和更新內(nèi)容。錯誤難免,歡迎討論,僅供參考。很多人問哪里可以找到Fortran編譯器,有不少熱心學(xué)友提供網(wǎng)址,特匯集在這里。雖然俺檢驗過這些鏈接,但是它們不一定總有效。Fortran 編譯器下載:CVF 6.6FTN95 (License: Free for personal use)以下操作,如無特別說明,都是以CVF6.6為例。1. 如何加大Stack size?選Project => Settings =>

2、60;Link => Category: Output => Stack allocationsReserve: 這里填新值(默認為1M,若需要10M,則填10000000)2. 如何用Fortran批量生成文件?設(shè)要生成4000個文件,文件名為AA1-AA4000,如何寫循環(huán)生成文件,而不用寫4000次write命令呢?用內(nèi)部文件:character(len=80) : filename,forminteger : ido i=1,4000 

3、  select case (i)   case (1:9)      write(form,'(i1)') i   case (10:99)      write(form,'(i2)') i   case (100:999)   &#

4、160;  write(form,'(i3)') i   case (1000:9999)      write(form,'(i4)') i   end select   write(filename,*) "AA",trim(form),".TXT"   open(10,f

5、ile=filename)   write(10,*) i推薦精選   close(10)end do   stopend3. 如何用Fortran動態(tài)生成輸出格式?設(shè)有一個數(shù)組data(100),輸出時,希望每行輸出num個數(shù),而num由用戶輸入,如何實現(xiàn)?用內(nèi)部文件:character(len=80) : formreal : data(100)integer : i,numdata = (/

6、 (i,i=1,100) /)/10.0read(*,*) numwrite(form,*) "(",num,"f10.3)"write(*,form) datastopend4. MS POWERSTATION4.0是不是很垃圾?POWERSTATION4.0是垃圾,其中Bug太多,多到不可用的地步!在這個主題里,換了CVF后問題就沒了的人已有相當?shù)臄?shù)目。如果你用POWERSTATION4.0,遇到莫名其妙的錯誤,建議換CVF6.6,這是一個比較成熟的編譯器。5. 如何用F

7、90/95生成隨機數(shù)?注意:現(xiàn)在計算機產(chǎn)生的隨機數(shù)都是偽隨機數(shù)。random_number(x) 產(chǎn)生一個0到1之間的隨機數(shù)(x可以是向量),但是每次總是那幾個數(shù)。用了random_seed ()后,系統(tǒng)根據(jù)日期和時間隨機地提供種子,使得隨機數(shù)更隨機了。program random   implicit none   real : x   call random_seed ()    &

8、#160;! 系統(tǒng)根據(jù)日期和時間隨機地提供種子   call random_number (x)  ! 每次的隨機數(shù)就都不一樣了   write(*,*) x   stopend program random推薦精選6. 函數(shù)/子程序超載的例子設(shè)要編一個兩個變量值互換的子程序swap(a,b),啞元a,b可能是實型數(shù),整型數(shù),數(shù)組,矩陣,字符串,派生類型等等。但是希望只用一個子程序接口swap(a,b)來實

9、現(xiàn)。F90可以用類屬接口來實現(xiàn)這種子程序超載:module Utilities   implicit none   private I_Swap,R_Swap,RVec_Swap,RMat_Swap,Type_Swap   public  : Swap   interface Swap      module procedure 

10、;I_Swap,R_Swap,RVec_Swap,RMat_Swap,Type_Swap   end interface   contains   subroutine i_swap (a,b)  ! 整型置換      integer (ikind),intent(in out)  :  a,b  

11、0;   integer (ikind)                 :  t      。                ! 略

12、60;  end subroutine i_swap   subroutine r_swap (a,b)  ! 實型置換      real (rkind), intent(in out)    : a,b      real (rkind)  &#

13、160;                 : t      t = a      a = b      b = t     

14、60;return   end subroutine r_swap   subroutine RVec_swap (a,b)  ! 實型向量置換      real (rkind), intent(in out)    : a(:),b(:)      integer&

15、#160;(ikind)                 : i      do i=1, size(a)         call R_Swap (a(i),b(i)     &

16、#160;end do      return   end subroutine RVec_swap   subroutine RMat_swap (a,b)   ! 實型矩陣置換      。           &#

17、160;    ! 略   end subroutine RMat_swap推薦精選   subroutine Type_swap (a,b)   ! 派生類型置換      。              &#

18、160; ! 略   end subroutine Type_swapend module Utilities7. 如何在CVF中為多行代碼加注釋?見:8. 推薦好的代碼風格根據(jù)F90子集語言ELF90和F的要求整理(部分)。“強迫用”的語言特性:+ F90的自由格式的源代碼。+ implicit none。+ 子過程的啞元都要有intent屬性。+ 函數(shù)子程序的啞元必須指定為intent(in)。+ 所有子程序和函數(shù)都放在模

19、塊(module)中,然后引用(use)該模塊;或者放在program中。+ 數(shù)組啞元要求是假定形狀的,或者有固定的維數(shù)和大小。字符啞元要求是假定長度的。+ 對于recursive function(遞歸函數(shù))語句,必須有result子句。+ 在所有派生類型(type)的定義語句中,必須用雙冒號分隔符(:)。+ 主程序要求有program語句。+ 在程序單元的end語句中要求后跟程序單元的類型和名稱。+ 在end type語句中要求后跟類型的名稱。+ end program前必須有stop語句以

20、表示停止執(zhí)行。+ 子過程中必須有return語句,以表示返回。+ subroutine s( )并且call s( ),即必須有括號?!安坏糜谩钡恼Z言特性:- allocatable、intent、pointer、save、dimension、parameter和target語句形式。(用屬性形式代替。)- external語句形式。(用顯式的接口代替。)- assign、賦值go to、交錯return、continue、entry、和計算go to 語句。- i

21、nclude文件。(用模塊代替。)- data和block data。(在類型聲明語句中進行初始化或賦值。)- common塊。(將全局數(shù)據(jù)放在模塊中,用模塊代替。)- equivalence。(被認為是許多難以查找的編程錯誤的來源。)- double precision語句。(用real語句聲明雙精度的實型數(shù)。)- 語句函數(shù)。(用內(nèi)部函數(shù)代替。)- 專用固有函數(shù)。(用類屬函數(shù)代替。)- 假定大小數(shù)組。(用假定形狀數(shù)組代替。)- do n (其中n為語句標號)。(用do和en

22、d do代替。)推薦精選- 非整數(shù)do變量和表達式。- 同一行上多條語句。- 邏輯型case表達式。- 從if塊外面分支到end if。- where語句形式。(用where結(jié)構(gòu)形式。)- 在open和inquire語句中的blank= 說明符。- 雙字關(guān)鍵詞之間要求有空格:in out,go to。不能寫為inout,goto。9. 將字符串改為大寫的子程序   subroutine UpCase (str)

23、60;  !=   !  change to upper case   !=      character(len=*),intent(in out) : str      integer(4)          

24、60;       : icha,LL,icval      integer(4),parameter        : diff = ichar('a') - ichar('A')      LL = len_tri

25、m(str)      do icha=1,LL         icval = ichar(str(icha:icha)         if (icval>=ichar('a') .and. icval<=ichar('z')  t

26、hen            str(icha:icha) = char(icval-diff)         end if      end do      return   end s

27、ubroutine UpCase10. CVF中源代碼信息瀏覽默認情況下,代碼信息瀏覽是失效的(Go to Definition/Reference都不起作用),你可以將其啟用:1. Project/Settings/Fortran, 選中Generate Source Browse Information。2. 選BrowseInfo卡頁,選中Build Browse info file,點擊OK。3. Build程序。代碼瀏覽器僅當成功Build程序后

28、才可應(yīng)用。4. Tools/Source Browser。5. 在Browse對話框底部,找到Case sensitive復(fù)選框。Fortran是大小寫不敏感的語言,去除Case sensitive的選中。點擊OK。 6. 現(xiàn)在可以用Browse對話框來瀏覽函數(shù)調(diào)用關(guān)系以及變量聲明和引用關(guān)系。7. 光標置于一個變量名或函數(shù)名中,鼠標右鍵:Go to Definition使光標跳到該變量聲明或函數(shù)定義語句;Go to Reference使光標跳到該變量的引用或函數(shù)引用語句。注:

29、(Addison提供)IVF中現(xiàn)在不適用,因為此技術(shù)是屬于MS的,不是INTEL的,所以,intel正在與MS就有關(guān)問題進行磋商,目前的進展比較順利,可能要在9.1以后的版本中支持,目前還沒有時間推薦精選表。11. 如何在CVF中檢驗代碼是否符合F90/95標準?為了檢驗?zāi)愕拇a是否符合F90或F95標準,在CVF中選:Project/Settings.選Fortran頁卡Category下拉框選:Compilation DiagnosticsFortran Standard Checking下拉框選:Fortran 90 或

30、0;Fortran 95這樣,凡是CVF自家擴展的語法就都會有提示了。例:   type test      integer, allocatable : a(:)      integer, pointer     : b(:)   end type test若選了標準檢驗,會

31、提示:Warning: Allocatable fields of derived types are non-standard   A也就是說按照F90/95標準,type中不允許用allocatable。臭石頭雪球提供:VS2005 + IVF9.1 組合的方法差不多:項目屬性,F(xiàn)ortran,Diagnostics,Warn For Non-standard Fortran 選擇為Fortran 90 

32、;或 Fortran 9512. 如何輸出tab字符?char(9)。13. 如何在CVF中設(shè)置把Tab轉(zhuǎn)為空格Tab字符不在Fortran標準中,在不同環(huán)境下會有不同的顯示,不推薦使用。采用下列方法,可將Tab鍵轉(zhuǎn)為3個空格:依次選菜單Tools/Option,選Tab卡項,F(xiàn)ile type選Fortran,選Insert spaces,Tab size選3,Indent size選3。14. 如何實現(xiàn)“代碼自動補全”在CVF中:推薦精選在IVF中:問題各位大俠,非常感謝你們的回復(fù)。置頂帖中關(guān)于批處理

33、讀取文件的帖子我已經(jīng)看了。 帖子里是批處理AA1-AA4000.txt文件,文件名是1-4000的數(shù)字序列。而我要讀取的是時間序列的文件,即1月1日-12月31日,year+month+day 的形式。因此置頂帖中的例子不適用我這個問題。文件名為 (2006年365天的數(shù)據(jù),共365個文件)pre.20060101.datpre.20060102.datpre.20060103.dat. .pre.20060131.datpre.20060201.datpre.20060202.dat. .pre.20061231.dat單個文件讀取已經(jīng)完成,但是如何批處理還沒有解決。解決1:既然是有規(guī)律你就可以做循環(huán)來進行讀取, 每次循環(huán)讀取一個文件.例如做3層循環(huán), 分別是年循環(huán)(如果就一年那就不用循環(huán)了), 月循環(huán), 日循環(huán). 不難吧.解決2我的方法:先把文件名:pre.20060101.dat,pre.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論