2015年3月1日

Day 1 開始使用NCL:第一隻script檔

NCL和眾多其他軟體(eg. Matlab, GrADS)一樣,有兩個基本的模式可以使用:(1) Interactive mode,程式碼一行一行輸入,等電腦跑完一行指令,使用者再輸入下一行。(2) Script mode,將所有程式全部寫在一個文件中,再令NCL去執行這個檔案。Interactive mode的好處是可以監控每一行程式有沒有順利完成,但缺點是當程式越來越複雜時,一行一行指令輸入費時且修改不易。因此一般情況下,都是使用Script mode在NCL上執行各種運算和繪圖。

(1) Interactive mode
只要輸入 ncl 即可啟動NCL並進入Interactive mode

>>$ ncl



可以練習輸入一些簡單的指令

>>$ abbccc = 123.45
>>$ print(abbccc)


由於Interactive mode平時不常使用,這裏就不多作著墨了。

(2) Script mode
習慣上ncl script的副檔名為.ncl,方便使用者辨認。但其實軟體方面並沒有對副檔名做限制,所以可以依照使用者需求將script檔改名為任意副檔名。

ncl script的基本架構如下:

;===== NCL101-1.ncl =====
; 這是comment line, 程式會跳過以";"開頭的地方。
; This is comment line, NCL will not recognize the code after ";"

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"


begin


aa = (/1.1,1.3,1.4,1.9/)

aa@units = "m/s"
print(aa)
print("=====")

bb = dim_sum_n_Wrap(aa,0)

print(bb) ; You can also comment here.
print("=====")

print("Print Value Only:")

print(aa+"")

end

;=====

將上面文字複製並建立 NCL101-1.ncl 檔案,也可以點此下載
執行時只要輸入

>>$ ncl NCL101-1.ncl


ncl的script檔始於 begin 止於 end,所有的指令都寫在begin和end之間。

在begin前面,依用途裝載(load)所需的函數庫,至於要裝載哪些才夠用,後面的文章會再進一步介紹如何查詢函數庫。在範例 NCL101-1.ncl 中用到了函數 dim_sum_n_Wrap,這個函數包含在函數庫 contributed.ncl 裡面,所以在程式的一開頭需要先裝載它。

分號(;)是NCL中用來作為comment line的標記,在";"後面的所有資訊會被NCL自動忽略,而且";"也並非要在一行的最開頭,如果寫在某行的中間,那NCL同樣只會忽略";"之後的內容,";"前面的部分仍然會被執行。

在範例 NCL101-1.ncl 中,aa是一個浮點數(float)向量,共有四個值。在NCL中,一個變數(variable)可以擁有多個屬性(attribute),屬性中記錄著一個變數的各式各樣資訊,常見的像是單位(units)、無效值(missing value)、資料來源、或被經過何種處理(eg. 平均、總和)等等。而給定屬性的方法就是使用小老鼠(@)。在範例中,aa的單位被載明是[m/s]。

當aa被print出來時,連同屬性的所有資訊也會一併顯示在螢幕上。然而有時候只是想知道一個變數的值是多少,不想要每次都看到變數的屬性和其他資訊,這時可以加一個空字串在後面:
print(aa+"")
因為aa+""再也不是一個完整的變數,而是一個組合訊息,所以NCL就不會顯示那些變數的資訊出來。

註:在ncl script中,字母大寫和小寫是不一樣的。e.g., aa, Aa, aA, AA 可以分別設定成四個不同的變數。





待續... Day 2

5 則留言: