SlideShare a Scribd company logo
1 of 30
Download to read offline
前言



                  前言

  本書是中國文化大學執行教育部 99-100 年大學跨學門科學人才培育
銜接計畫的成果,在因緣際會之下,我擔任本校總計畫主持人、有幸與
物理系程思誠教授、吳慧敏教授、電機系李克怡主任、化材系陳景祥院
長、吳誌明教授及紡織工程學系王權泉教授合作,共同推動五個分項計
畫,包括 99A1 物理–計算、材料、天文與光電專題研究人才培育計劃、
99-B 1-1 奈米碳管應用於生物感測器、99-B 1-2 重組蛋白質表現、純化與
應用、100-B1-1 奈米碳管應用於提升奈米複合材料機械性質及 100-B1-2
奈米碳管應用於抗電磁波纖維膜之製作。兩年期間,不僅各計畫推動順
利、成果豐碩,也大幅提升我們跨系及跨院的合作,其中尤以 99A1 物理–
計算、材料、天文與光電專題研究人才培育計劃更促成了本書的誕生。
  99A1 是文化大學物理系近年來推動專題導向之師徒制小組學習的
成果體現,我們透過書報討論及專題研究課程引導學生逐步由專題演講、
文獻研讀、小組研討、繼而分組實驗演習、進度追蹤分享、期中期末報
告 最後舉行壁報論文比賽發表成果 這套作法實施幾年來 收效甚宏,
 、              。         ,
也頗獲肯定,因而在 2010 年獲得教育部計劃補助,並完成六份教材,
包括我的專題討論計算物理 A 組教材 鄒忠毅教授的專題討論計算物理
                  、
B 組教材、王建亞教授的專題討論應用光學組-全像光學元件、3D 圖
與變圖、江丕智教授的專題討論天文物理組-橢圓運動中的二體問題、
吳慧敏教授的專題討論奈米材料組教材及蔣幼齡教授的專題討論物理
數學組教材。本書即脫胎自專題討論計算物理 A 組教材。
  以內容而言,本書包含我過去十四年以來,教授數值分析、計算物
理、非線性物理及平行運算與影像處理等課程的教材與講義,其中數值


                                         i
跨領域物理視算



分析主要採用 Ward Cheney and David Kincaid 的 Numerical Mathematics
and Computing, 4th- 6th Edition,計算物理主要採用 Rubin H. Landau &
Manuel J. Paez 的 Computational Physics, problem solving with computers
                                                                     ,
非 線 性 物 理 主 要 採 用 Richard H. Enns and George C. McGuire 的
Nonlinear Physics with Maple for Scientists and Engineers, 2nd Ed. 平行運
                                                                 、
算與影像處理主要採用 Al Geist 及 Adam Beguelin 等的 PVM: Parallel
Virtual Machine–A Users' Guide and Tutorial for Networked Parallel
Computing 及 Ioannis Pitas 的 Digital Image Processing Algorithms and
Applications。此外,在專題討論(一)、(二)、 (三)中,計算物理組成員
葉曉祥、周惠萱、張茗婷及葉晉瑜的專題,包括靜電位的數值解與解析
解、力學與電路系統中的線性與非線性振盪、PVM 平行運算系統之架
設與測試,Sequential and parallel solutions with PVM and MPI of the
Electrostatic Laplace Equation、Lorentz system 的模擬、實驗與多媒體呈
現及 Polynomial Basins of Attraction 等,也構成本書的骨幹。
     本書的特點有三:
     一、使用 Visual Fortran 程式語言
          在計算物理課程使用 Fortran 者甚多,但使用 Visual Fortran
     則極少,它可以兼顧使用者對於高效能運算與即時繪圖之需求。
     二、Visual Fortran 之二維、三維繪圖、動畫、影像及音效之處理
          繪圖、動畫、影像及音效是學生極感興趣的主題,本教材可
     協助學生自行創作圖形、動畫及音效,提升學習興趣及效果。
     三、PVM 與 MPI 平行運算系統之詳盡介紹
          PVM 與 MPI 平行運算系統大部分使用 Unix 或 Linux 系統,
     本教材介紹 Windows 版本,讓使用者很容易即可利用電腦實驗室
     汰換的電腦,自行架設及使用平行運算系統。

ii
前言



   本書分為三部分共計十章,希望以由淺入深、由基本到應用、由基
礎到跨領域的方式,逐步介紹計算物理;第一部”程式語言與編譯器”,
包括第一章 ”Compaq Visual Fortran 簡介” 第二章 ”使用 Compaq Visual
                               、
Fortran 繪圖”,及第三章 ”進階繪圖: 影像處理(Image Processing) 與
旅行銷售員問題(Travelling Salesman Problem) ”;第二部 ”計算物理:電
磁學、力學、非線性與最佳化問題”,包括第四章 ”靜電位的數值解與
解析解”,第五章 ”力學與電路系統中的線性與非線性振盪”,第六
章 ”Lorenz system 的模擬、電路實驗與多媒體呈現”,及第七章 ”多體
系之間的競爭問題”;第三部 ”PVM 與 MPI 平行運算系統”,包括第八
章 ”PVM 平行運算系統之架設與測試”,第九章”MPI 平行運算系統 I:
TSP and Laplace Equation”,及第十章 ”MPI 平行運算系統 II:波與熱之
1D 與 2D 動畫”。
   除紙本之外,本書另附程式光碟,包含各章所用 f90 程式及編譯完
成之執行檔。f90 程式均依其目的及其出現章節命名:
   integration01:梯形法、辛普森法及高斯法等之數值積分;
   bugs01:Logistic Map 產生程式;
   convert01:二進位、八進位及十六進位之轉換;
   boa02:吸引域產生程式,包含以 IMSL 解多項式的根;
   mandel02:Mandelbrot Map 產生程式;
   scarpet02:Sierpinski carpet 產生程式;
   3Dplot24:3D 動態繪圖程式,用於第二及第四章;
   image03:包含十四種功能之影像處理程式;
   tsp03:以模擬退火法解旅行銷售員問題及繪圖;
   oscillator57:根據 rk4sys01 修改,可解振盪及競爭問題,用於第五
               及第七章;

                                                     iii
跨領域物理視算



     lorenz06:根據 rk4sys01 修改,可解 lorenz 系統及作 3D 繪圖;
     beep06:混沌音效產生程式;
     bell06:混沌音效 wav 波形檔產生程式;
     psdot08:PVM 內積計算範例程式;
     circle08:PVM circle and other maps 產生程式;
     laplacePVM08:以 PVM 解 Laplace equation;
     hello09:MPI 測試範例程式;
     pi09:MPI 圓周率計算範例程式;
     laplaceMPI09:以 MPI 解 Laplace equation;
     wave10:解波動方程式,以動畫呈現;
     heat101:解熱傳導方程式,以動畫呈現;
     heat102:解熱傳導方程式,以 3DPlot 呈現;
     heatMPI10:以 MPI 解熱傳導方程式;
     waveMPI10:以 MPI 解波動方程式。
     這些程式經 Visual Fortran 編譯之後,將產生應用程式,可在其他
Windows 系統下獨立執行,因此我們也在光碟內附上這些應用程式,以
供未安裝 Visual Fortran 編譯器的讀者使用。
     除光碟之外,我們也在網站 http://spy.pccu.edu.tw/comphy 上提供課
程簡介、講義、作業及範例程式供使用者下載。
     最後,謹向本書編輯委員會成員淡江大學化學系王伯昌院長、台灣
大學物理學系傅昭銘教授 文化大學物理學系吳慧敏教授 王建亞教授、
           、             、
蔣幼齡教授及鄒忠毅教授的指正與協助深致謝意,並感謝教育部顧問室
及中央大學跨學門科學人才培育銜接計畫辦公室的指導與協助。




iv
目錄
前言 .............................................................................................................. i

第一部            程式語言與編譯器...................................................................... 1

       第一章            Compaq Visual Fortran 簡介 ............................................... 1
              1.1      Fortran77、Fortran90 與 Compaq Visual Fortran.............. 3
              1.2      Compaq Visual Fortran 的視窗介面 .................................. 7
              1.3      檔案的開啟與讀寫(open, read and write) ....................... 10
              1.4      使用常用副程式及程式庫(subroutine and library)......... 13

       第二章 使用 Compaq Visual Fortran 繪圖..................................... 18
              2.1      Visual Fortran 的科學繪圖模組 scigraph ........................ 18
              2.2      使用 Compaq Visual Fortran 直接繪圖 ........................... 27
              2.3      以 Visual Fortran 繪出 3D 互動立體圖 ........................... 44

       第三章 進階繪圖:影像處理(Image Processing) 與旅行銷售員
           問題(Travelling Salesman Problem)..................................... 48
              3.1      簡介 .................................................................................. 48
              3.2      Visual Fortran 影像處理系統........................................... 48
              3.3      image03.f90 ...................................................................... 55
              3.4      旅行銷售員問題(Travelling Salesman Problem)............. 88
              3.5      tsp03.f90 ........................................................................... 90

第二部            計算物理:電磁學、力學、非線性與最佳化問題 .............. 103

       第四章            靜電位的解析解與數值解 ............................................. 104
              4.1      簡介 ................................................................................ 104
              4.2      Laplace’s Equation 的解析解與數值解 ......................... 104

                                                                                                                      v
跨領域物理視算


      4.3    三個範例之解析解與數值解 ........................................ 108
      4.4    3Dplot24.f90 ................................................................... 114
     第五章    力學與電路系統中的線性 與非線性振盪.................... 132
      5.1    簡介 ................................................................................ 132
      5.2    解運動方程式(The Oscillator Solver) ........................... 133
      5.3    X-t, V-t 圖與 X-V 相空間圖 .......................................... 135
      5.4    佛科擺與卡皮查擺 ........................................................ 141
      5.5    Oscillator57.f90 .............................................................. 145
     第六章    Lorenz system 的模擬、電路 實驗與多媒體呈現 ....... 154
      6.1    簡介 ................................................................................ 154
      6.2    Lorenz system 的 2D 與 3D 圖 ..................................... 155
      6.3    混沌音樂(Chaos Music) ................................................. 163
      6.4    Chua Circuit .................................................................... 169
      6.5    Lorenz06.f90 ................................................................... 172
      6.6    beep06.f90 ...................................................................... 179
      6.7    bell06.f90 ........................................................................ 182
     第七章    多體系之間的競爭問題 ................................................. 188
      7.1    簡介 ................................................................................ 188
      7.2    Volterra-Lotka 競爭方程組 ........................................... 188
      7.3 中歐狐狸狂犬病的流行病模型 ....................................... 189
      7.4 Rapoport 的軍火競賽模型 ................................................ 190
      7.5 化學振盪反應 ................................................................... 190

第三部   PVM 與 MPI 平行運算系統 ................................................... 199

     第八章    PVM 平行運算系統之架設 與測試............................. 200
      8.1    簡介 ................................................................................ 200

vi
目錄


             8.2      軟硬體需求 .................................................................... 201
             8.3      系統架設 ........................................................................ 201
             8.4      平行運算原理與架構 .................................................... 204
             8.5      測試實例 ........................................................................ 205
             8.6      psdot08.f ......................................................................... 211
             8.7      circle08.f ......................................................................... 218
             8.8      laplacePVM08.f .............................................................. 229
       第九章           MPI 平行運算系統 I: 系統 架設與測試 ................... 239
             9.1      簡介 ................................................................................ 239
             9.2      MPI 系統之架設與測試 ................................................ 239
             9.3      hello09.f90 ...................................................................... 244
             9.4       pi09.f ............................................................................. 248
             9.5      LaplaceMPI09.f .............................................................. 252
       第十章           MPI 平行運算系統 II:波動 與熱傳 ............................ 261
             10.1 簡介 ................................................................................ 261
             10.2 波方程式 ........................................................................ 261
             10.3 wave10.f90...................................................................... 264
             10.4 熱傳導方程式 ................................................................ 273
             10.5 heat101.f90 ..................................................................... 277
             10.6 heat102.f 90 .................................................................... 282
             10.7 以 MPI 解波方程式 ....................................................... 287
             10.8 waveMPI10.f90............................................................... 288
             10.9 以 MPI 解熱傳導方程式 ............................................... 301
             10.10 heatMPI10.f90 ................................................................ 302
參考文獻 ................................................................................................. 321



                                                                                                             vii
跨領域物理視算




viii
第一部

程式語言與編譯器
跨領域物理視算



第一章 Compaq Visual Fortran 簡介

    在動筆寫計算物理課本之前,第一個首要問題,便是到底要選用哪
一種程式語言?而坊間計算物理課本所使用的程式語言從 Java、C、
Fortran、Maple、Mathematica 乃至於 true Basic,可謂五花八門、應有
盡有。這些程式語言自然亦各具特色;譬如 Maple 和 Mathematica 長於
符號運算,又能即時繪圖;Basic 簡單易學,也能即時繪圖;Java 具有
免費軟體的優勢,更隨著網路發達,成為最廣為人所用的程式語言,至
於 C 及 Fortran 可謂老牌專業程式語言,Fortran 尤其具有可做高效能平
行運算、擁有眾多支援的科學程式庫、及大多數大型科學模擬程式均使
用 Fortran 之特點,而這也是本書採用 Fortran 的主要考量。
    一般的 Fortran 採用命令列方式輸入,在 DOS 下操作;通常利用
Fortran 強大的運算能力得到數據 再透過其他繪圖軟體讀取數據繪圖,
                   ,
程序不可謂不繁瑣,也容易出錯。
    在此方面,Visual Fortran 具有強大的計算及繪圖功能,適合用於
物理系統的模擬與視覺化;此外,編譯器也提供相當清楚明確的錯誤訊
息,及內建除錯器(debugger),提供程式設計者不錯的開發環境。它由
最早的 Microsoft Powerstation 演變為 Digital Visual Fortran 繼而演變為
                                                     ,
Compaq Visual Fortran,目前則為 Intel Visual Fortran,但核心並無太大
改變。
    對傳統 Fortran 的使用者來說,Visual Fortran 具有視窗介面,且編
譯完成後所得到的執行檔為一應用程式,可在其他視窗下執行,因此具
有雙重便利性。




2
Compaq Vis Fortran 簡介
                                                  sual



1.1 Fortran
          n77、Fortra
                   an90 與 Co
                           ompaq Visual Fortran
   Compaq V
          Visual Fortra 編譯
                         譯器支援 Fortran 、
                                    n77 Fortran90 與 Fortran95,
      路上最常見的是 Fortran77 和 Fortran90,本書
由於文獻及網路     是                        書也以此二者
為主,並將逐步
      步培養學習者搜
            搜尋及利用網路
                  路資源,以建立及
                         及改進本身應
用程式之能力。
   Fortran77 與 Fortran90 的主要差異有以下
                         的      下幾點 [9]:
     欄位:Fortran77 為固定
                    定格式(fixed fo
                               ormat),第一欄為
                                         為註解欄,第
           2 至 5 欄為位
                   位址欄,第六欄為
                          為接續欄,因此
                                此指令(fortran
           statement)須寫
                      寫在第 7 至 72 欄
                                 欄;Fortran90 為自
                                              自由格式(free
           format),指令(
                     (fortran statemen
                                     nt)可寫在第 1 至 132 欄。(圖
           1.1 及圖 1.2)
        Fortran77 每行只
     換行:F           只能寫一指令,
                          ,指令太長需換
                                換行時,要在第
           六欄接續欄輸入
                 入任一文數字元
                       元;Fortran90 則
                                   則是每行能寫
           數個指令,用分
                 分號”;”隔開,換
                         換行時在行末輸
                               輸入符號”&”。
     註解:註解對程式的開
              開發及推廣至為         n77 是在第一
                    為重要,Fortran
                 字母”C”(comment);Fortran90 則是可在任
           欄註解欄輸入字                      0
           一欄輸入驚嘆號
                 號”!”,其後的敘
                         敘述即成為註解
                               解。




         圖 1 Fortran77 的註
           1.1          註解欄、位址欄、接
                                接續欄、陣列及迴圈



                                                             3
跨領域物理視算




               圖 1.2 Fortran90 的註解、接續
                                    續陣列及迴圈

      陣列:圖 1.1 亦顯示 Fortran77 以 Dim
                   F             mension 指令宣
                                           宣告陣列 R 的
      方法 R 的大小 R1×R 另以 Integer 宣
        ,         R2           宣告為整數 再 Parameter
                                    ,再以
      定義 R
         R1=10 及 R2=10
                     0;圖 1.2 另顯示 Fortran90 可 Integer*4,
                               示           可用
      ALLOC
          CATABLE :: aa
                      a(:,:)宣告動態陣 aa,再於後
                                陣列     後續讀取 aa 的
      大小 n
         nx×ny 之後,以 ALLOCATE 配置之。Fortr
                  以                  ran90 還可用
      Integer Parameter :: si
            r,              ize=400 同時宣 size 為整數,且設定其值
                                      宣告
      為 400。
                   ortran77 以 20 標
      迴圈:圖 1.1 顯示 Fo             標示之 Do 迴圈
                                         圈,此迴圈以
      20 Con
           ntinue 為終點; 1.2 顯示 Fo
                     ;圖        ortran90 之 Do While 迴圈,
      以 End 為終點,其 While 可採用
          ddo   其中              行條件篩選。
                          用布林代數進行
    圖 1.3 是一
           一個完整的 Fortran77 範例程式 BUGS;它在第 1 行到第 3
                              式        第
      稱及目的;第 4 行的 program 是用來定義程式
行註解程式名稱                         式名稱;第 5
行到第 7 行進一     是利用 2 次迭代 logistic map m
        一步註解程式是       代              m*y*(1-y)求得
         rcation map);第 8 行用 Impli
分岐映射(bifur            第          icit none 取消預 i,j,k,l,m,n
                                             預設
六個字元及其開
      開頭之變數為整     實數之變數設定,以強制要求
            整數、其他為實
宣告數型;第 10 行以 Real*8 宣告倍精度,亦即 32 位元實
                  8               實數;第 11 行
integer 宣告單
          單精度整數;第 12 行到第 14 行定義增長率 m 的極小值
m_min、極大值 m_max 及增量 step;第 15 行 Open 開啟
        值         量           行以      啟檔案 bugs.dat

4
Compaq Vis Fortran 簡介
                                                         sual



以供寫入數據;第 17 行到第 28 行是主要迴 10,其目的
              第        迴圈     的是在計算不
       (本例僅計算 m=1 及 1.5)下的 logistic map;第 18 行設定 y
同的增長率 m(                                第
的初值;第 20 行到第 22 行是
       0         是內層迴圈 20,
                         ,其目的是把 lo
                                 ogistic map 迭
代 201 次(x=0-
           ->200,x 為虛擬引數),但不紀錄
                             錄;第 22 行、第 27 行及第
28 行的 Contin 是作為 Do 迴圈的終點 第 24 行到第 27 行
           nue      迴    ;            行是內層迴圈
30,其目的是把 logistic map 迭代 201 次(x=
       把                        =0->200),但寫入
                                           入檔案 6,亦
即 bugs.dat;第 26 行是以格式
           第                    把增長率 m 及人 y 寫入檔
                    式(format)50,把       人口
案 6;第 29 行
         行指定 m 及 y 分別為 f5.3 及 f1
                   分           10.6,亦即 5 位
                                         位數實數(含小
      ),其中小數點以 3 位數、及 10 位數實數,其中小數點
數點及正負號)      以下     及




   圖 1.3 Fort
            tran77 範例程式 BUGS.f (code cour
                        B               rtesy of Prof. R.H. Landau)


                                                                      5
跨領域物理視算



以下 6 位數;第 30 行是關閉檔案 6;第 31 行是停止執行,並列印引號
內 的 訊息 。本 程 式是 根據 非 線性 邏輯 映 射之 二次 方 程式 (Nonlinear
Quadratic Logistic Map)
                 1                              (1.1)
    求得系統由設定之起始值迭代若干次之後的人口,式中 xi 及 xi+1 分
別為第 i 及 i+1 代的人口,m 為增長率。因此在迴圈 20 會有若干次迭代
未予記錄,以保證採樣已脫離系統暫態(transient state)。
    圖 1.4 是一個完整的 Fortran90 範例程式 Convert;它在第 1 行到第
3 行註解程式名稱及目的;第 4 行的 program 是用來定義程式名稱;第
4 行的 use 是用來聯結內建程式庫 dflib;第 6 行用 Implicit none 取消預
設變數數型;第 7 行宣告 xd,yd 為倍精度實數;第 8 行宣告 xs,ys 為單
精度實數 第 9 行及第 10 行宣告 num,hexa,octal 及 binary 為倍精度整數;
    ;
第 11 行宣告 key 為字符;第 15 行、第 17 行、第 18 行及第 19 行分別
設定 num 為十進位 21542643、hexa 為十六進位 z'7F27E520'、octal 為八
進位 o'11717'、及 binary 為二進位 b'0001001111001111',但這幾個變數
已被宣告為整數(十進位),因此在第 25 行會轉換為整數列印出來;第
20 行、第 21 行、第 23 行及第 24 行的 print *表示在螢幕上列印引號中
的訊息;第 22 行則是以引號中的格式列印變數 num 所存的十進位整數
21542643,其中 z8.8 表示八位數的十六進位整數,且八位數全都列印,
不足八位則補 0,因此印出 0148B6F3,o12.12 印出 000122133363,而
b32.32 則印出 00000001010010001011011011110011。




6
Compaq Vis Fortran 簡介
                                                      sual




                   圖 1.4 Fo
                          ortran90 範例程式 Convert



1.2 Compa Visual Fo
        aq        ortran 的視
                          視窗介面
   進入 Com
        mpaq Visual Fortr 之後,預設
                        ran   設會出現三個視窗
                                     窗,但亦可由
命令列中的 vie 增減,如圖 1.5 所示 [6] [8
        ew                  8]:
     Worksp
          pace window
     所有 pr
         rojcet、程式都會
                   會出現在此視窗
                         窗。
     一個 W
        Workspace 可放多 projcet;一 projcet 可放
                    多個        一個         放多個程式。
     Text wi
           indow
     程式編
       編輯器


                                                                7
跨領域物理視算



    Statement、 routine 以藍色呈現,註
                       以     註解以紅色呈現。
    Output window
    執行及
      及錯誤訊息視窗




             圖 1.5 Compaq Visual Fortran 的視窗介面




8
Compaq Vis Fortran 簡介
                                                 sual




              Go
              Build
                    e
              Compile
            圖 1.6 Compaq Visual Fortran 的視窗介面

       後,用 Compile、Build、Go 三個按鈕即可編
   開啟檔案後                          編譯、建立執
行檔(包括聯結      行,如圖 1.6 所示
      結程式庫)及執行         示。
   Visual For
            rtran 內建除錯器           利用圖 1.6 Go 旁
                      器(debugger),利          旁的小手可設
定 breakpoint,
            ,選定執行程式      偵錯。圖 1.7 是
                  式停止點,方便偵        是在程式內設
定停止點後,用 Compile、Bu
      用          uild、Go 啟動 D
                            Debugger 之情形
                                       形;此時可由
      清單(Variable list)追蹤變數數值,得知程式進
左下角的變數清           l               進行至何處及
      等資訊 例如圖 2.3 即指示此時 M = 0 Y = 0.0000000E+00,
甚麼地方出錯等  ;  圖         時      ,
X = 1.0102051E-02 等。在 Debug 模式可用 Debug 視窗第
                      D        用         第一排的第一
(restart 重啟)及
            及第二(stop debu
                        ugging 停止)按鈕重啟或停止,也可用第五
(show next statement 顯示下一
                        一指令)、第六(st into 執行下一
                                 tep       一指令,並進
      第七(step over 執行下一指令)、
入副程式)、第            執      、第八(step out 跳出副程式)
或第九(run to c
           cursor 執行至游
                     游標)按鈕,微調
                            調程式的執行。




                                                           9
跨領域物理視算




              圖 1.7 Compaq Vis
                             sual Fortran 的 de
                                             ebugger 視窗介面



1.3 檔案的
      的開啟與讀寫(open, re and wri
                    ead     ite)
     Visual For
              rtran 可透過讀與
                        與寫指令,處理各類型資料的輸
                                     輸入與輸出。
當資料量很大時 可利用檔案
      時,    案存取 此時即須
               ,   須先以(open) 指
                             指令開啟檔案,
其語法如下 [7
       7]:
     Open(unit= File='d:opti
              =6,           ics1.dat', Form=
                                           ='formatted', Stat
                                                            tus='old')
     其中” uni
           it=”可省略,6 為檔案在本程式
                           式內之代號,可 read(6)、
                                 可用
write(6)配合適 format 格式讀寫;如欲在同
          適當                     同一檔案 6,則
                           同一程式讀寫同
需先關閉檔案,即 close(6)才
                 才能讀取。
     ” File=”指
             指述檔案位置,因此引號中要寫
                          寫出檔案完整路
                                路徑,如僅寫
      則預設於 works
出檔案名稱,則        space 所在目錄;”Form =” 指述
                                    述數據格式,


10
Compaq Visual Fortran 簡介



有 formatted、 unformatted 及 binary 三種,其中 formatted 為序列存取,
分 record 寫入,每個 record 最後都有返回(carriage return CR)及換行(line
feed LF)字元,故最佔空間,但可用 text editor 開啟檢視;unformatted 及
binary 為直接存取,其中又以 binary 二進位最為精簡,適於大量數據之
存取 ”Status=” 指述檔案型式 有 old new scratch replace 及 unknown
  ;                ,     、   、       、
五種,其中 scratch 是暫存檔、replace 會取代現有檔案、unknown 對現
有檔案會更改其 Status 為 old 、對新檔案則會更改其 Status 為 new。
   決定了檔案型式與數據格式之後,只要記得讀寫的程序必須一致之
原則,就能順利運用靈活讀寫檔案所帶來的便利,圖 1.8 及圖 1.9 是一
個開啟與讀寫檔案的實例,取自第七章的渾屯音樂;在圖 1.8 中該程式
分別以 wave 和 data 格式開啟檔案並寫入,其中 wave 可以播放,而 data
可用以繪出波形,Write(1)及 write(2) 分別將數據以二進位格式寫入
bell01.wav 及 bell01.dat,本範例是


      open(unit=1, file='C:bell01.wav',form='binary')
      open(unit=2, file='C:bell01.dat',form='binary')
      do i=1,nr*ne
        write(1) w(i)
      end do
      do i=1,nr*ne
        write(2) w(i)
      end do
          圖 1.8 本程式分別以 wave 和 data 格式開啟檔案並寫入




                                                             11
跨領域物理視算



           open(unit=1, file='C:bell01.dat',form='binary')
           do i=1,nsteps
               read(1) yy(i,1)
           end do

              圖 1.9 本程式開啟一 binary 格式之 data 檔案並讀取

利用迴圈寫入 nr*ne 個 w 陣列元素,因此在圖 1.9 另一程式中,亦同樣
利用迴圈讀取 nsteps = nr*ne 個 yy 陣列元素,再進行後續處理。在此範
例中,由於是用二進位存取,所以也可以不用迴圈讀寫 w 及 yy 陣列,
而以 write(1) w 及 read (1) yy(:,1)的方式直接讀寫,更為方便快速。
     圖 1.10 及圖 1.11 是另一個開啟與讀寫檔案的實例,在圖 1.10 中,
該程式以預設 formatted 格式−在此為 f10.4 把數據寫入 rk4sys.dat 檔案;
                             ,
以此方式,將產生 nsteps 行、每行一個數據的檔案,頗占空間,但可用
text editor 如 notpad 檢視,如圖 1.12 所示。圖 1.11 顯示在另一程式開啟
並讀取檔案 rk4sys.dat,以進行後續處理。此處需注意 nsteps 是在圖 1.10
程式寫入檔案的總記錄數 max 則是在圖 1.11 程式讀取檔案的總記錄數,
           ;
因此 max 必須≦nsteps。


     Open(6, File='rk4sys.dat', Status='unknown')
     61 format(f10.4)
     Do i = 1, nsteps
         write (6,61) xx(i,1)
      Enddo

          圖 1.10 本程式以 formatted 格式開啟檔案 rk4sys.dat 並寫入




12
Compaq Vis Fortran 簡介
                                                        sual



     Open(6, FFile='rk4sys.dat Status='old')
                             t',
     61 formaat(f10.4)
     Do i = 1, max
       read(6,61) input(i)
     Enddo
          圖 1.11 本程式以 form
                         matted 格式開啟檔案 rk4sys.dat 並讀
                                     案             讀取




          圖 1.12 用 notepad 檢視 rk4sys.dat 檔案
                           檢              案,數據格式為 f10
                                                    0.6



1.4 使 用 常 用 副 程 式 及 程 式 庫 (subrou
                                utine and
          y)
    library
    程式的複雜度會隨著其功
              功能增強而增加
                    加,此時可考慮
                          慮使用常用副
           ne)或函數副程式
程式(subroutin       式(function)以精
                               精簡程式架構,
                                     ,更可使用程
式庫(library)內
           內的常用副程式
                 式或函數副程式,以節省個人程
                              程式開發的心
力,並獲得程     的效益。圖 1.1 是在主程式
     程式庫最佳化的       13    式中,以 call
rk4sys(n,h,x,ns
              steps,xx,yy,n,jj) 呼叫常用副程 subroutine rk
                                     程式            k4sys (n,h,x,


                                                                 13
跨領域物理視算




          圖 1.13 在主程式中呼叫常用副程式之範例
                   程      副




14
Compaq Vis Fortran 簡介
                                                      sual



nsteps,xx,yy,m,
              ,jj),再於常用副
                       副程式 rk4sys 中
                                  中,以 call xpsy
                                              ys(n,x,f(0,1),jj)
呼 叫 常 用 副程 式 subroutine xpsys(n,x,f,jj) 之 範例 。 此 範 例顯 示 使 用
         程
subroutine 時,需留意的幾個
                  個重點:
            outine 可透過其
     1. Subro                     )傳遞變數及陣列
                      其幅數(argument)      列;其在主、
        副程式
          式內的數目及數
                數型都要一致;
     2. Subro
            outine 是獨立的
                      的程式區塊,始於 Subroutine 而
                             於            而終於 End,其
        內變數
          數仍需宣告;
     3. Subro
            outine 內仍可再
                      再呼叫 Subroutine
                                   e;
    如使用商用     庫內的 Subrouti 或 function,則通常沒有
        用或開放程式庫          ine
原始檔,也不會
      會出現在程式內     在程式開頭加一 use 指令,例
            內,此時僅需在
如使用 Visual F
           Fortran 內建的 dflib 程式庫時 應使用 use dfli 、
                                 ,           ib 使用 IMSL
(International M
               Mathematics an Statistics Lib
                            nd             brary) 程式庫時
                                                     時,則用 use
IMSL、使用 d
        dislin (Internation Mathematics and Statistics L
                          nal         s                Library) 程式
庫時,則用 us dislin,如圖 1.14 所示。
       se




             圖 1.14 在主程式
                       式中呼叫程式庫 Subroutine 之範例

    在圖 1.14 之程式中,dat
                   te_and_time 是 d
                                 dflib 內可回報日
                                           日期及時間的
           其中 year(1)、ye
Subroutine,其           ear(2)、year(3)分
                                     分別為存有日期
                                           期、時間及時
區之字符變數,而 date_time 則是存有日期、時間及時區之
                               之整數陣列,


                                                                15
跨領域物理視算



共有八個變數,分別存有年、月、日、時差、時、分、秒及毫秒;QDAG
是 IMSL 提供的單精度積分 Subroutine 使用可調式高斯積分法(adaptive
                         ,
Gauss-Kronrod rule),其中 F, A, B, ERRABS, ERRREL, IRULE, RESULT,
ERREST 分別為積分函數、積分下限、積分上限、絕對誤差、相對誤差、
高斯法採用點數、積分估計值及誤差估計值;bardis 是使用 dislin 提供
繪圖程式繪製直方圖的範例 Subroutine 使用這些程式庫內的 Subroutine
                      ;
時 可分別查閱 Visual Fortran Online Documentation Visual Fortran IMSL
 ,                                        、
Fortran 90 MP Library Help 及 DISLIN Online Manual 等文件,以取得詳
細說明。
     除常用副程式之外,亦可使用函數副程式(Function),如圖 1.15 所
示。本範例顯示呼叫 Function 與 Subroutine 之差異在於 Function 並非
如 Subroutine 傳回一個或多個引數 而是傳回單一數值 因此可利用 real
                      ,        ,
function 之方式來界定其數型;此外,本範例亦顯示主程式及副程式可
用不同之引數名稱。




16
Compaq Vis Fortran 簡介
                            sual




圖 1.15 在主程式中呼叫函數副
         程      副程式之範例




                                     17
跨領域物理視算



第二章 使用 Compaq Visual Fortran
    繪圖

     使用 Compaq Visual Fortran 繪圖的第一步 是開啟正確的 project,
                                    ,
即 Fortran Standard or QuickWin application (Fortran 標準或多視窗應用) ,
顧名思義,此 project 可產生標準的單一視窗或多視窗繪圖,其他 project
如 Fortran Console application 可產生控制台應用程式,即一般非圖形輸
出之應用程式 Fortran Static Library 可產生靜態程式庫 Fortran Dynamic
      、                               、
Link Library 可產生動態程式庫、Fortran Windows application 可產生視
窗應用程式等 [26]。
     以上所述,是由 Compaq Visual Fortran 的 file => new 按鈕新建繪圖
project 的作法,同時也解釋了 project 的種類,但最方便的做法,則是
複製現成的 project 來用。例如 scigraph 範例 project,本章第一節將針對
如何使用科學繪圖模組 scigraph,做詳細的說明,第二節將說明如何使
用 Compaq Visual Fortran 直接繪圖,第三節將說明如何繪出 3D 互動立
體圖。


2.1 Visual Fortran 的科學繪圖模組 scigraph
     在 Compaq Visual Fortran 安 裝 光 碟 裡 的       Compaq Visual
FortranINFODFSAMPLES 目錄下,有一個 scigraph 科學繪圖 project,
複製整個目錄到自訂位置或到系統預設位置,以便於管理,系統預設位
置是在 C:Program FilesMicrosoft Visual StudioCOMMONMSDEV98
My Projects。scigraph 目錄另包含 scigraph 及 sgdemo 二目錄,前者是
Library、後者是應用程式;在 CVF 視窗的 project 按鈕選擇 scigraph 可

18
使用 Compaq Visual Fortran 繪圖



編譯、修改 Library,選擇 sgdemo 可編譯、修改及執行應用程式。例如
需 改 變 圖 形 底 色 (background color) 或 圖 形 像 素 (pixel) 時 , 即 需 修 改
Library,其程序較執行應用程式簡單,只需 compile 及 build 兩個步驟,
或在 build 按鈕項下選擇 build scigraph.lib,以更新 scigraph 程式庫。
    Scigraph 是 Compaq Visual Fortran 內附的簡易 2D 科學繪圖程式庫,
提供各種 2D 繪圖之程式範例,供 programmer 自行修改使用,包括 Line
Graphs、Bar Graphs、XY Graphs、Pie Graphs 等;在前述 scigraph 目錄
下有一份 scigraph.doc 說明文件,針對圖形、數據及座標軸等之設定、
其內建繪圖類型及繪圖程式之呼叫提供簡略的解說。關於圖形、數據及
座標軸等之修改,可透過選擇 scigraph Library project 修改及編譯
scigraph 目 錄 下 的 SGADMIN.F90 、 SGDATA.F90 、 SGDRAW.F90 、
SGLOWLVL.F90 及 SGPLOT.F90 更新 scigraph.lib 達成之 執行 scigraph
                         ,                   。
目錄下另一 sgdemo.f90 程式可得繪出前述各種圖形之範例 再根據實際
                                ,
需求修改。圖 2.1-圖 2.8 即為 scigraph 所繪的 Line graph(曲線圖)、Line
graph with error bar (誤差曲線圖) 、XY graph(XY 散布圖) 、Logarithmic
XY graph(對數 XY 散布圖) 、 graph with error bar (誤差 XY 散布圖) 、
                     XY
polar graph (極座標圖)、bar graph(直方圖)及 2D 邏輯映射分歧圖。




                                                              19
跨領域物理視算




              圖 2.1 Scigraph: Line graph 折線圖




      圖 2.2 Scigraph: Line graph with error bar 誤差棒折線圖


20

More Related Content

Similar to 跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算

971230建築能源管理(bems)節能手冊
971230建築能源管理(bems)節能手冊971230建築能源管理(bems)節能手冊
971230建築能源管理(bems)節能手冊jbcinvest
 
神经网络与深度学习
神经网络与深度学习神经网络与深度学习
神经网络与深度学习Xiaohu ZHU
 
51 cto下载 2010-ccna实验手册
51 cto下载 2010-ccna实验手册51 cto下载 2010-ccna实验手册
51 cto下载 2010-ccna实验手册poker mr
 
Pl sql developer7.0用户指南
Pl sql developer7.0用户指南Pl sql developer7.0用户指南
Pl sql developer7.0用户指南irons_zhou
 
《Axure快速原型设计》
《Axure快速原型设计》《Axure快速原型设计》
《Axure快速原型设计》LIU hongmin
 
《Axure快速原型设计》
《Axure快速原型设计》《Axure快速原型设计》
《Axure快速原型设计》soaringwly
 
Java eye新闻月刊 2009年08月 - 总第18期
Java eye新闻月刊   2009年08月 - 总第18期Java eye新闻月刊   2009年08月 - 总第18期
Java eye新闻月刊 2009年08月 - 总第18期lileinba
 
Hibernate reference
Hibernate referenceHibernate reference
Hibernate referencemayewangxing
 
化學機械研磨
化學機械研磨化學機械研磨
化學機械研磨5045033
 
J Boss+J Bpm+J Pdl用户开发手册 3.2.3
J Boss+J Bpm+J Pdl用户开发手册 3.2.3J Boss+J Bpm+J Pdl用户开发手册 3.2.3
J Boss+J Bpm+J Pdl用户开发手册 3.2.3yiditushe
 
《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书ikewu83
 
Twido hw guide modular & compact bases
Twido hw guide   modular & compact basesTwido hw guide   modular & compact bases
Twido hw guide modular & compact basesJohanna Mesa Torres
 
深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护colderboy17
 
深入浅出My sql数据库开发、优化与管理维护 (1)
深入浅出My sql数据库开发、优化与管理维护 (1)深入浅出My sql数据库开发、优化与管理维护 (1)
深入浅出My sql数据库开发、优化与管理维护 (1)colderboy17
 
Mini2440 Um 20090817
Mini2440 Um 20090817Mini2440 Um 20090817
Mini2440 Um 20090817obi
 
Mini2440 Um 20090817
Mini2440 Um 20090817Mini2440 Um 20090817
Mini2440 Um 20090817guestadf50c
 
Ocs7.1 id消费系统说明书 20110106
Ocs7.1 id消费系统说明书 20110106Ocs7.1 id消费系统说明书 20110106
Ocs7.1 id消费系统说明书 20110106qq511673969
 

Similar to 跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算 (20)

971230建築能源管理(bems)節能手冊
971230建築能源管理(bems)節能手冊971230建築能源管理(bems)節能手冊
971230建築能源管理(bems)節能手冊
 
神经网络与深度学习
神经网络与深度学习神经网络与深度学习
神经网络与深度学习
 
Twido programming guide
Twido programming guideTwido programming guide
Twido programming guide
 
51 cto下载 2010-ccna实验手册
51 cto下载 2010-ccna实验手册51 cto下载 2010-ccna实验手册
51 cto下载 2010-ccna实验手册
 
Pl sql developer7.0用户指南
Pl sql developer7.0用户指南Pl sql developer7.0用户指南
Pl sql developer7.0用户指南
 
《Axure快速原型设计》
《Axure快速原型设计》《Axure快速原型设计》
《Axure快速原型设计》
 
《Axure快速原型设计》
《Axure快速原型设计》《Axure快速原型设计》
《Axure快速原型设计》
 
Java eye新闻月刊 2009年08月 - 总第18期
Java eye新闻月刊   2009年08月 - 总第18期Java eye新闻月刊   2009年08月 - 总第18期
Java eye新闻月刊 2009年08月 - 总第18期
 
Hibernate reference
Hibernate referenceHibernate reference
Hibernate reference
 
化學機械研磨
化學機械研磨化學機械研磨
化學機械研磨
 
Rack
RackRack
Rack
 
J Boss+J Bpm+J Pdl用户开发手册 3.2.3
J Boss+J Bpm+J Pdl用户开发手册 3.2.3J Boss+J Bpm+J Pdl用户开发手册 3.2.3
J Boss+J Bpm+J Pdl用户开发手册 3.2.3
 
《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书
 
Twido hw guide modular & compact bases
Twido hw guide   modular & compact basesTwido hw guide   modular & compact bases
Twido hw guide modular & compact bases
 
深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护深入浅出My sql数据库开发、优化与管理维护
深入浅出My sql数据库开发、优化与管理维护
 
深入浅出My sql数据库开发、优化与管理维护 (1)
深入浅出My sql数据库开发、优化与管理维护 (1)深入浅出My sql数据库开发、优化与管理维护 (1)
深入浅出My sql数据库开发、优化与管理维护 (1)
 
Mini2440 Um 20090817
Mini2440 Um 20090817Mini2440 Um 20090817
Mini2440 Um 20090817
 
Mini2440 Um 20090817
Mini2440 Um 20090817Mini2440 Um 20090817
Mini2440 Um 20090817
 
Ocs7.1 id消费系统说明书 20110106
Ocs7.1 id消费系统说明书 20110106Ocs7.1 id消费系统说明书 20110106
Ocs7.1 id消费系统说明书 20110106
 
Micro2440 Um 20090817
Micro2440 Um 20090817Micro2440 Um 20090817
Micro2440 Um 20090817
 

More from TAAZE 讀冊生活

盜墓祕史髑髏密碼第1章
盜墓祕史髑髏密碼第1章盜墓祕史髑髏密碼第1章
盜墓祕史髑髏密碼第1章TAAZE 讀冊生活
 
國文(測驗) 台電.中油考試用書學儒
國文(測驗) 台電.中油考試用書學儒國文(測驗) 台電.中油考試用書學儒
國文(測驗) 台電.中油考試用書學儒TAAZE 讀冊生活
 
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒TAAZE 讀冊生活
 
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成TAAZE 讀冊生活
 
法院組織法 解體真書-2013司法三.四等保成
法院組織法 解體真書-2013司法三.四等保成法院組織法 解體真書-2013司法三.四等保成
法院組織法 解體真書-2013司法三.四等保成TAAZE 讀冊生活
 
法院組織法體系重點整理 2013司法人員三.四等保成
法院組織法體系重點整理 2013司法人員三.四等保成法院組織法體系重點整理 2013司法人員三.四等保成
法院組織法體系重點整理 2013司法人員三.四等保成TAAZE 讀冊生活
 
社會工作研究方法 社會工作師考試學儒
社會工作研究方法 社會工作師考試學儒社會工作研究方法 社會工作師考試學儒
社會工作研究方法 社會工作師考試學儒TAAZE 讀冊生活
 
社會研究法 讀實力-2013高普考試.各類特考學儒
社會研究法 讀實力-2013高普考試.各類特考學儒社會研究法 讀實力-2013高普考試.各類特考學儒
社會研究法 讀實力-2013高普考試.各類特考學儒TAAZE 讀冊生活
 
民法(身分法)測驗題解 非試不可-司法官.律師保成
民法(身分法)測驗題解 非試不可-司法官.律師保成民法(身分法)測驗題解 非試不可-司法官.律師保成
民法(身分法)測驗題解 非試不可-司法官.律師保成TAAZE 讀冊生活
 
法院組織法 金鑰.申論題庫-2013司法三四等特考保成
法院組織法 金鑰.申論題庫-2013司法三四等特考保成法院組織法 金鑰.申論題庫-2013司法三四等特考保成
法院組織法 金鑰.申論題庫-2013司法三四等特考保成TAAZE 讀冊生活
 
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成TAAZE 讀冊生活
 
行政學概要 讀實力-2013高普考試.各類特考學儒
行政學概要 讀實力-2013高普考試.各類特考學儒行政學概要 讀實力-2013高普考試.各類特考學儒
行政學概要 讀實力-2013高普考試.各類特考學儒TAAZE 讀冊生活
 
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒TAAZE 讀冊生活
 
強制執行法 金鑰.申論題庫-2013司法三四等特考保成
強制執行法 金鑰.申論題庫-2013司法三四等特考保成強制執行法 金鑰.申論題庫-2013司法三四等特考保成
強制執行法 金鑰.申論題庫-2013司法三四等特考保成TAAZE 讀冊生活
 
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒TAAZE 讀冊生活
 
一般警察法典 2013法律工具書系列學儒
一般警察法典 2013法律工具書系列學儒一般警察法典 2013法律工具書系列學儒
一般警察法典 2013法律工具書系列學儒TAAZE 讀冊生活
 

More from TAAZE 讀冊生活 (20)

黃金筆 下太極圖第1章
黃金筆 下太極圖第1章黃金筆 下太極圖第1章
黃金筆 下太極圖第1章
 
盜墓祕史髑髏密碼第1章
盜墓祕史髑髏密碼第1章盜墓祕史髑髏密碼第1章
盜墓祕史髑髏密碼第1章
 
中國在十字路口
中國在十字路口中國在十字路口
中國在十字路口
 
國文(測驗) 台電.中油考試用書學儒
國文(測驗) 台電.中油考試用書學儒國文(測驗) 台電.中油考試用書學儒
國文(測驗) 台電.中油考試用書學儒
 
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒
國文(測驗)(包括公文格式用語) 鐵路特考考試專用學儒
 
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成
智慧財產權法新論 講堂-檢事官.專利商標.智財行政保成
 
法院組織法 解體真書-2013司法三.四等保成
法院組織法 解體真書-2013司法三.四等保成法院組織法 解體真書-2013司法三.四等保成
法院組織法 解體真書-2013司法三.四等保成
 
法院組織法體系重點整理 2013司法人員三.四等保成
法院組織法體系重點整理 2013司法人員三.四等保成法院組織法體系重點整理 2013司法人員三.四等保成
法院組織法體系重點整理 2013司法人員三.四等保成
 
社會工作研究方法 社會工作師考試學儒
社會工作研究方法 社會工作師考試學儒社會工作研究方法 社會工作師考試學儒
社會工作研究方法 社會工作師考試學儒
 
社會研究法 讀實力-2013高普考試.各類特考學儒
社會研究法 讀實力-2013高普考試.各類特考學儒社會研究法 讀實力-2013高普考試.各類特考學儒
社會研究法 讀實力-2013高普考試.各類特考學儒
 
民法(身分法)測驗題解 非試不可-司法官.律師保成
民法(身分法)測驗題解 非試不可-司法官.律師保成民法(身分法)測驗題解 非試不可-司法官.律師保成
民法(身分法)測驗題解 非試不可-司法官.律師保成
 
法院組織法 金鑰.申論題庫-2013司法三四等特考保成
法院組織法 金鑰.申論題庫-2013司法三四等特考保成法院組織法 金鑰.申論題庫-2013司法三四等特考保成
法院組織法 金鑰.申論題庫-2013司法三四等特考保成
 
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成
犯罪學 金鑰.申論題庫-2013司法.警察.原住民特考保成
 
玩轉Flash動畫製作
玩轉Flash動畫製作玩轉Flash動畫製作
玩轉Flash動畫製作
 
骨頭
骨頭骨頭
骨頭
 
行政學概要 讀實力-2013高普考試.各類特考學儒
行政學概要 讀實力-2013高普考試.各類特考學儒行政學概要 讀實力-2013高普考試.各類特考學儒
行政學概要 讀實力-2013高普考試.各類特考學儒
 
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒
心理學(包括諮商與輔導)讀實力 2013高普考試.各類特考學儒
 
強制執行法 金鑰.申論題庫-2013司法三四等特考保成
強制執行法 金鑰.申論題庫-2013司法三四等特考保成強制執行法 金鑰.申論題庫-2013司法三四等特考保成
強制執行法 金鑰.申論題庫-2013司法三四等特考保成
 
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒
交通行政大意(測驗題庫)Hold住高分1500題 2013初等.五等學儒
 
一般警察法典 2013法律工具書系列學儒
一般警察法典 2013法律工具書系列學儒一般警察法典 2013法律工具書系列學儒
一般警察法典 2013法律工具書系列學儒
 

跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算

  • 1.
  • 2.
  • 3. 前言 前言 本書是中國文化大學執行教育部 99-100 年大學跨學門科學人才培育 銜接計畫的成果,在因緣際會之下,我擔任本校總計畫主持人、有幸與 物理系程思誠教授、吳慧敏教授、電機系李克怡主任、化材系陳景祥院 長、吳誌明教授及紡織工程學系王權泉教授合作,共同推動五個分項計 畫,包括 99A1 物理–計算、材料、天文與光電專題研究人才培育計劃、 99-B 1-1 奈米碳管應用於生物感測器、99-B 1-2 重組蛋白質表現、純化與 應用、100-B1-1 奈米碳管應用於提升奈米複合材料機械性質及 100-B1-2 奈米碳管應用於抗電磁波纖維膜之製作。兩年期間,不僅各計畫推動順 利、成果豐碩,也大幅提升我們跨系及跨院的合作,其中尤以 99A1 物理– 計算、材料、天文與光電專題研究人才培育計劃更促成了本書的誕生。 99A1 是文化大學物理系近年來推動專題導向之師徒制小組學習的 成果體現,我們透過書報討論及專題研究課程引導學生逐步由專題演講、 文獻研讀、小組研討、繼而分組實驗演習、進度追蹤分享、期中期末報 告 最後舉行壁報論文比賽發表成果 這套作法實施幾年來 收效甚宏, 、 。 , 也頗獲肯定,因而在 2010 年獲得教育部計劃補助,並完成六份教材, 包括我的專題討論計算物理 A 組教材 鄒忠毅教授的專題討論計算物理 、 B 組教材、王建亞教授的專題討論應用光學組-全像光學元件、3D 圖 與變圖、江丕智教授的專題討論天文物理組-橢圓運動中的二體問題、 吳慧敏教授的專題討論奈米材料組教材及蔣幼齡教授的專題討論物理 數學組教材。本書即脫胎自專題討論計算物理 A 組教材。 以內容而言,本書包含我過去十四年以來,教授數值分析、計算物 理、非線性物理及平行運算與影像處理等課程的教材與講義,其中數值 i
  • 4. 跨領域物理視算 分析主要採用 Ward Cheney and David Kincaid 的 Numerical Mathematics and Computing, 4th- 6th Edition,計算物理主要採用 Rubin H. Landau & Manuel J. Paez 的 Computational Physics, problem solving with computers , 非 線 性 物 理 主 要 採 用 Richard H. Enns and George C. McGuire 的 Nonlinear Physics with Maple for Scientists and Engineers, 2nd Ed. 平行運 、 算與影像處理主要採用 Al Geist 及 Adam Beguelin 等的 PVM: Parallel Virtual Machine–A Users' Guide and Tutorial for Networked Parallel Computing 及 Ioannis Pitas 的 Digital Image Processing Algorithms and Applications。此外,在專題討論(一)、(二)、 (三)中,計算物理組成員 葉曉祥、周惠萱、張茗婷及葉晉瑜的專題,包括靜電位的數值解與解析 解、力學與電路系統中的線性與非線性振盪、PVM 平行運算系統之架 設與測試,Sequential and parallel solutions with PVM and MPI of the Electrostatic Laplace Equation、Lorentz system 的模擬、實驗與多媒體呈 現及 Polynomial Basins of Attraction 等,也構成本書的骨幹。 本書的特點有三: 一、使用 Visual Fortran 程式語言 在計算物理課程使用 Fortran 者甚多,但使用 Visual Fortran 則極少,它可以兼顧使用者對於高效能運算與即時繪圖之需求。 二、Visual Fortran 之二維、三維繪圖、動畫、影像及音效之處理 繪圖、動畫、影像及音效是學生極感興趣的主題,本教材可 協助學生自行創作圖形、動畫及音效,提升學習興趣及效果。 三、PVM 與 MPI 平行運算系統之詳盡介紹 PVM 與 MPI 平行運算系統大部分使用 Unix 或 Linux 系統, 本教材介紹 Windows 版本,讓使用者很容易即可利用電腦實驗室 汰換的電腦,自行架設及使用平行運算系統。 ii
  • 5. 前言 本書分為三部分共計十章,希望以由淺入深、由基本到應用、由基 礎到跨領域的方式,逐步介紹計算物理;第一部”程式語言與編譯器”, 包括第一章 ”Compaq Visual Fortran 簡介” 第二章 ”使用 Compaq Visual 、 Fortran 繪圖”,及第三章 ”進階繪圖: 影像處理(Image Processing) 與 旅行銷售員問題(Travelling Salesman Problem) ”;第二部 ”計算物理:電 磁學、力學、非線性與最佳化問題”,包括第四章 ”靜電位的數值解與 解析解”,第五章 ”力學與電路系統中的線性與非線性振盪”,第六 章 ”Lorenz system 的模擬、電路實驗與多媒體呈現”,及第七章 ”多體 系之間的競爭問題”;第三部 ”PVM 與 MPI 平行運算系統”,包括第八 章 ”PVM 平行運算系統之架設與測試”,第九章”MPI 平行運算系統 I: TSP and Laplace Equation”,及第十章 ”MPI 平行運算系統 II:波與熱之 1D 與 2D 動畫”。 除紙本之外,本書另附程式光碟,包含各章所用 f90 程式及編譯完 成之執行檔。f90 程式均依其目的及其出現章節命名: integration01:梯形法、辛普森法及高斯法等之數值積分; bugs01:Logistic Map 產生程式; convert01:二進位、八進位及十六進位之轉換; boa02:吸引域產生程式,包含以 IMSL 解多項式的根; mandel02:Mandelbrot Map 產生程式; scarpet02:Sierpinski carpet 產生程式; 3Dplot24:3D 動態繪圖程式,用於第二及第四章; image03:包含十四種功能之影像處理程式; tsp03:以模擬退火法解旅行銷售員問題及繪圖; oscillator57:根據 rk4sys01 修改,可解振盪及競爭問題,用於第五 及第七章; iii
  • 6. 跨領域物理視算 lorenz06:根據 rk4sys01 修改,可解 lorenz 系統及作 3D 繪圖; beep06:混沌音效產生程式; bell06:混沌音效 wav 波形檔產生程式; psdot08:PVM 內積計算範例程式; circle08:PVM circle and other maps 產生程式; laplacePVM08:以 PVM 解 Laplace equation; hello09:MPI 測試範例程式; pi09:MPI 圓周率計算範例程式; laplaceMPI09:以 MPI 解 Laplace equation; wave10:解波動方程式,以動畫呈現; heat101:解熱傳導方程式,以動畫呈現; heat102:解熱傳導方程式,以 3DPlot 呈現; heatMPI10:以 MPI 解熱傳導方程式; waveMPI10:以 MPI 解波動方程式。 這些程式經 Visual Fortran 編譯之後,將產生應用程式,可在其他 Windows 系統下獨立執行,因此我們也在光碟內附上這些應用程式,以 供未安裝 Visual Fortran 編譯器的讀者使用。 除光碟之外,我們也在網站 http://spy.pccu.edu.tw/comphy 上提供課 程簡介、講義、作業及範例程式供使用者下載。 最後,謹向本書編輯委員會成員淡江大學化學系王伯昌院長、台灣 大學物理學系傅昭銘教授 文化大學物理學系吳慧敏教授 王建亞教授、 、 、 蔣幼齡教授及鄒忠毅教授的指正與協助深致謝意,並感謝教育部顧問室 及中央大學跨學門科學人才培育銜接計畫辦公室的指導與協助。 iv
  • 7. 目錄 前言 .............................................................................................................. i 第一部 程式語言與編譯器...................................................................... 1 第一章 Compaq Visual Fortran 簡介 ............................................... 1 1.1 Fortran77、Fortran90 與 Compaq Visual Fortran.............. 3 1.2 Compaq Visual Fortran 的視窗介面 .................................. 7 1.3 檔案的開啟與讀寫(open, read and write) ....................... 10 1.4 使用常用副程式及程式庫(subroutine and library)......... 13 第二章 使用 Compaq Visual Fortran 繪圖..................................... 18 2.1 Visual Fortran 的科學繪圖模組 scigraph ........................ 18 2.2 使用 Compaq Visual Fortran 直接繪圖 ........................... 27 2.3 以 Visual Fortran 繪出 3D 互動立體圖 ........................... 44 第三章 進階繪圖:影像處理(Image Processing) 與旅行銷售員 問題(Travelling Salesman Problem)..................................... 48 3.1 簡介 .................................................................................. 48 3.2 Visual Fortran 影像處理系統........................................... 48 3.3 image03.f90 ...................................................................... 55 3.4 旅行銷售員問題(Travelling Salesman Problem)............. 88 3.5 tsp03.f90 ........................................................................... 90 第二部 計算物理:電磁學、力學、非線性與最佳化問題 .............. 103 第四章 靜電位的解析解與數值解 ............................................. 104 4.1 簡介 ................................................................................ 104 4.2 Laplace’s Equation 的解析解與數值解 ......................... 104 v
  • 8. 跨領域物理視算 4.3 三個範例之解析解與數值解 ........................................ 108 4.4 3Dplot24.f90 ................................................................... 114 第五章 力學與電路系統中的線性 與非線性振盪.................... 132 5.1 簡介 ................................................................................ 132 5.2 解運動方程式(The Oscillator Solver) ........................... 133 5.3 X-t, V-t 圖與 X-V 相空間圖 .......................................... 135 5.4 佛科擺與卡皮查擺 ........................................................ 141 5.5 Oscillator57.f90 .............................................................. 145 第六章 Lorenz system 的模擬、電路 實驗與多媒體呈現 ....... 154 6.1 簡介 ................................................................................ 154 6.2 Lorenz system 的 2D 與 3D 圖 ..................................... 155 6.3 混沌音樂(Chaos Music) ................................................. 163 6.4 Chua Circuit .................................................................... 169 6.5 Lorenz06.f90 ................................................................... 172 6.6 beep06.f90 ...................................................................... 179 6.7 bell06.f90 ........................................................................ 182 第七章 多體系之間的競爭問題 ................................................. 188 7.1 簡介 ................................................................................ 188 7.2 Volterra-Lotka 競爭方程組 ........................................... 188 7.3 中歐狐狸狂犬病的流行病模型 ....................................... 189 7.4 Rapoport 的軍火競賽模型 ................................................ 190 7.5 化學振盪反應 ................................................................... 190 第三部 PVM 與 MPI 平行運算系統 ................................................... 199 第八章 PVM 平行運算系統之架設 與測試............................. 200 8.1 簡介 ................................................................................ 200 vi
  • 9. 目錄 8.2 軟硬體需求 .................................................................... 201 8.3 系統架設 ........................................................................ 201 8.4 平行運算原理與架構 .................................................... 204 8.5 測試實例 ........................................................................ 205 8.6 psdot08.f ......................................................................... 211 8.7 circle08.f ......................................................................... 218 8.8 laplacePVM08.f .............................................................. 229 第九章 MPI 平行運算系統 I: 系統 架設與測試 ................... 239 9.1 簡介 ................................................................................ 239 9.2 MPI 系統之架設與測試 ................................................ 239 9.3 hello09.f90 ...................................................................... 244 9.4 pi09.f ............................................................................. 248 9.5 LaplaceMPI09.f .............................................................. 252 第十章 MPI 平行運算系統 II:波動 與熱傳 ............................ 261 10.1 簡介 ................................................................................ 261 10.2 波方程式 ........................................................................ 261 10.3 wave10.f90...................................................................... 264 10.4 熱傳導方程式 ................................................................ 273 10.5 heat101.f90 ..................................................................... 277 10.6 heat102.f 90 .................................................................... 282 10.7 以 MPI 解波方程式 ....................................................... 287 10.8 waveMPI10.f90............................................................... 288 10.9 以 MPI 解熱傳導方程式 ............................................... 301 10.10 heatMPI10.f90 ................................................................ 302 參考文獻 ................................................................................................. 321 vii
  • 12. 跨領域物理視算 第一章 Compaq Visual Fortran 簡介 在動筆寫計算物理課本之前,第一個首要問題,便是到底要選用哪 一種程式語言?而坊間計算物理課本所使用的程式語言從 Java、C、 Fortran、Maple、Mathematica 乃至於 true Basic,可謂五花八門、應有 盡有。這些程式語言自然亦各具特色;譬如 Maple 和 Mathematica 長於 符號運算,又能即時繪圖;Basic 簡單易學,也能即時繪圖;Java 具有 免費軟體的優勢,更隨著網路發達,成為最廣為人所用的程式語言,至 於 C 及 Fortran 可謂老牌專業程式語言,Fortran 尤其具有可做高效能平 行運算、擁有眾多支援的科學程式庫、及大多數大型科學模擬程式均使 用 Fortran 之特點,而這也是本書採用 Fortran 的主要考量。 一般的 Fortran 採用命令列方式輸入,在 DOS 下操作;通常利用 Fortran 強大的運算能力得到數據 再透過其他繪圖軟體讀取數據繪圖, , 程序不可謂不繁瑣,也容易出錯。 在此方面,Visual Fortran 具有強大的計算及繪圖功能,適合用於 物理系統的模擬與視覺化;此外,編譯器也提供相當清楚明確的錯誤訊 息,及內建除錯器(debugger),提供程式設計者不錯的開發環境。它由 最早的 Microsoft Powerstation 演變為 Digital Visual Fortran 繼而演變為 , Compaq Visual Fortran,目前則為 Intel Visual Fortran,但核心並無太大 改變。 對傳統 Fortran 的使用者來說,Visual Fortran 具有視窗介面,且編 譯完成後所得到的執行檔為一應用程式,可在其他視窗下執行,因此具 有雙重便利性。 2
  • 13. Compaq Vis Fortran 簡介 sual 1.1 Fortran n77、Fortra an90 與 Co ompaq Visual Fortran Compaq V Visual Fortra 編譯 譯器支援 Fortran 、 n77 Fortran90 與 Fortran95, 路上最常見的是 Fortran77 和 Fortran90,本書 由於文獻及網路 是 書也以此二者 為主,並將逐步 步培養學習者搜 搜尋及利用網路 路資源,以建立及 及改進本身應 用程式之能力。 Fortran77 與 Fortran90 的主要差異有以下 的 下幾點 [9]: 欄位:Fortran77 為固定 定格式(fixed fo ormat),第一欄為 為註解欄,第 2 至 5 欄為位 位址欄,第六欄為 為接續欄,因此 此指令(fortran statement)須寫 寫在第 7 至 72 欄 欄;Fortran90 為自 自由格式(free format),指令( (fortran statemen nt)可寫在第 1 至 132 欄。(圖 1.1 及圖 1.2) Fortran77 每行只 換行:F 只能寫一指令, ,指令太長需換 換行時,要在第 六欄接續欄輸入 入任一文數字元 元;Fortran90 則 則是每行能寫 數個指令,用分 分號”;”隔開,換 換行時在行末輸 輸入符號”&”。 註解:註解對程式的開 開發及推廣至為 n77 是在第一 為重要,Fortran 字母”C”(comment);Fortran90 則是可在任 欄註解欄輸入字 0 一欄輸入驚嘆號 號”!”,其後的敘 敘述即成為註解 解。 圖 1 Fortran77 的註 1.1 註解欄、位址欄、接 接續欄、陣列及迴圈 3
  • 14. 跨領域物理視算 圖 1.2 Fortran90 的註解、接續 續陣列及迴圈 陣列:圖 1.1 亦顯示 Fortran77 以 Dim F mension 指令宣 宣告陣列 R 的 方法 R 的大小 R1×R 另以 Integer 宣 , R2 宣告為整數 再 Parameter ,再以 定義 R R1=10 及 R2=10 0;圖 1.2 另顯示 Fortran90 可 Integer*4, 示 可用 ALLOC CATABLE :: aa a(:,:)宣告動態陣 aa,再於後 陣列 後續讀取 aa 的 大小 n nx×ny 之後,以 ALLOCATE 配置之。Fortr 以 ran90 還可用 Integer Parameter :: si r, ize=400 同時宣 size 為整數,且設定其值 宣告 為 400。 ortran77 以 20 標 迴圈:圖 1.1 顯示 Fo 標示之 Do 迴圈 圈,此迴圈以 20 Con ntinue 為終點; 1.2 顯示 Fo ;圖 ortran90 之 Do While 迴圈, 以 End 為終點,其 While 可採用 ddo 其中 行條件篩選。 用布林代數進行 圖 1.3 是一 一個完整的 Fortran77 範例程式 BUGS;它在第 1 行到第 3 式 第 稱及目的;第 4 行的 program 是用來定義程式 行註解程式名稱 式名稱;第 5 行到第 7 行進一 是利用 2 次迭代 logistic map m 一步註解程式是 代 m*y*(1-y)求得 rcation map);第 8 行用 Impli 分岐映射(bifur 第 icit none 取消預 i,j,k,l,m,n 預設 六個字元及其開 開頭之變數為整 實數之變數設定,以強制要求 整數、其他為實 宣告數型;第 10 行以 Real*8 宣告倍精度,亦即 32 位元實 8 實數;第 11 行 integer 宣告單 單精度整數;第 12 行到第 14 行定義增長率 m 的極小值 m_min、極大值 m_max 及增量 step;第 15 行 Open 開啟 值 量 行以 啟檔案 bugs.dat 4
  • 15. Compaq Vis Fortran 簡介 sual 以供寫入數據;第 17 行到第 28 行是主要迴 10,其目的 第 迴圈 的是在計算不 (本例僅計算 m=1 及 1.5)下的 logistic map;第 18 行設定 y 同的增長率 m( 第 的初值;第 20 行到第 22 行是 0 是內層迴圈 20, ,其目的是把 lo ogistic map 迭 代 201 次(x=0- ->200,x 為虛擬引數),但不紀錄 錄;第 22 行、第 27 行及第 28 行的 Contin 是作為 Do 迴圈的終點 第 24 行到第 27 行 nue 迴 ; 行是內層迴圈 30,其目的是把 logistic map 迭代 201 次(x= 把 =0->200),但寫入 入檔案 6,亦 即 bugs.dat;第 26 行是以格式 第 把增長率 m 及人 y 寫入檔 式(format)50,把 人口 案 6;第 29 行 行指定 m 及 y 分別為 f5.3 及 f1 分 10.6,亦即 5 位 位數實數(含小 ),其中小數點以 3 位數、及 10 位數實數,其中小數點 數點及正負號) 以下 及 圖 1.3 Fort tran77 範例程式 BUGS.f (code cour B rtesy of Prof. R.H. Landau) 5
  • 16. 跨領域物理視算 以下 6 位數;第 30 行是關閉檔案 6;第 31 行是停止執行,並列印引號 內 的 訊息 。本 程 式是 根據 非 線性 邏輯 映 射之 二次 方 程式 (Nonlinear Quadratic Logistic Map) 1 (1.1) 求得系統由設定之起始值迭代若干次之後的人口,式中 xi 及 xi+1 分 別為第 i 及 i+1 代的人口,m 為增長率。因此在迴圈 20 會有若干次迭代 未予記錄,以保證採樣已脫離系統暫態(transient state)。 圖 1.4 是一個完整的 Fortran90 範例程式 Convert;它在第 1 行到第 3 行註解程式名稱及目的;第 4 行的 program 是用來定義程式名稱;第 4 行的 use 是用來聯結內建程式庫 dflib;第 6 行用 Implicit none 取消預 設變數數型;第 7 行宣告 xd,yd 為倍精度實數;第 8 行宣告 xs,ys 為單 精度實數 第 9 行及第 10 行宣告 num,hexa,octal 及 binary 為倍精度整數; ; 第 11 行宣告 key 為字符;第 15 行、第 17 行、第 18 行及第 19 行分別 設定 num 為十進位 21542643、hexa 為十六進位 z'7F27E520'、octal 為八 進位 o'11717'、及 binary 為二進位 b'0001001111001111',但這幾個變數 已被宣告為整數(十進位),因此在第 25 行會轉換為整數列印出來;第 20 行、第 21 行、第 23 行及第 24 行的 print *表示在螢幕上列印引號中 的訊息;第 22 行則是以引號中的格式列印變數 num 所存的十進位整數 21542643,其中 z8.8 表示八位數的十六進位整數,且八位數全都列印, 不足八位則補 0,因此印出 0148B6F3,o12.12 印出 000122133363,而 b32.32 則印出 00000001010010001011011011110011。 6
  • 17. Compaq Vis Fortran 簡介 sual 圖 1.4 Fo ortran90 範例程式 Convert 1.2 Compa Visual Fo aq ortran 的視 視窗介面 進入 Com mpaq Visual Fortr 之後,預設 ran 設會出現三個視窗 窗,但亦可由 命令列中的 vie 增減,如圖 1.5 所示 [6] [8 ew 8]: Worksp pace window 所有 pr rojcet、程式都會 會出現在此視窗 窗。 一個 W Workspace 可放多 projcet;一 projcet 可放 多個 一個 放多個程式。 Text wi indow 程式編 編輯器 7
  • 18. 跨領域物理視算 Statement、 routine 以藍色呈現,註 以 註解以紅色呈現。 Output window 執行及 及錯誤訊息視窗 圖 1.5 Compaq Visual Fortran 的視窗介面 8
  • 19. Compaq Vis Fortran 簡介 sual Go Build e Compile 圖 1.6 Compaq Visual Fortran 的視窗介面 後,用 Compile、Build、Go 三個按鈕即可編 開啟檔案後 編譯、建立執 行檔(包括聯結 行,如圖 1.6 所示 結程式庫)及執行 示。 Visual For rtran 內建除錯器 利用圖 1.6 Go 旁 器(debugger),利 旁的小手可設 定 breakpoint, ,選定執行程式 偵錯。圖 1.7 是 式停止點,方便偵 是在程式內設 定停止點後,用 Compile、Bu 用 uild、Go 啟動 D Debugger 之情形 形;此時可由 清單(Variable list)追蹤變數數值,得知程式進 左下角的變數清 l 進行至何處及 等資訊 例如圖 2.3 即指示此時 M = 0 Y = 0.0000000E+00, 甚麼地方出錯等 ; 圖 時 , X = 1.0102051E-02 等。在 Debug 模式可用 Debug 視窗第 D 用 第一排的第一 (restart 重啟)及 及第二(stop debu ugging 停止)按鈕重啟或停止,也可用第五 (show next statement 顯示下一 一指令)、第六(st into 執行下一 tep 一指令,並進 第七(step over 執行下一指令)、 入副程式)、第 執 、第八(step out 跳出副程式) 或第九(run to c cursor 執行至游 游標)按鈕,微調 調程式的執行。 9
  • 20. 跨領域物理視算 圖 1.7 Compaq Vis sual Fortran 的 de ebugger 視窗介面 1.3 檔案的 的開啟與讀寫(open, re and wri ead ite) Visual For rtran 可透過讀與 與寫指令,處理各類型資料的輸 輸入與輸出。 當資料量很大時 可利用檔案 時, 案存取 此時即須 , 須先以(open) 指 指令開啟檔案, 其語法如下 [7 7]: Open(unit= File='d:opti =6, ics1.dat', Form= ='formatted', Stat tus='old') 其中” uni it=”可省略,6 為檔案在本程式 式內之代號,可 read(6)、 可用 write(6)配合適 format 格式讀寫;如欲在同 適當 同一檔案 6,則 同一程式讀寫同 需先關閉檔案,即 close(6)才 才能讀取。 ” File=”指 指述檔案位置,因此引號中要寫 寫出檔案完整路 路徑,如僅寫 則預設於 works 出檔案名稱,則 space 所在目錄;”Form =” 指述 述數據格式, 10
  • 21. Compaq Visual Fortran 簡介 有 formatted、 unformatted 及 binary 三種,其中 formatted 為序列存取, 分 record 寫入,每個 record 最後都有返回(carriage return CR)及換行(line feed LF)字元,故最佔空間,但可用 text editor 開啟檢視;unformatted 及 binary 為直接存取,其中又以 binary 二進位最為精簡,適於大量數據之 存取 ”Status=” 指述檔案型式 有 old new scratch replace 及 unknown ; , 、 、 、 五種,其中 scratch 是暫存檔、replace 會取代現有檔案、unknown 對現 有檔案會更改其 Status 為 old 、對新檔案則會更改其 Status 為 new。 決定了檔案型式與數據格式之後,只要記得讀寫的程序必須一致之 原則,就能順利運用靈活讀寫檔案所帶來的便利,圖 1.8 及圖 1.9 是一 個開啟與讀寫檔案的實例,取自第七章的渾屯音樂;在圖 1.8 中該程式 分別以 wave 和 data 格式開啟檔案並寫入,其中 wave 可以播放,而 data 可用以繪出波形,Write(1)及 write(2) 分別將數據以二進位格式寫入 bell01.wav 及 bell01.dat,本範例是 open(unit=1, file='C:bell01.wav',form='binary') open(unit=2, file='C:bell01.dat',form='binary') do i=1,nr*ne write(1) w(i) end do do i=1,nr*ne write(2) w(i) end do 圖 1.8 本程式分別以 wave 和 data 格式開啟檔案並寫入 11
  • 22. 跨領域物理視算 open(unit=1, file='C:bell01.dat',form='binary') do i=1,nsteps read(1) yy(i,1) end do 圖 1.9 本程式開啟一 binary 格式之 data 檔案並讀取 利用迴圈寫入 nr*ne 個 w 陣列元素,因此在圖 1.9 另一程式中,亦同樣 利用迴圈讀取 nsteps = nr*ne 個 yy 陣列元素,再進行後續處理。在此範 例中,由於是用二進位存取,所以也可以不用迴圈讀寫 w 及 yy 陣列, 而以 write(1) w 及 read (1) yy(:,1)的方式直接讀寫,更為方便快速。 圖 1.10 及圖 1.11 是另一個開啟與讀寫檔案的實例,在圖 1.10 中, 該程式以預設 formatted 格式−在此為 f10.4 把數據寫入 rk4sys.dat 檔案; , 以此方式,將產生 nsteps 行、每行一個數據的檔案,頗占空間,但可用 text editor 如 notpad 檢視,如圖 1.12 所示。圖 1.11 顯示在另一程式開啟 並讀取檔案 rk4sys.dat,以進行後續處理。此處需注意 nsteps 是在圖 1.10 程式寫入檔案的總記錄數 max 則是在圖 1.11 程式讀取檔案的總記錄數, ; 因此 max 必須≦nsteps。 Open(6, File='rk4sys.dat', Status='unknown') 61 format(f10.4) Do i = 1, nsteps write (6,61) xx(i,1) Enddo 圖 1.10 本程式以 formatted 格式開啟檔案 rk4sys.dat 並寫入 12
  • 23. Compaq Vis Fortran 簡介 sual Open(6, FFile='rk4sys.dat Status='old') t', 61 formaat(f10.4) Do i = 1, max read(6,61) input(i) Enddo 圖 1.11 本程式以 form matted 格式開啟檔案 rk4sys.dat 並讀 案 讀取 圖 1.12 用 notepad 檢視 rk4sys.dat 檔案 檢 案,數據格式為 f10 0.6 1.4 使 用 常 用 副 程 式 及 程 式 庫 (subrou utine and y) library 程式的複雜度會隨著其功 功能增強而增加 加,此時可考慮 慮使用常用副 ne)或函數副程式 程式(subroutin 式(function)以精 精簡程式架構, ,更可使用程 式庫(library)內 內的常用副程式 式或函數副程式,以節省個人程 程式開發的心 力,並獲得程 的效益。圖 1.1 是在主程式 程式庫最佳化的 13 式中,以 call rk4sys(n,h,x,ns steps,xx,yy,n,jj) 呼叫常用副程 subroutine rk 程式 k4sys (n,h,x, 13
  • 24. 跨領域物理視算 圖 1.13 在主程式中呼叫常用副程式之範例 程 副 14
  • 25. Compaq Vis Fortran 簡介 sual nsteps,xx,yy,m, ,jj),再於常用副 副程式 rk4sys 中 中,以 call xpsy ys(n,x,f(0,1),jj) 呼 叫 常 用 副程 式 subroutine xpsys(n,x,f,jj) 之 範例 。 此 範 例顯 示 使 用 程 subroutine 時,需留意的幾個 個重點: outine 可透過其 1. Subro )傳遞變數及陣列 其幅數(argument) 列;其在主、 副程式 式內的數目及數 數型都要一致; 2. Subro outine 是獨立的 的程式區塊,始於 Subroutine 而 於 而終於 End,其 內變數 數仍需宣告; 3. Subro outine 內仍可再 再呼叫 Subroutine e; 如使用商用 庫內的 Subrouti 或 function,則通常沒有 用或開放程式庫 ine 原始檔,也不會 會出現在程式內 在程式開頭加一 use 指令,例 內,此時僅需在 如使用 Visual F Fortran 內建的 dflib 程式庫時 應使用 use dfli 、 , ib 使用 IMSL (International M Mathematics an Statistics Lib nd brary) 程式庫時 時,則用 use IMSL、使用 d dislin (Internation Mathematics and Statistics L nal s Library) 程式 庫時,則用 us dislin,如圖 1.14 所示。 se 圖 1.14 在主程式 式中呼叫程式庫 Subroutine 之範例 在圖 1.14 之程式中,dat te_and_time 是 d dflib 內可回報日 日期及時間的 其中 year(1)、ye Subroutine,其 ear(2)、year(3)分 分別為存有日期 期、時間及時 區之字符變數,而 date_time 則是存有日期、時間及時區之 之整數陣列, 15
  • 26. 跨領域物理視算 共有八個變數,分別存有年、月、日、時差、時、分、秒及毫秒;QDAG 是 IMSL 提供的單精度積分 Subroutine 使用可調式高斯積分法(adaptive , Gauss-Kronrod rule),其中 F, A, B, ERRABS, ERRREL, IRULE, RESULT, ERREST 分別為積分函數、積分下限、積分上限、絕對誤差、相對誤差、 高斯法採用點數、積分估計值及誤差估計值;bardis 是使用 dislin 提供 繪圖程式繪製直方圖的範例 Subroutine 使用這些程式庫內的 Subroutine ; 時 可分別查閱 Visual Fortran Online Documentation Visual Fortran IMSL , 、 Fortran 90 MP Library Help 及 DISLIN Online Manual 等文件,以取得詳 細說明。 除常用副程式之外,亦可使用函數副程式(Function),如圖 1.15 所 示。本範例顯示呼叫 Function 與 Subroutine 之差異在於 Function 並非 如 Subroutine 傳回一個或多個引數 而是傳回單一數值 因此可利用 real , , function 之方式來界定其數型;此外,本範例亦顯示主程式及副程式可 用不同之引數名稱。 16
  • 27. Compaq Vis Fortran 簡介 sual 圖 1.15 在主程式中呼叫函數副 程 副程式之範例 17
  • 28. 跨領域物理視算 第二章 使用 Compaq Visual Fortran 繪圖 使用 Compaq Visual Fortran 繪圖的第一步 是開啟正確的 project, , 即 Fortran Standard or QuickWin application (Fortran 標準或多視窗應用) , 顧名思義,此 project 可產生標準的單一視窗或多視窗繪圖,其他 project 如 Fortran Console application 可產生控制台應用程式,即一般非圖形輸 出之應用程式 Fortran Static Library 可產生靜態程式庫 Fortran Dynamic 、 、 Link Library 可產生動態程式庫、Fortran Windows application 可產生視 窗應用程式等 [26]。 以上所述,是由 Compaq Visual Fortran 的 file => new 按鈕新建繪圖 project 的作法,同時也解釋了 project 的種類,但最方便的做法,則是 複製現成的 project 來用。例如 scigraph 範例 project,本章第一節將針對 如何使用科學繪圖模組 scigraph,做詳細的說明,第二節將說明如何使 用 Compaq Visual Fortran 直接繪圖,第三節將說明如何繪出 3D 互動立 體圖。 2.1 Visual Fortran 的科學繪圖模組 scigraph 在 Compaq Visual Fortran 安 裝 光 碟 裡 的 Compaq Visual FortranINFODFSAMPLES 目錄下,有一個 scigraph 科學繪圖 project, 複製整個目錄到自訂位置或到系統預設位置,以便於管理,系統預設位 置是在 C:Program FilesMicrosoft Visual StudioCOMMONMSDEV98 My Projects。scigraph 目錄另包含 scigraph 及 sgdemo 二目錄,前者是 Library、後者是應用程式;在 CVF 視窗的 project 按鈕選擇 scigraph 可 18
  • 29. 使用 Compaq Visual Fortran 繪圖 編譯、修改 Library,選擇 sgdemo 可編譯、修改及執行應用程式。例如 需 改 變 圖 形 底 色 (background color) 或 圖 形 像 素 (pixel) 時 , 即 需 修 改 Library,其程序較執行應用程式簡單,只需 compile 及 build 兩個步驟, 或在 build 按鈕項下選擇 build scigraph.lib,以更新 scigraph 程式庫。 Scigraph 是 Compaq Visual Fortran 內附的簡易 2D 科學繪圖程式庫, 提供各種 2D 繪圖之程式範例,供 programmer 自行修改使用,包括 Line Graphs、Bar Graphs、XY Graphs、Pie Graphs 等;在前述 scigraph 目錄 下有一份 scigraph.doc 說明文件,針對圖形、數據及座標軸等之設定、 其內建繪圖類型及繪圖程式之呼叫提供簡略的解說。關於圖形、數據及 座標軸等之修改,可透過選擇 scigraph Library project 修改及編譯 scigraph 目 錄 下 的 SGADMIN.F90 、 SGDATA.F90 、 SGDRAW.F90 、 SGLOWLVL.F90 及 SGPLOT.F90 更新 scigraph.lib 達成之 執行 scigraph , 。 目錄下另一 sgdemo.f90 程式可得繪出前述各種圖形之範例 再根據實際 , 需求修改。圖 2.1-圖 2.8 即為 scigraph 所繪的 Line graph(曲線圖)、Line graph with error bar (誤差曲線圖) 、XY graph(XY 散布圖) 、Logarithmic XY graph(對數 XY 散布圖) 、 graph with error bar (誤差 XY 散布圖) 、 XY polar graph (極座標圖)、bar graph(直方圖)及 2D 邏輯映射分歧圖。 19
  • 30. 跨領域物理視算 圖 2.1 Scigraph: Line graph 折線圖 圖 2.2 Scigraph: Line graph with error bar 誤差棒折線圖 20