月份:四月 2016

常搞不清楚的逸入逸出過程 (entrainment/detrainment)

常搞不清楚的逸入逸出過程 (entrainment/detrainment)

我常會有把詞彙搞反的困擾,有時候會想說是不是自己的大腦出了什麼問題,不過今天說的是另外一種類似的困擾,也就是一組相反的科學用語的中文解釋:描述雲朵跟外界交互過程的逸入/逸出過程。

我查了一下字典:

detrain:
to get off a train

突然發現用字典上的意義來思考就比較容易記憶。

以我們所關心的主題來說,「detrain」這個過程就像是「離開」,不過在此不解為火車、而是雲朵。換言之,也就是描述離開雲朵的過程。更精準的說,也就是「潮濕的雲內空氣」跑到外頭的乾燥大氣中。而中文的翻譯則是對應於前面說的「離開」,也就是所謂的「逸出」過程。

雖然不算什麼大事情,但是透過這樣的方式還是好記多了。

此外,查這些資料時看到科學月刊的文章 《收集水氣的濃積雲》,作者把這個過程描寫得很清楚、值得一看。

如何用NCL描述時間

如何用NCL描述時間

前言

縱使二進位 (Binaries) 檔案有體積小、方便輸出的優勢,但是過於簡潔也導致處理資料的困擾。以我的觀察,很少人有撰寫完整的使用說明的習慣,最多就是口頭指點一番。於是我很怕拿到二進位檔案,因為不清楚資料分布的特性,得花上不少時間確定沒有把經緯度、高度、時間各軸搞錯。

當我碰到 NCL+netCDF 這個組合時,不知道有多麼高興(雖然裝netCDF好像不是那麼容易 囧)。 netCDF 格式裡可以清楚看見各參數的單位、維度名稱與尺寸,模式輸出檔案還有漂亮的時間資訊。

基本的時間資訊包含哪些屬性?

ncl_filedump 叫出一個輸出檔作為範例:

上面這個案例中,「time」就是時間資訊:這個參數至少會包含以下兩個屬性「 calendar」、「units」。特別重要的是「units」,他是用來作為時間資訊的「基準點」。就好比日常生活中,我們會用「西元」訂為基準,把歷史事件分為西元前、西元後。

話說回來,「units」這個字串是可以自由選擇基準點的,只要字串格式符合規定就好。 NCL 6.3.0 版來說,字串的格式為「時間單位+介系詞+時間基準點」,詳見相關函式的說明。至於為什麼多半使用「1900年1月1號0點0分」,我想只是為了方便,自己寫的程式倒是不見得一定要用這個基準點。

常見的時間格式

  • UT-referenced date:我們所熟悉的「年月日時分秒」、優點為好閱讀,通常以「六組」獨立的參數儲存。
  • mixed Julian/Gregorian date:依照屬性「units」所規定的時間基準點,所組成的「一組」精簡化的雙精確度數字。因為已簡化為一維陣列,所以能作為「Coordinate variables」使用。

看下面這個例子應該會對上述兩種日期格式更清楚:

程式執行出來的結果:

總結來說,自行處理完的資料,其儲存所使用的時間格式以 mixed Julian/Gregorian date 為優先考量。

哪裡會用到時間格式?

  • 篩選特定時間的資料作分析:附上時間資訊之後,就可以利用 Coordinate subscripting "{...}" 過濾出想要的時間區段,例如,有個參數 QSNOW ( Time, bottom_top, south_north, west_east ),利用下面的 NCL 指令擷取出2015年三月的所有資料:QS=QSNOW{20150301:20150331,:,:,:}
  • 以時間表示的特殊座標軸,詳見NCL官網的Time labels
  • 另外有件事情要注意一下,雖然說目前 (NCL 6.3.0) 已經用 「cd_calendar」系列函式取代「ut_calendar」等函式,不過當你的時間格式中的「units」單位是採用”minutes”或”seconds”時,「cd_xxx_calendar」會有bug,因此建議使用舊的「ut_xxx_calendar」函式。我自己是有碰到這個bug,在NCL更新之前,我仍然都是ut開頭的函式為主。

[上述bug的原文出處]

Note: there is a potential rounding bug in cd_calendar which causes a problem in this routine if you have a units of “minutes since” or “seconds since”. It sometimes causes the minutes/seconds to be returned as something like “0/60” (0 minutes/60 seconds) rather than “1/0” (1 minute/0 seconds). If you are affected by this bug, then you may be able to use ut_string as a work-around, if you are using a “standard” calendar.