Thursday, June 19, 2014

Meteo #9 - Interpretasi Kode Parameter Variabel Data GRIB2 pada Control File GrADS

GRIB (GRIdded Binary atau General Regularly-distributed Information in Binary form) adalah salah satu format data yang umum digunakan untuk menyimpan data meteorologi historis ataupun prediksi/forecast. Para peneliti yang bergelut dengan dunia NWP umumnya sudah khatam dalam hal interpretasi data GRIB. Celakanya, data GRIB umumnya menjadi momok untuk modeler pemula (seperti saya yang baru 2 bulan lalu masuk ke dunia permodelan), karena format ini masih kalah populer dibandingkan format data lain seperti Plain Binary, NetCDF ataupun HDF. Hingga saat ini, salah satu format GRIB yang biasa digunakan untuk keluaran NWP (misal WRF-EMS) adalah GRIB2. 

Tulisan ini dibuat untuk (sedikit) mengurangi kebingungan kita (baca: penulis) dalam hal interpretasi parameter data GRIB2 yang ada pada file kontrol (CTL) GrADS, tool analisis sejuta umat kita. Pertanyaannya, interpretasi parameter yang bagaimanakah yang membuat bingung ?

Untuk memberi gambaran yang lebih jelas, perhatikan bagian VAR dari file CTL GrADS untuk file plain binary biasa  (dalam hal ini data GSMaP NRT) berikut : 

VARS 1
precip 0 99 hourly averaged rain rate [mm/hr]
ENDVARS

Karena syntaxnya adalah :

VARS <jumlah variabel>
<nama variabel> <jumlah level> <satuan> <deskripsi variabel>
ENDVARS

Maka, bila diartikan dalam 'bahasa manusia' kurang lebih seperti ini : "Data ini memiliki 1 variabel, dengan nama precip, hanya memiliki 1 level, dan tidak memiliki satuan khusus." Deksripsinya (bagian hourly bla bla) silakan baca sendiri lah ya.

Sekarang mari kita bandingkan dengan bagian VAR dari file CTL data GRIB2 yang dihasilkan WRF-EMS :

VARS 149
no4LFTX180_0mb  0,108,18000,0   0,7,11 ** 180-0 mb above ground Best (4 Layer) Lifted Index [K]
ACPCPaccsfc  0,1,0   0,1,10,1 ** surface Convective Precipitation [kg m-2]
ACPCPsfc  0,1,0   0,1,10 ** surface Convective Precipitation [kg m-2]
AGRPLaccsfc  0,1,0   0,1,153,1 ** surface Accumulated Graupel [kg/m^2]
...
...
VVELprs    38,100  0,2,8 ** (1013 1000 975 950 925.. 200 150 100 50 25) Vertical Velocity (Pressure) [Pa/s]
VVMEANl100_100  0,100,100000,40000   0,2,159,0 ** 1000-400 mb Mean Vertical Velocity From 1000 To 400mb [m/s]
VWSH610m   0,103,610   0,2,25 ** 610 m above ground Vertical Speed Sheer [s-1]
WEASDaccsfc  0,1,0   0,1,13,1 ** surface Water Equivalent Of Accumulated Snow Depth [kg m-2]
WEASDsfc  0,1,0   0,1,13 ** surface Water Equivalent Of Accumulated Snow Depth [kg m-2]
WTMPsfc   0,1,0   10,3,0 ** surface Water Temperature [K]
ZRATEsfc   0,1,0   0,1,67 ** surface Freezing Rain Precipitation Rate [kg m-2 s-1]
ZRMAXsfc   0,1,0   0,1,173,2 ** surface Period Maximum Freezing Rainfall Rate [kg/m^2/s]
ENDVARS

Tidak hanya jumlah variabel yang mencapai 3 digit, tapi deksripsi beberapa variabel yang sama seringkali membuat (saya) kebingungan. Satu-satunya petunjuk yang membedakan variabel yang nyaris sama tersebut adalah pada bagian level dan satuan. Masalahnya, format level dan satuan GRIB2 lebih rumit dibandingkan dengan format binary biasa, karena mengandung 3-5 parameter tambahan yang dipisahkan koma.

Setelah mengulik-ngulik dokumentasi GrADS dan format GRIB2, akhirnya pencerahan itu datang juga. Jadi, syntax untuk variabel GRIB2 pada file CTL GrADS bisa dituliskan seperti ini :

VARS
<nama variabel> <NLEVS,LTYPE,LVAL,LVAL2,LTYPE2> <DISC,CAT,NUM,SP,SP2> <deskripsi variabel>
ENDVARS

OK, sekarang penjelasannya :

1. Kode Level
  • NLEVS adalah jumlah level vertikal dari variabel. NLEVS=0 berarti data tersebut hanya memiliki 1 level saja. 
  • LTYPE adalah tipe level dari variabel. Nilainya bergantung pada kode GRIB2 untuk level vertikal. Misalnya : 100, berarti variabel tersebut menggunakan tipe level isobaric dalam satuam Pascal. Untuk daftar kode yang lengkap bagi NLEVS>0 (banyak level) silakan lihat tabel berikut. Untuk NLEVS=0 (hanya 1 level fixed) silakan lihat tabel berikut
  • LVAL adalah nilai level pertama (LTYPE), tidak selalu digunakan. Umumnya digunakan untuk tipe variabel pada lapisan antara dua level. 
  • LVAL2 adalah nilai level kedua, hanya untuk tipe variabel pada lapisan antara dua level. 
  • LTYPE2 adalah tipe dari level kedua (LTYPE2), tidak selalu digunakan, hanya digunakan bila LVAL2 berbeda tipe dengan LVAL1.
Contoh : 

VVELprs    38,100  0,2,8 ** (1013 1000 975 950 925.. 200 150 100 50 25) Vertical Velocity (Pressure) [Pa/s]


Variabel 'VVELprs' memiliki 38 level vertikal dengan tipe isobaric. Contoh lain yg lebih rumit :

no4LFTX180_0mb  0,108,18000,0   0,7,11 ** 180-0 mb above ground Best (4 Layer) Lifted Index [K]

Variabel 'no4LFTX180_0mb' hanya memiliki level fixed (hanya 1 level), dengan tipe berupa perbedaan level tekanan tertentu (kode 108), dengan level pertama 18000 Pascal (180 mb) dan level kedua 0 Pascal.

2. Kode Unit/Satuan dan Proses
  • DISC adalah kode disiplin (ilmu/data) dari variabel atau parameter. Misalnya : 0 untuk meteorologi, 1 untuk hidrologi, 2 untuk permukaan tanah dll. Tabel lengkap bisa dilihat di sini.
  • CAT adalah kategori parameter. Misal : 0 untuk temperatur, 1 untuk kelembaban dll. Tabel lengkap bisa dilihat pada bagian sebelumnya (DISC).
  • NUM adalah nomor parameter. Misal : 4 untuk temperatur maksimum, 5 untuk temperatur minimum dll. Tabel lengkap bisa dilihat pada bagian sebelumnya (DISC).
  • SP adalah proses statistik yang digunakan untuk memperoleh nilai parameter. Umumnya digunakan untuk parameter turunan. Misalnya : 0 untuk rata-rata, 1 untuk akumulasi dll. Tabel lengkap bisa dilihat di sini.
  • SP2 adalah proses spasial yang digunakan untuk memperoleh nilai parameter. Umumnya digunakan untuk data spasial. Misalnya : 1 untuk interpolasi bilinear, 2 untuk interpolasi bicubic dll. Tabel lengkap bisa dilihat di sini.
Contoh :


APCPaccsfc  0,1,0   0,1,8,1 ** surface Total Precipitation [kg m-2]

APCPaccsfc adalah parameter meteorologi, dari kategori kelembaban, dengan tipe presipitasi total, yang diperoleh dari proses akumulasi. Contoh lain :


CURMAXsfc   0,1,0   0,1,156,2 ** surface Maximum Convective Precipitation Rate [kg/m^2/s]

CURMAXsfc adalah parameter meteorologi, dari kategori kelembaban, tipe parameter tertentu, yang diperoleh dari nilai maksimum. 

----

Mungkin ada yg bertanya, kenapa capek-capek menginterpretasi kode variabel kalau penjelasannya sudah ada di deskripsi variabel ? Jawabannya karena deskripsi variabel sifatnya opsional, dan bisa saja ngawur, alias tidak sesuai dengan variabel yang sebenarnya (misal variabel kelembaban dideskripsikan sebagai temperatur, dan GrADS tidak akan memeriksa kebenaran deskripsi data). Jadi pengetahuan tentang kode variabel sangat penting, bila deskripsi data tidak ada atau anda ragu pada deskripsi data yang ada.

Contoh terakhir, kali ini tanpa deskripsi data yg benar :

DVVMAXl100_100  0,100,100000,40000   0,2,221,2 ** bla bla deskripsi semau gue

Bila dibahasa manusiakan :

"Variabel DVVMAXl100_100 memiliki level fixed, tipe isobaric, level pertama pada 100000 Pascal (1000mb), level kedua 40000 Pascal (400mb), dengan disiplin parameter meteorologi, kategori parameter momentum,  tipe parameter nilai maksimum jam-jaman dari kecepatan vertikal downward pada level terendah 400hPa, proses statistik nilai maksimum".

Jadi, walaupun deskripsinya ngawur, kita masih bisa mengetahui jenis dan parameter dari variabel yang benar dari data GRIB2  bila kita mengerti cara membaca kode parameternya.


Tuesday, April 22, 2014

Meteo #8 - Cara Menjalankan Model WRF-EMS (Part 1 - Set Your Timezone)

Pada tulisan sebelumnya, saya telah berbagi cara melakukan instalasi model WRF-EMS di Linux via VMware Player. Kali ini saya akan mencoba memaparkan bagaimana cara menjalankan makhluk yg bernama WRF-EMS ini.

Langkah pertama yang saya lakukan sebelum menjalankan model adalah melakukan konfigurasi zona waktu

Konfigurasi zona waktu ini sebenarnya tidak mutlak harus dilakukan, karena model masih bisa berjalan tanpanya. Namun, pemahaman tentang zona waktu ini akan sangat membantu pada saat kita akan melakukan konfigurasi lanjut ketika menjalankan model, terutama yang berhubungan dengan waktu awal dan berapa lama prediksi yang akan dilakukan.

Secara default, WRF-EMS akan melakukan prediksi dengan waktu awal (initial time) terbaru, dengan lama prediksi (boundary condition) 24 jam, menggunakan time cycle pada 00,06,12 dan 18 UTC (ingat, zona waktunya UTC). WRF-EMS akan mengakses data sesuai dengan waktu pada sistem PC anda, dan di sinilah masalah biasanya muncul. Umumnya pada saat instalasi linux, pengguna lebih banyak memperhatikan jam daripada zona waktu itu sendiri. Akibatnya, tidak jarang, zona waktu tersebut tidak sesuai dengan lokasi si pengguna. Hal ini akan berujung pada 'kebingungan' pada saat menentukan waktu awal dan akhir prediksi.

Misalnya, lokasi anda ada di Papua dan waktu setempat sekarang jam 02:00 pagi, tapi zona waktu anda menggunakan WIB (GMT+7), bukan WIT (GMT+9). Dengan kondisi ini, WRF-EMS akan menganggap sekarang jam 19 UTC, bukan 17 UTC. Karena WRF-EMS akan mengakses data terbaru (pada 00,06,12 atau 18 UTC) dan saat ini (menurut si model) adalah jam 19 UTC, maka model akan mengunduh data terbaru yg telah diproses dari server (GFS misalnya), yaitu data pada jam 18 UTC. Tentunya data 18 UTC tersebut tidak akan pernah bisa diunduh, karena waktu saat ini sebenarnya adalah jam 17 UTC. 

Jadi, konfigurasi zona waktu sebelum melakukan eksekusi model sangatlah penting, terutama apabila anda akan menjalankan model secara real-time.

Untuk melihat zona waktu yang digunakan sistem, disarankan melalui terminal, bukan GUI. Buka terminal, lalu ketikkan perintah date pada shell. Misalnya anda saat ini berada di Jakarta, waktu setempat menunjukkan pukul 18:49, dan perintah tadi menghasilkan : 

Tue Apr 22 18:49:58 WIB 2014
maka, anda tidak perlu melakukan konfigurasi zona waktu lagi, karena model akan menganggap saat ini adalah pukul 11:49 UTC. Pada kasus lain misalnya, hasil yang ditunjukkan adalah :

Tue Apr 22 18:49:58 PDT 2014

Ini menunjukkan bahwa zona waktu anda adalah PDT (Pacific Daylight Time), dan model akan mengganggap saat ini adalah pukul 18:49 UTC. Anda harus melakukan konfigurasi zona waktu ulang, karena waktu yang sebenarnya saat ini adalah 11:49 UTC, bukan 18:49 UTC.

Untuk melakukan konfigurasi ulang zona waktu lakukan hal berikut :
  1. Buka terminal dan ketikkan : ls /usr/share/zoneinfo/Asia
  2. Pastikan lokasi anda terwakili oleh file nama kota yang ada dalam direktori tersebut. Misalnya anda di Bandung (GMT+7), maka pastikan Jakarta atau Bangkok (keduanya mewakili zona waktu GMT+7) ada ada dalam direktori.
    Jakarta ada di sana nggak ?
  3. Hubungkan (link) file informasi zona waktu dari lokasi tadi dengan file localtime di direktori /etc/localtime dengan perintah : ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
  4. Jalankan kembali perintah date. Bila tidak ada kesalahan, maka zona waktu anda seharusnya akan berubah menjadi WIB.

Bila zona waktu sudah benar, maka langkah berikutnya adalah mempersiapkan data model untuk eksekusi (initial time, boundary condition, cycles dll) pada tulisan selanjutnya :-)

Tuesday, April 15, 2014

Meteo #7 - Cara Instalasi Model Prediksi Cuaca WRF-EMS di Linux via VMware Player

WRF (the Weather Research and Forecasting) adalah salah satu model numerik yang paling populer digunakan untuk prediksi cuaca (NWP) dalam skala meso (~5km sampai ratusan km), baik untuk kepentingan operasional maupun penelitian. Penggunaan model NWP untuk keperluan operasional maupun riset umumnya menjadi momok, khususnya bagi pengguna/user dengan pengetahuan komputasi pas-pasan. Salah satu permasalahan yang paling sering dialami pengguna adalah kesalahan pada saat instalasi model ybs. Umumnya model NWP dibuat dengan menggunakan bahasa pemrograman seperti Fortran, C atau Perl, dan membutuhkan library khusus pada sistem operasi (OS) agar model tersebut dapat bekerja dengan baik. Tidak jarang, berbagai kesalahan/error terjadi pada saat kompilasi dan instalasi model pada OS. Untuk OS sendiri, yang umumnya digunakan adalah OS berbasis UNIX, seperti Linux atau Sun Solaris. Sehingga, untuk bisa melakukan instalasi NWP, pengguna umumnya harus memiliki pengetahuan tentang Linux dan bahasa pemrograman yang digunakan pada model tersebut.

WRF-Environmental Modeling System (WRF-EMS) adalah model berbasis WRF yang dikembangkan oleh NOAA/NWS Science and Training Resource Center (STRC). WRF-EMS merupakan model NWP yang lengkap, full-physics dan mendukung core WRF yang dikembangkan NCAR (Advance Research WRF a.k.a ARW) maupun NCEP (Non-hydrostatic Mesoscale Model a.k.a NMM).

So ... tulisan tentang instalasi WRF-EMS via VMware Player saya buat karena :
  • Bila dibandingkan dengan WRF biasa, proses instalasi, konfigurasi dan eksekusi pada WRF-EMS sangat sangat sangat disederhanakan untuk mendorong penggunaan NWP untuk kepentingan riset. Begitu sederhananya, sehingga pengguna dengan pengetahuan dasar UNIX pun masih bisa melakukan instalasi/konfigurasi model ini dengan mudah.
  • Dokumentasi penggunaan WRF-EMS sangat komprehensif dan mudah diikuti. Thanks to Dr. Robert Rozumalski ... You're a genius !!!
  • VMware player (atau VirtualBox) merupakan salah satu cara paling mudah untuk melakukan instalasi UNIX/Linux via Windows tanpa harus pusing atau khawatir terjadi kesalahan partisi yg umumnya ditakuti oleh pengguna Linux tingkat dasar.
  • VMware player memungkinkan pengguna untuk menjalankan Linux (dan model) secara portable dan mobile. Anda bahkan bisa melakukan eksekusi model di mobil atau di atas tempat tidur anda.
  • Umur saya makin tua, dan saya mulai jadi pelupa. Tulisan ini dibuat sebagai bahan contekan kalo saya sewaktu-waktu lupa. "WRF-EMS will provide more hair on your head and less on your back, and that's a good thing !!"

Tulisan ini juga saya tujukan untuk sharing dengan pembaca/pengguna yang :
  • ... ingin melakukan studi/riset dengan model NWP, tanpa harus berpusing ria dengan proses instalasi /konfigurasi yang rumit.
  • ... memiliki pengetahuan yang cukup tentang ilmu meteorologi.
  • ... memiliki pengetahuan dasar tentang model NWP.
  • ... memiliki pengetahuan dan kemampuan dasar menggunakan UNIX/Linux.
  • ... memiliki pengetahuan dasar pemrograman.

Bila anda membutuhkan referensi tambahan tentang NWP atau yang lainnya, silakan akses :
  • Untuk NWP : http://en.wikipedia.org/wiki/Numerical_weather_prediction
  • Untuk model WRF : http://www.wrf-model.org/index.php
  • Untuk model WRF-EMS : http://strc.comet.ucar.edu/software/newrems/
  • Untuk Linux : http://en.wikipedia.org/wiki/Linux
  • Untuk VMWare Player : http://en.wikipedia.org/wiki/Vmware_player
Sebelum melakukan instalasi model, diharapkan anda mempersiapkan beberapa hal berikut :
  1. IBM PC atau yang kompatibel, baik tipe desktop atau laptop/notebook, dengan spesifikasi minimal : Intel Core2Duo/Dual Core, RAM 2 GB, dan harddisk dengan sisa space minimal 40GB. Anda bisa menggunakan Mac/Apple, tapi saya tidak bisa menjamin karena saya belum pernah melakukan instalasi model/Linux dengan Mac/Apple.
  2. OS minimal Windows Vista/7. Saya belum pernah melakukan instalasi dengan XP atau 8. Tentu saja anda bisa juga mencobanya.
  3. Koneksi internet yang cukup cepat. Tidak disarankan menggunakan modem.
  4. Salah satu distribusi Linux. Saya menggunakan CentOS yang bisa diunduh di www.centos.org. Anda juga bisa menggunakan distro lain seperti Mint, Ubuntu atau Fedora. Unduhlah file ISO image dari Linux yang anda inginkan, dan simpan di harddisk. Umumnya file ISO berukuran 700mb (CD) atau 4.7 GB (DVD) .. and that's why I told you not using modem for internet connection ...
  5. VMware Player yang bisa di unduh secara gratis di https://my.vmware.com/web/vmware/downloads. Saya menggunakan VMware Player versi 4.0.
  6. Melakukan registrasi untuk memperoleh script instalasi WRF-EMS di http://strc.comet.ucar.edu/software/newrems/
Sebagai langkah awal, lakukan instalasi Linux via VMware Player :
  • Lakukan instalasi VMware Player di Windows (bila anda sudah memilikinya, silakan lanjut ke langkah berikutnya).
  • Jalankan VMware Player, dan pilih Create a New Virtual Machine. Pada jendela New Virtual Machine Wizard, pilihlah instalasi dari file image/ISO. Pilihlah (browse) file ISO dari Linux yang sebelumnya sudah anda unduh dan simpan di harddisk, lalu klik Next.
  • Isilah informasi pengguna/root Linux, mulai dari nama lengkap, username dan passwordnya, lalu klik Next.
  • Isilah informasi virtual machine (VM) yang ingin anda buat. Nama VM ini nantinya akan ditampilkan pada daftar VM di VMware player. Pilih juga lokasi tempat VM ini disimpan (VM akan diperlakukan sebagai file di Windows). Lanjutkan dengan Next.
  • Tentukan ukuran file VM yang akan disimpan di harddisk. Sebagai catatan, umumnya instalasi Linux secara default membutuhkan minimal 15-20GB, sementara WRF-EMS membutuhkan minimal 16GB. Jadi untuk amannya, setidaknya siapkan ruang harddisk minimal 40 GB. Untuk meningkatkan performa, simpanlah VM sebagai file tunggal dengan memilih Store virtual disk as a single file. Lanjutkan dengan Next.
Perhatikan ukuran harddisk anda. 
  • VM siap dibuat. Perhatikan setting VM yang akan dibuat, terutama ukuran harddisk dan RAM. Bila anda ingin melakukan pengaturan tambahan untuk RAM atau lainnya, pilih Customize Hardware. Disarankan anda menggunakan RAM minimal 1 GB (1024 MB) untuk VM. Anda bisa mengabaikan setting lain (misal floppy dll). Bila sudah selesai, klik Finish.
Dua pilihan : Setting tambahan atau ... Selesai 
Perhatikan ukuran RAM PC anda sebelum menentukan RAM untuk Linux di VM. 
  • Pilih dan jalankan VM pada daftar VMware Player, klik Play virtual machine atau klik dua kali nama VM pada daftar. Tunggulah sampai Linux selesai terinstall. Bila ada beberapa opsi/pertanyaan pada saat instalasi, pilihlah jawaban berdasarkan sistem atau common sense anda. Misal : bila diminta memasukkan jenis keyboard, pilihlah US-English atau yg sesuai dengan jenis keyboard yg anda miliki.

Tunggu sampai proses instalasi selesai ...
  • Bila proses instalasi Linux selesai, dan login screen tampak, SELAMAT !! Anda berhasil melakukan instalasi Linux via VMware Player. Silakan login sesuai dengan username dan password yang sudah anda tentukan sebelumnya.
Selamat ! Linux is installed !!
  • Anda bisa memperlakukan Linux pada VM seperti halnya Linux normal. Misalnya anda telah selesai, anda bisa melakukan shutdown pada Linux dan otomatis VM akan dimatikan. Bila anda ingin menggunakan Linux kembali, jalankan kembali VMware Player dan pilihlah VM Linux yang telah anda install sebelumnya.

OK, setelah instalasi Linux rampung, kita masuk ke hidangan utama, yaitu instalasi model WRF-EMS. Seperti yang telah disebutkan sebelumnya, anda perlu melakukan registrasi untuk memperoleh script instalasi WRF-EMS, kecuali anda melakukan instalasi WRF-EMS via DVD atau lokal (dan dua cara terakhir tersebut tidak akan saya jelaskan pada tulisan ini). 


Setelah melakukan registrasi, tunggulah sampai ada email balasan yang menyertakan script instalasi WRF-EMS. Bila belum ada email balasan (terutama bila anda registrasi pada saat weekend), BERSABARLAH. Tidak perlu menulis email tambahan untuk meminta/mengingatkan script instalasi WRF-EMS. Perlu diingat, si pembuat model juga harus melakukan aktivitas sehari-hari (baca : bekerja) sambil terus mengembangkan model ini. Thus, please be kind and patient.

Setelah anda menerima email balasan lakukan langkah-langkah berikut untuk melakukan instalasi WRF-EMS pada Linux via VMware Player :
  • Buka email dan unduh script ems_install.pl, lalu simpanlah pada USB-flash atau media lainnya.
Buka email dan unduh script ems_install.pl
  • Jalankan VMware Player dan Linux yang telah anda install sebelumnya. Lalu login seperti biasa.
  • Pastikan anda bisa mengakses internet via Linux di VMware. Bila anda telah terkoneksi dengan internet di Windows sebelum menjalankan VMware, maka seharusnya Linux di VMware juga akan terhubung dengan internet secara otomatis. Bila belum bisa terhubung ke internet, periksa koneksi pada PC dan LAN/wireless anda. 
  • Salin/Simpan script ems_install.pl dari flashdisk ke salah satu direktori Linux, misal : /home/ardhi/Download. Anda juga bisa langsung membuka email dan mengunduh script tersebut via browser yang ada di Linux.
  • Buka Terminal dan pastikan anda menggunakan shell bash, csh atau tcsh, dengan mengetikkan perintah berikut : echo $SHELL. Perlu diingat, hingga tulisan ini dibuat, WRF-EMS hanya bisa diinstall dengan ketiga shell di atas.
Bila anda menggunakan shell bash ...
  • Masuk ke direktori tempat anda menyimpan script ems_install.pl, dan jalankan script tersebut pada Terminal dengan mengetikkan perintah berikut : ems_install.pl --install atau perl ems_install.pl --install. Perintah ini akan menginstall WRF-EMS versi terbaru ke Linux. Anda juga bisa menentukan versi yang diinstall, misalnya : ems_install.pl --install 3.4.1.14.15
  • Anda akan diminta memberikan informasi tentang lokasi tempat WRF-EMS akan diinstall. Saya misalnya, menginstall WRF-EMS pada direktori /usr. Anda bebas menggunakan direktori lain, misalnya : /home/badu/wrf. Bila direktori ini belum ada, buatlah dengan perintah mkdir di Linux.
  • Anda akan diminta menjawab beberapa pertanyaan mengenai sistem PC anda. Pertanyaan-pertanyaan ini mudah, dan saya yakin anda bisa menjawabnya. Setelah itu, script akan mengunduh file-file yang dibutuhkan untuk instalasi. Silakan duduk santai dan tunggu sampai proses instalasi selesai. Seberapa cepat proses ini selesai, sepenuhnya bergantung pada koneksi internet yang anda gunakan. Untuk mengisi waktu, anda bisa membaca dokumentasi WRF-EMS di http://strc.comet.ucar.edu/software/newrems/.
  • Setelah proses instalasi selesai, perhatikan pesan yang ditampilkan di terminal. Bila ada library yang tidak ditemukan pada Linux, installer akan menginformasikannya.
Selama library yang hilang tidak kritikal ... anda masih bisa menjalankan WRF-EMS
  • Periksa environment variable WRF-EMS sesuai shell yang anda gunakan. Untuk shell bash misalnya, bukalah file : /home/<nama user anda>/.bashrc dengan gedit atau vi, lalu pastikan baris berikut terdapat dalam file tersebut : if [ -f /<direktori instalasi WRF-EMS>/etc/EMS.profile ] ; then. /<direktori instalasi WRF-EMS>/etc/EMS.profile fi. Bila tidak ada, edit file tersebut seperti gambar di bawah, dan simpan. Hal ini penting, agar sistem bisa mengakses WRF-EMS dari direktori mana pun.
Penting !! Pastikan WRF-EMS terdapat pada path environment variable.
  • Logout dari Linux, lalu login kembali dengan username dan password anda.
  • Buka kembali Terminal. Lalu jalankan perintah berikut pada shell : cd $EMS. Bila WRF-EMS telah terinstall dengan benar, anda akan diarahkan ke direktori tempat model terinstall. Lalu jalankan perintah berikut : ls $EMS_STRC, dan anda akan melihat isi direktori strc dari WRF_EMS. Terakhir, jalankan tool sysinfo untuk melihat informasi sistem anda. Bingung ? Perhatikan gambar di bawah :
Banzai !!!
  • Bila tampilan terminal anda seperti gambar di atas, SELAMAT !! Anda telah berhasil menginstall WRF-EMS pada Linux. Bila ketiga perintah pada langkah sebelumnya gagal (tidak menghasilkan gambar di atas), coba anda restart Linux, dan ulangi langkah sebelumnya.
Seperti yang anda lihat, instalasi WRF-EMS di Linux via VMware Player, sangat mudah. Tidak perlu konfigurasi atau kompilasi program yang rumit. Yang dibutuhkan hanya kesabaran dan ketelitian anda (serta koneksi internet yg kencang :-P) dalam proses instalasinya. Pada tulisan berikutnya, saya akan berbagi cara konfigurasi WRF-EMS untuk melakukan prediksi cuaca, dengan perintah-perintah 'sakti' seperti ems_prep, ems_run dan ems_post.

Untuk petunjuk menjalankan model WRF-EMS via VMware player, silakan baca posting selanjutnya : Cara Menjalankan WRF-EMS (Part 1)

Update (14 Dec 2014) :

Beberapa pengguna sempat mengalami masalah ketika pertama kali menjalankan WRF-EMS di Linux dengan pesan kesalahan berikut :

gempak@CentOS-60-64-minimal-> ems_domain.pl --locdom domain Can't locate Time/HiRes.pm in @INC (@INC contains: /home/gempak/wrfems/strc/ems_util /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/gempak/wrfems/strc/ems_util/ems_utils.pm line 1401.
BEGIN failed--compilation aborted at /home/gempak/wrfems/strc/ems_util/ems_utils.pm line 1401.
Compilation failed in require at ems_domain.pl line 169.
BEGIN failed--compilation aborted at ems_domain.pl line 169.


Masalah ini terjadi karena modul Time::HiRes dari Perl belum terinstall di sistem Linux. Modul ini dibutuhkan oleh WRF-EMS untuk menjalankan beberapa fungsi waktu resolusi tinggi pada saat simulasi. Untuk mengatasi masalah ini, anda bisa melakukan instalasi modul Time::Hires tersebut, baik secara online maupun offline, dengan perintah :

yum install perl-Time-HiRes

Good luck and welcome to modeling nirvana !

Wednesday, February 26, 2014

Meteo #6 - Menghitung Statistik pada Excel berdasarkan Warna Cell

Salah satu bagian yang paling merepotkan ketika mengolah data dengan Excel adalah melakukan perhitungan statistik. Perhitungan statistik yang dimaksud di sini tentu saja bukan statistik dasar (karena Excel pada dasarnya dirancang untuk melakukan perhitungan statistik). Yang saya maksud adalah statistik lanjut, misalnya anda ingin menghitung rata-rata berdasarkan kondisi yang acak dan tidak tetap.

Contoh kasus :

Anda mempunyai data hujan bulanan (Januari-Desember) selama 13 tahun (2000-2012). Misalnya anda ingin mengetahui rata-rata seluruh bulan, anda tinggal menggunakan fungsi AVERAGE dan memilih seluruh sel data, dan ... hola, muncullah nilai rata-rata yang anda cari.


Pada contoh di atas, saya menghitung rata-rata pada sel B155 sampai M167, dikali 100, hasilnya berada pada sel A168. Piece of cake.

Sekarang, bagaimana misalnya anda ingin menghitung rata-rata hujan pada saat MJO fase 1 ? Artinya tidak semua nilai ikut dimasukkan dalam rata-rata, karena MJO fase 1 terjadi hanya pada bulan-bulan tertentu saja. Untuk lebih jelasnya perhatikan gambar berikut.


Nilai pada cell dengan background kuning pada gambar di atas tidak ikut dirata-ratakan. 

Salah satu cara yg paling mudah adalah dengan menghapus nilai pada cell dengan background kuning, karena Excel tidak akan meratakan-ratakan data pada cell kosong. Masalahnya, bagaimana bila jumlah data yg ingin dirata-ratakan banyak ? Misal 100 tahun atau 100 stasiun ? Tentu tidak akan efisien bila kita menghapus nilai pada cell dengan background kuning secara manual.

Sayangnya, Excel tidak memiliki fungsi statistik untuk melakukan perhitungan berdasarkan properti cell, seperti warna background, warna teks dll. Saya kurang tahu kalau Excel 2010 dan setelahnya bisa melakukannya. karena selama ini saya menggunakan Excel 2007 dan sebelumnya.

Salah satu trik yang bisa kita lakukan adalah dengan menggunakan Macro. Macro pada dasarnya merupakan kode program yang bisa disisipkan dalam spreadsheet untuk melakukan suatu fungsi tertentu. 

Untuk melakukan perhitungan statistik berdasarkan warna background cell, lakukan langkah berikut :

  • Tekan Alt-F11 untuk membuka jendela Microsoft Visual Basic. Di sinilah anda akan memasukan kode macro ke spreadsheet.
  • Pada menu 'Insert' pilih 'Module'. Kode yang dimasukkan ke Module akan bisa diakses oleh setiap Sheet pada Spreadsheet Excel.
  • Copy dan paste kode berikut pada jendela Module :

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult

lCol = rColor.Interior.ColorIndex
If SUM = True Then
  For Each rCell In rRange
    If rCell.Interior.ColorIndex = lCol Then
      vResult = WorksheetFunction.SUM(rCell, vResult)
    End If
  Next rCell
Else
  For Each rCell In rRange
    If rCell.Interior.ColorIndex = lCol Then
      vResult = 1 + vResult
    End If
  Next rCell
End If
ColorFunction = vResult
End Function

  • Simpan kode di atas. Agar spreadsheet bisa menggunakan Macro, anda harus menyimpan file Excel ke dalam format Macro Spreadsheet (.xlsm). 
  • Pada spreadsheet, buatlah fungsi berikut untuk melakukan perhitungan pada cell. 
=COLORFUNCTION(CELLWARNA,RANGEDATA,OPSI)

COLORFUNCTION adalah nama fungsi yang kita buat dari modul Macro.
CELLWARNA adalah cell dari warna background yang ingin kita proses.
RANGEDATA adalah rentang cell dari data yang ingin kita proses.
OPSI adalah proses yang ingin kita lakukan. Pada kode di atas, bila kita ingin melakukan penjumlahan (SUM), gunakan TRUE. Sedangkan bila ingin menghitung jumlah cell (COUNT), gunakan FALSE. Anda bisa mengganti SUM atau COUNT tadi ke fungsi lain seperti AVERAGE, STDEV dll tergantung selera dan kebutuhan anda.  

Ini contohnya :


Pada gambar di atas, saya meletakkan fungsi COLORFUNCTION(FW2,FI2:FT2,TRUE) pada cell FU2. Artinya, saya akan menghitung akumulasi data (TRUE) pada cell dengan warna background yg sama dengan cell FW12 (putih), dengan rentang data dari cell FI2 sampai FT2.

Untuk cell FV2, saya meletakkan fungsi COLORFUNCTION(FW2,FI2:FT2,FALSE). Proses kerjanya sama dengan sebelumnya, hanya fungsinya adalah menghitung jumlah cell dengan background putih. Hasilnya, FV2 bernilai 7, karena jumlah cell dengan background putih dari FI2 sampai FT2 ada 7.

Tentu saja, fungsi Macro ini bisa disalin seperti fungsi Excel lainnya, sehingga dapat membantu pengolahan data secara lebih efektif dan efisien.

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)