Thursday, July 18, 2013

Meteo #5 - Membuka dan Menganalisis Banyak Data SDF/NetCDF di GrADS (Bagian 1)

NetCDF (Network Common Data Form) atau yang biasa disingkat "nc" adalah salah satu format data yang paling populer di dunia saintifik, terutama untuk ilmu kebumian yang banyak menggunakan array/matriks untuk data spasial yang digunakannya. Oleh sebab itu, tidak aneh kalau  nc menjadi salah satu format data yang paling banyak didukung oleh perangkat lunak saintifik, mulai dari GrADS sampai ArcGIS.

Khusus untuk GrADS, data nc merupakan salah satu format data yang paling sering digunakan, karena kemudahan yang diberikannya. Data binary biasa umumnya membutuhkan control file (file ctl dalam format ASCII) terpisah untuk "memberi tahu" GrADS akan informasi dimensi dan variabel dari data tersebut. Nah, data nc umumnya sudah mengandung informasi dimensi dan variabel tersebut (tersimpan pada header data nc), sehingga pengguna tidak perlu lagi membuat control file untuk membuka data nc. Dengan kata lain, data nc lebih mudah digunakan karena kemampuannya untuk "memberi tahu" GrADS tentang dimensi dan variabel dari data yang dikandungnya tanpa bantuan pengguna. Data-data semacam inilah yang disebut sebagai Self-Describing File atau SDF.

Membuka data SDF di GrADS pada umumnya sangat mudah, karena prosesnya hampir sama dengan membuka file binary biasa. Bila file binary biasa dibuka dengan perintah open, maka SDF dibuka dengan perintah sdfopen.


Gambar di atas adalah salah satu contoh SDF dalam format nc yang dibuka dengan GrADS. Setelah SDF dibuka, proses selanjutnya tidak berbeda dengan data binary biasa. Anda bisa mengatur dimensi yang ditampilkan, menampilkan data, melakukan perhitungan statistik dan lain-lain seperti biasa.

Walaupun kelihatannya mudah, membuka SDF kadang bisa membuat dahi berkerut, terutama bila SDF yang dibuka jumlahnya lebih dari satu atau memiliki perbedaan dimensi waktu antara satu sama lainnya. Pada tulisan kali ini, saya akan berbagi cara untuk membuka dan menganalisis banyak file SDF/NetCDF pada GrADS, berdasarkan pengalaman pribadi saya dalam "berurusan" dengan file-file tersebut :-)

--------------

Kasus #1 :  Dua file data SDF/NetCDF dengan variabel berbeda dan dimensi waktu yang sama

Misalnya anda punya dua file nc yang berisi data kecepatan angin zonal (u-wind) dan meridional (v-wind), maka anda bisa menampilkan keduanya dalam bentuk vektor untuk mengetahui arahnya. Contoh :

ga-> sdfopen uwnd.2012.nc
ga-> sdfopen vwnd.2012.nc
ga-> set lon 90 145
ga-> set lat -11 11
ga-> d uwnd.1;vwnd.2

Akan menghasilkan :



Perhatikan pada jendela command prompt di atas, setelah kita membuka SDF kedua, akan ada pernyataan berikut :

SDF file vwnd.2012.nc is open as file 2

Maksud penyataan ini jelas, vwnd.2012.nc dibuka sebagai file no.2. Informasi nomor file ini perlu dicantumkan ke tiap perintah GrADS selanjutnya. Bila anda tidak mencantumkannya (misalnya menuliskan d uwnd;vwnd saja), maka GrADS akan mencari variabel vwnd di file no.1 (dalam hal ini uwnd.2012.nc), yang hanya berisi variabel uwnd, dan berakibat munculnya pesan kesalahan karena GrADS tidak menemukan variabel vwnd yang dicari di file tersebut. Perintah d uwnd.1;vwnd.2 akan memerintahkan GrADS untuk menampilkan variabel uwnd dari file no.1, dan vwnd dari file no.2.

Kasus ini adalah kasus yang paling mudah dalam menampilkan lebih dari satu data NetCDF. Saya bilang mudah, karena kedua data, walaupun memiliki variabel berbeda, namun keduanya memiliki dimensi ruang dan waktu yang sama.

Pada tulisan berikutnya, saya akan mengulas cara membuka dan menampilkan data SDF/NetCDF yang memiliki dimensi yang berbeda.

Bersambung ... 

Wednesday, July 10, 2013

Meteo #4 - Cara Menyimpan Nilai Variabel GrADS ke File Teks/ASCII

Salah satu masalah yang seringkali dihadapi oleh para pengguna GrADS adalah pengolahan data dalam format teks. Contoh kasus, anda ingin mengolah data curah hujan TRMM atau GSMaP (dalam format binary atau NetCDF) dan menampilkannya ke dalam bentuk time series. Setelah grafik time series muncul di layar, anda mungkin berpikir, bagaimana kalau data hujan tadi dibandingkan dengan data time series yang lain, seperti indeks IOD atau NINO3.4. Masalahnya, format data indeks-indeks tadi adalah ASCII sedangkan data hujannya adalah binary. 

Ada dua cara, pertama, mengubah data time series indeks tadi ke format binary kemudian menampilkannya bersama data hujan di GrADS, atau yang kedua, mengubah data time series hujan tadi ke format ASCII, kemudian menampilkannya bersama data indeks di software lain seperti Excel atau Surfer. Saya lebih suka cara kedua. Alasannya jujur saja, Excel jauh lebih mudah digunakan dibanding GrADS. Opsi grafik di Excel juga lebih banyak. Jadi kita bisa menampilkan data time series dengan lebih mudah dan lebih menarik.

Pada tulisan kali ini, saya akan mengulas cara kedua, yaitu menyimpan data variabel atau hasil pengolahan pada GrADS ke dalam format file ASCII, sehingga bisa ditampilkan ke software statistik lain seperti Excel, Surfer, SPSS, atau sekedar Notepad.

Pertama, siapkan file data yang ingin anda buka atau olah dengan GrADS. Formatnya terserah, bisa plain binary, NetCDF, Grib, HDF atau yang lain. Yang penting masih bisa buka dengan GrADS.

Kedua, anda membutuhkan script fprintf.gs yang berisi fungsi untuk menyimpan argumen/variabel GrADS ke dalam file teks. Bila anda menggunakan OpenGrads di Windows, script ini berada dalam direktori C:\OpenGrADS\Contents\Resources\Scripts. Bila anda menggunakan GrADS di Linux (instalasi via Synaptic Package Manager), kemungkinan script ini belum tersedia. Bila memang belum ada, anda bisa menyalin script tersebut pada akhir tulisan ini.

Ketiga, tampilkan variabel atau hasil pengolahan data yang ingin anda simpan ke file ASCII. Misalnya, saya ingin menampilkan data time series dari data curah hujan harian GSMaP NRT di daerah 90E-110E, 10S-0S pada bulan Juni 2013.

ga-> open GSMaP_NRT.daily.00Z-23Z.ctl
ga-> set x 1
ga-> set y 1
ga-> set time 1jun2013 30jun2013
ga-> define chaave=tloop(aave(precip,lon=90,lon=110,lat=-10,lat=0))
ga-> d chaave

Normalnya, hasil yang akan muncul pada GrADS adalah seperti ini :


Langkah berikutnya, menyimpan data time series yang sudah ditampilkan GrADS ini ke file ASCII. Untuk melakukan hal tersebut, yang paling dibutuhkan adalah variabel atau argumen dari data yang ditampilkan sebelumnya, dalam hal ini adalah : chaave

Yang perlu diperhatikan, script fprintf.gs akan menyimpan isi dari variabel chaave tadi ke file teks dengan memanfaatkan perintah set gxout print dan set prnopts pada GrADS. Hal ini akan membuat GrADS mengubah mode grafik ke dalam mode teks, lalu menyimpan variabel/argumen GrADS ke file teks. Sebelum menggunakan script, tentukan format file teks yang anda inginkan dengan perintah set prnopts. Misalnya, saya ingin menyimpan isi variabel chaave ke data teks dengan 1 data per record (1 kolom per baris). Ketikkan :

ga-> set prnopts %g 1 1

Untuk info lebih lanjut tentang perintah set prnopts, silakan baca GrADS manual aja ya :-)

Langkah terakhir, tinggal jalankan script fprintf.gs dengan syntax :

fprintf <variabel/argumen> <nama file teks atau ASCII>

Untuk kasus kita, misal file ASCII-nya adalah testlagi.txt contohnya penulisannya adalah :

ga-> fprintf chaave testlagi.txt

Bila prosesnya lancar, GrADS akan menginfokan bahwa file teks tersebut berhasil dibuat. File tersebut sudah bisa dibuka dengan menggunakan software lain seperti Excel atau pengolah kata sederhana seperti Notepad.


Bila dibuka dengan Excel, lalu dibuat grafik hasilnya seperti ini : 


Selanjutnya anda bisa menambahkan data lain (misal indeks IOD dll) ke dalam grafik tersebut untuk analisis lebih lanjut. 

Mudah kan ? Semoga bermanfaat :-)

-------------------------------------------

Script fprintf.gs (copy setelah baris ini).

function fprintf(args)
* Command line argumets
* ---------------------
  expr = subwrd(args,1)
  file = subwrd(args,2)
  format = subwrd(args,3)
  numl = subwrd(args,4)
  numb = subwrd(args,5)
  u = subwrd(args,6)
  if ( file='' )
    say ''
    say 'NAME'
    say '     fprintf - print GrADS variables to a text file'
    say ''
    say 'SYNOPSIS'
    say '     fprintf  expr  txtFile  [format numl numb [u]]'
    say ''
    say 'DESCRIPTION'
    say '     Evaluates the contents of the GrADS expression *expr* writing'
    say '     its values to a formatted text file *txtFile*. On output, the'
    say '     number of values and the undef values are returned; a negative'
    say '     number of values signals an error condition.'
    say ''
    say '     Unlike the output of *set gxout print*, the resulting ASCII'
    say '     file has only the data values and *no header*.'
    say ''
    say 'OPTIONS'
    say '     The optional parameters are the same as the ones required by'
    say '     the GrADS command *set prnopts*, namely'
    say '     format   a C language template for formatting ASCII output.'
    say '              Default is %g.'
    say '     numl     number of values to print per record. Default is 8.'
    say '     numb     number of blanks to insert between values. Default is 1.'
    say '     u        print "Undef" instead of the numerical value for'
    say '              missing data.'
    say 'BUGS'
    say '     The GrADS expression cannot have spaces in it.'
    say ''    
    say 'COPYRIGHT'
    say '     This script has been placed in the public domain'
    say ''
    return
  endif
* Set the display environment and produce buffered ASCII output
* -------------------------------------------------------------
  'set gxout print'
  if ( format != '' )
    'set prnopts ' format ' ' numl ' ' numb ' ' u ' '
  endif
  'display ' expr
   if ( rc!=0 ); return -1; endif
*  Get rid of header line: Printing Grid -- 3358 Values -- Undef = 1e+20
*  but record number of values and undef values for later reference
*  ---------------------------------------------------------------------
   buffer = result
   i = 1; line = sublin(buffer,i)
   n = subwrd(line,4)
   undef = subwrd(line,9)
* Now write the data values to text file: first line...
* -----------------------------------------------------
  i = 2; line = sublin(buffer,i)
  if ( write_(file,line) > 0 ); return -2; endif
* Append subsequent lines
* -----------------------
  i = i + 1; line = sublin(buffer,i)
  while ( line != '' )
    if ( write_(file,line,append) != 0 ); return -3; endif 
    i = i + 1; line = sublin(buffer,i)
  endwhile
  if ( close(file) != 0 ); return -4; endif
* All done
* --------
  say 'wrote ' n ' values to file "' file '"'
  return n ' ' undef ' ' 
function write_(file,line)
   rc = write(file,line)
   return subwrd(rc,1)
   


Tuesday, July 9, 2013

Gunpla #21 - MG Buster Gundam Review


Buster. My second MG kit. I've loved the design since the first time I watched SEED series. Two big guns, dual misile pods and cool military scheme, this is truly one of the best artillery-type Gundams other than Heavyarms from Wing series. I bought this kit together with Blitz at Yodobashi-camera Yokohama during my stay in Japan last month. As the other remastered MG from SEED, the boxart of Buster is just awesome !

The boxart is just awesome !
I could only build Buster at night after works, hence it took one week for me to finish the kit. There are 13 runners, less than Duel, but there are more details on Buster armors. The inner frame looks similar, but Buster's armors have greater amounts of panel line and segments. One of the most detailed parts is the leg. It took several hours for me, just for building a pair of Buster's legs. Such a pain in the ass if I recalled the time I spent for its HG version. But in my opinion, the sexiest part of Buster is its shoulder. There are two huge missile pods, with 6 missiles for each pods. Yeah, they are less than Heavyarms has, but aesthetically, Buster looks better in term of militaristic theme than the former.  

Big shoulders with even bigger missile pods.
Even though Buster's not equipped with short range weapons such as beam sabers,  you'll get two big guns as the main accessories, and I meant it .. they're truly BIG !  The 350mm gun launcher and 94mm high energy rifle are equipped on the right and the left side of Buster body respectively. You could choose to use one of them or wield them both. And of course, you could also combine the guns to form an Anti-armor shotgun or Hyper-impulse long range energy rifle. Personally, I prefer Buster wields the anti-armor shotgun, as shown on the MG box art. 


Speaking about the decals, you'll get one clear sticker and one dry transfer. Different with its brother unit, Duel, I found no trouble for decaling Buster. The decals simply make Buster looks even much cooler than before ! I really like the decals on one of Buster's arms which shows its OS : "GUNDAM" (as for SEED series, it stands for General Unilateral Neuro - Link Dispersive Automatic Maneuver). 


OK. Now, about the complaints. Well ... there are some parts which easily falling off whenever I posed the Buster. The first and the most irritating ones were side skirts. Buster is usually posed with its huge guns, hence, the legs are usually posed with an "open-wide" stance to balance the weight from the guns. On the other hand, the side skirts tend to slide out from their frames whenever I posed the legs. One of the solutions is to use lower crotch connection for more maneuverable stances. I also plan to use power glue for the side skirts. I will do the same for any other parts which keep fall off, such as the head crest and U-shape parts of Buster guns.

Articulation. It's really AMAZING !! Just look at the pictures below and you'll now why Buster has become one of the best kit of 2012. No complaints here.   












   
Closing remarks. Buster is one of my favorite mobile suits of all time (i have both HG and MG). There are many good things and few bad things about this kit. If you're a fan of SEED series, I could assure you that this guy is a MUST BUY kit for your collection.

-------------------------------------

GAT-X103 Buster Gundam (Master Grade)

Pros :
  • Cool military design
  • Two big guns and Two big missile pods with so many play options
  • Tons of details (especially for panel lines and decals)
  • One of the best articulated kit Bandai ever released
Cons :
  • Side skirts, head crest and some of the guns parts keep falling off easily.
  • No short range weapons and shield.


Monday, July 8, 2013

Meteo #3 - Indian Ocean Dipole dan Fenomena Kemarau Basah 2013

"Kenapa bulan juni masih sering hujan ?". "Kok musim kemarau banyak hujan ?".

Ini pertanyaan-pertanyaan klasik, dan biasanya ditanyakan berulang setiap tahun. Mayoritas masyarakat kita umumnya masih beranggapan (baca: 'terdoktrin') bahwa musim hujan itu identik dengan banyak hujan, dan kemarau dengan jarang hujan. Padahal, dalam beberapa dekade terakhir, banyak ditemukan fenomena cuaca dan iklim di wilayah kita yang bisa dibilang menyimpang dari kaidah-kaidah 'musiman' yang umumnya dikenal masyarakat, misalnya Madden-Julian Oscillation (MJO), Indian Ocean Dipole (IOD) dan lain-lain. Pada saat fenomena-fenomena ini terjadi, musim hujan bisa jadi 'kering', dan musim kemarau bisa jadi 'basah'. Dalam tulisan kali ini saya akan sedikit bercerita tentang Indian Ocean Dipole atau yg beken disebut IOD, serta pengaruhnya terhadap cuaca dan iklim di Indonesia.

Apa itu IOD ?

Sebelum penjelasan yg lebih rumit, mungkin anda pernah mendengar tentang El-Nino (ENSO) ? Simply speaking, IOD ini kurang lebih sama dengan ENSO. Perbedaannya adalah, kalau ENSO dibangkitkan di Samudera Pasifik, maka IOD mengambil tempat di Samudera Hindia. IOD ini sendiri termasuk fenomena yang baru ditemukan (dipublikasikan oleh Dr. N. Hameed Saji dkk. tahun 1999), jadi anda nggak usah minder kalau memang belum pernah dengar (:-P).

IOD adalah fenomena lautan-atmosfer di daerah ekuator Samudera Hindia yang mempengaruhi iklim di Indonesia dan negara-negara lain yang berada di sekitar cekungan (basin) Samudera Hindia (Saji et al., Nature, 1999). Sesuai namanya, IOD dikarakteristikkan oleh anomali suhu muka laut atau SST (Sea Surface Temperature) antara 'dua kutub' Samudera Hindia, yaitu Samudera Hindia barat (50E-70E,10S-10N) dan tenggara (90E-110E,10S-0S). Perbedaan anomali SST antara dua daerah ini disebut sebagai Dipole Mode Index (DMI), dan digunakan untuk mengukur kekuatan dari IOD itu sendiri. Periode di mana DMI bernilai positif umumnya disebut sebagai periode IOD positif (IOD+), dan sebaliknya, ketika DMI bernilai negatif disebut periode IOD negatif (IOD-). 

Seperti halnya ENSO, IOD juga sangat berpengaruh terhadap cuaca dan iklim di Indonesia. 

Pada periode IOD+, perairan di Samudera Hindia bagian tenggara umumnya lebih "dingin" (suhu lebih rendah dari rata-rata), di mana perairan di Samudera Hindia bagian barat akan lebih "hangat" (suhu lebih tinggi dari rata-rata). Akibatnya, konveksi (yang merupakan proses awal terbentuknya awan dan hujan) akan bergeser dari Samudera Hindia bagian timur ke arah barat, dan membawa banyak hujan ke bagian timur benua Afrika. Di sisi lain, daerah Samudera Hindia bagian timur yang "ditinggal lari" konveksi tadi (seperti Indonesia) akan menderita kekeringan. 


Karakteristik periode IOD- adalah kebalikan dari IOD+. SST di Samudera Hindia bagian tenggara akan lebih hangat, sementara di bagian barat akan lebih dingin, sehingga konveksi akan bergerak ke arah timur. Hal ini akan berakibat pada kekeringan di Afrika bagian timur dan curah hujan yang meningkat di Indonesia, terutama Indonesia bagian barat yang berdekatan dengan Samudera Hindia. 


Sekarang mari kita kaitkan IOD dengan fenomena "kemarau basah" yang terjadi pada pertengahan tahun ini. 
Gambar di atas menunjukkan anomali SST dan medan angin rata-rata  pada level 850 hPa untuk bulan Juni 2013.  Kontur dengan shade merah menunjukkan anomali positif, sedangkan biru menunjukkan anomali negatif. Terlihat jelas bahwa bulan Juni 2013 adalah periode IOD-, di mana SST di daerah Samudera Hindia barat lebih dingin dari SST rata-rata (SST klimatologi), sementara SST di daerah Samudera Hindia Tenggara (terutama di perairan Indonesia) lebih hangat. Hal ini menyebabkan  konveksi akan bergerak ke timur menuju wilayah Indonesia, dengan kecepatan angin mencapai 20 m/detik. Lalu bagaimana pengaruhnya terhadap curah hujan di Indonesia ? 
Gambar di atas menunjukkan curah hujan dan medan angin rata-rata dengan periode yang sama dengan anomali SST di gambar sebelumnya. Dari gambar terlihat hujan lebih terkonsentrasi pada Samudera Hindia timur dan tenggara, dibandingkan dengan samudera Hindia bagian barat yang curah hujannya rendah. Hal ini menunjukkan bahwa IOD merupakan salah satu faktor utama penyebab tingginya curah hujan di Indonesia bagian barat pada bulan Juni 2013.

Pertanyaan berikutnya adalah, seberapa besar pengaruh IOD terhadap curah hujan di Indonesia dari waktu ke waktu ?

Gambar di atas adalah grafik time series dari DMI dan curah hujan di Samudera Hindia tenggara (90E-110E, 10S-0S), yang mencakup wilayah Indonesia bagian barat, sejak Januari 2012 sampai Juni 2013. DMI mulai bernilai negatif sejak awal Mei 2013 hingga mencapai nilai terendah (dalam 1,5 tahun terakhir) pada bulan Juni 2013, yang diikuti oleh peningkatan intensitas hujan pada periode tersebut. Kondisi lebih ekstrim bisa kita lihat pada bulan Agustus - Oktober 2012. Bulan September - Oktober sejatinya adalah periode peralihan antara musim kemarau dan hujan, di mana fenomena cuaca lokal seperti Thunderstorm akibat siklus diurnal mendominasi wilayah Indonesia bagian barat. Jadi pada kondisi normal, curah hujan pada bulan-bulan tersebut seharusnya mulai meningkat sebelum memasuki musim hujan. Namun, akibat IOD+, curah hujan pada bulan tersebut menjadi sangat rendah.

Dari gambar juga terlihat bahwa tidak selamanya IOD berpengaruh terhadap intensitas curah hujan. Hal ini dikarenakan wilayah Indonesia juga sangat dipengaruhi oleh fenomena lain seperti Monsun, Madden-Julian Oscillation (MJO), Kelvin Wave dll. Fenomena yang dominan umumnya ditentukan berdasarkan indeks yang bersangkutan. Jadi tidak usah heran kalau pada musim hujan terkadang tidak hujan, dan sebaliknya, musim kemarau malah sering hujan, karena fenomena cuaca di Indonesia tidak hanya ditentukan oleh Monsun yang umumnya lebih populer di masyarakat.

Pada bulan Mei-Juni 2013, pengaruh IOD- bisa dikatakan dominan karena periode tersebut seharusnya merupakan  awal musim kemarau, sementara fase basah akibat MJO umumnya hanya berlangsung 1-2 minggu, yang diikuti oleh fase kering. Saya belum sempat menganalisis pengaruh fenomena lain yang siklusnya lebih rendah seperti Kelvin wave, Rossby wave dll. Namun berdasarkan data dan hasil analisis sementara, fenomena kemarau basah tahun ini memang lebih condong disebabkan oleh IOD.

Untuk sementara cukup sekian paparan mengenai IOD dan kontribusinya terhadap fenomena 'kemarau basah' tahun ini. Semoga memberi pencerahan kepada pembaca. Kritik dan saran yang membangun bisa ditulis pada bagian komentar atau di email langsung ke ardhi108@yahoo.com.

Terima kasih.

-ardhi-
-------------------

Acknowledge and notes :
  • NOAA_OI_SST_V2 data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/.
  • GSMaP NRT data provided by JAXA, Japan, from their Web site : http://sharaku.eorc.jaxa.jp/GSMaP/index.htm.
  • The first and second image about IOD in this post were acquired from http://www.jamstec.go.jp/frsgc/research/d1/iod/e/iod/about_iod.html
  • Tulisan ini juga bisa dibaca pada http://infohujan.wordpress.com