More Related Content Similar to 跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算 Similar to 跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算 (20) More from TAAZE 讀冊生活 (20) 跨領域物理視算:力學與電磁系統之視覺化、模擬與平行運算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
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