Friday, October 17, 2025

Research Note #32 - Instalasi ARWpost pada HPC BRIN

ARWpost adalah salah satu tool untuk mengolah keluaran (post-processor) dari WRF. Tool ini sebenarnya sudah termasuk 'kuno', dengan versi terakhir yang bisa diunduh adalah V3.1 (2 Maret 2011). Lalu kenapa saya pake tool ini? Alasannya karena keluaran dari ARWpost ini adalah data dalam format GrADS, dan saya sudah sangat terbiasa (dan nyaman) pake GrADS untuk analisis data.

Masalah utama dari ARWpost ini (seperti yg sudah-sudah) adalah kode programnya yang jadul, sehingga bila diinstall dengan compiler modern akan terjadi error, sehingga untuk instalasi pada Mahameru, diperlukan sedikit trik.

Pertama, download source ARWpost pada link ini. Ekstrak dan jalankan, script configurenya. Sebelum menjalankan configure, pastikan anda sudah memuat path NetCDF aktif pada enviroment sistem.

$ mkdir ARWpost
$ cd ARWpost
$ wget https://www2.mmm.ucar.edu/wrf/src/ARWpost_V3.tar.gz
$ tar -xzvf  ARWpost_V3.tar.gz
$ ./configure
Will use NETCDF in dir: /mgpfs/home/ardh003/source/wrf_dependencies/netcdf
------------------------------------------------------------------------
Please select from among the following supported platforms.
   1.  PC Linux i486 i586 i686 x86_64, PGI compiler
   2.  PC Linux i486 i586 i686 x86_64, Intel compiler
   3.  PC Linux i486 i586 i686 x86_64, gfortran compiler
Enter selection [1-3] : 3
------------------------------------------------------------------------
Configuration successful. To build the ARWpost, type: compile
------------------------------------------------------------------------

Sampai sini jangan langsung compile, karena perlu beberapa modifikasi pada file configure.arwp dan Makefile.

$ vi configure.arwp

Modifikasi baris C-Pre-Processor (CPP) pada file tersebut menjadi:

CPP = gfortran -E -x f95-cpp-input -P

Kemudian tambahkan argumen untuk Fortran compiler (FFLAGS) sehingga menjadi seperti ini:

FFLAGS          =       -ffree-form -O -fno-second-underscore -fconvert=big-endian -frecord-marker=4 -std=legacy -fallow-argument-mismatch

Lalu simpan perubahan dan keluar dari file configure.arwp. Berikutnya, masuk ke direktori /src dan modifikasi file Makefile.

$ cd src
$ vi Makefile

Lalu tambahkan linker untuk Fortran compiler. Perhatikan urutannya.
 
ARWpost.exe: $(OBJS)
        $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $(OBJS)  \
                -L$(NETCDF)/lib -I$(NETCDF)/include -lnetcdff -lnetcdf

Setelah itu simpan dan keluar dari Makefile. Sekarang anda bisa menjalankan compilernya.

$ ./compile

Pastikan tidak ada pesan error pada display. Berikut contoh beberapa baris terakhir proses compile bila tidak terjadi error.

gfortran -ffree-form -O -fno-second-underscore -fconvert=big-endian -frecord-marker=4 -std=legacy -fallow-argument-mismatch  -o ARWpost.exe module_model_basics.o constants_module.o gridinfo_module.o ARWpost.o input_module.o output_module.o module_map_utils.o misc_definitions_module.o module_date_pack.o module_debug.o process_domain_module.o module_get_file_names.o module_interp.o module_basic_arrays.o module_diagnostics.o module_arrays.o module_pressure.o module_calc_height.o module_calc_pressure.o module_calc_theta.o module_calc_tk.o module_calc_tc.o module_calc_td.o module_calc_td2.o module_calc_rh.o module_calc_rh2.o module_calc_uvmet.o module_calc_slp.o module_calc_dbz.o module_calc_cape.o module_calc_wdir.o module_calc_wspd.o module_calc_clfr.o  \
        -L/mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib -I/mgpfs/home/ardh003/source/wrf_dependencies/netcdf/include -lnetcdff -lnetcdf

Setelah itu pastikan file ARWpost.exe sudah terdapat pada direktori.

$ ls -alh ARWpost.exe
lrwxrwxrwx 1 ardh003 researcher 15 Oct 16 15:09 ARWpost.exe -> src/ARWpost.exe

Pastikan ARWpost.exe menggunakan library yg benar:

$ ldd ARWpost.exe
 linux-vdso.so.1 (0x00007ffd717be000)
        libnetcdff.so.7 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib/libnetcdff.so.7 (0x000014756b874000)
        libnetcdf.so.15 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib/libnetcdf.so.15 (0x000014756b564000)
        libgfortran.so.5 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib64/libgfortran.so.5 (0x000014756b097000)
        libm.so.6 => /lib64/libm.so.6 (0x000014756ad15000)
        libgcc_s.so.1 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib64/libgcc_s.so.1 (0x000014756aaf6000)
        libquadmath.so.0 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib64/libquadmath.so.0 (0x000014756a8b1000)
        libc.so.6 => /lib64/libc.so.6 (0x000014756a4ec000)
        libhdf5_hl.so.100 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib/libhdf5_hl.so.100 (0x000014756a2c7000)
        libhdf5.so.103 => /mgpfs/home/ardh003/source/wrf_dependencies/netcdf/lib/libhdf5.so.103 (0x0000147569cf7000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000147569af3000)
        libz.so.1 => /mgpfs/home/ardh003/source/wrf_dependencies/grib2/lib/libz.so.1 (0x00001475698d8000)
        /lib64/ld-linux-x86-64.so.2 (0x000014756bb33000)

Bila tidak ada error/library yang hilang, anda bisa langsung memodifikasi file konfigurasi namelist.ARWpost dan menjalankan ARWpost.exe. 

Thursday, October 16, 2025

Research Note #31 - Contoh Perintah Linux dan Slurm untuk Bekerja di HPC BRIN (updated)

Berikut beberapa perintah yang berguna untuk bekerja menggunakan fasilitas parallel computing di HPC BRIN (Mahameru). Perintah-perintah ini umumnya digunakan untuk mengetahui spesifikasi sistem yang digunakan sebelum menjalankan batch job pada slurm workload manager.

1. Mengetahui spesifikasi lengkap HPC

$ lscpu

2. Mengetahui jumlah processor pada node saat ini

$nproc
128

128 adalah jumlah cpu pada node yang aktif.

3. Mengetahui konfigurasi cluster HPC (Slurm)

$ sinfo -p medium-small -o "%N %c %m %G"
NODELIST CPUS MEMORY GRES
trembesi[51-72] 128 256000 (null)

trembesi[51-72] adalah node yang digunakan pada partisi medium-small, dengan jumlah cpu dan memori max masing-masing 128 dan 256 GB.

4. Submit dan menghentikan batch job (Slurm)

$ sbatch <script program.sh>  --> menjalankan script untuk batch job 

$ scancel -u <nama_user> --> menghentikan batch job oleh <nama_user>

5. Melihat status batch job dari user (slurm)

$ squeue -u 'whoami' --> melihat status batch job oleh user saat ini

$ squeue -u <nama_user> --> melihat status batch job oleh <nama_user>

$ sqeueu -all --> melihat status batch job oleh semua user

6. Melihat daftar seluruh partisi yang tersedia pada HPC (slurm)

$ sinfo -all

7. Masuk ke mode interaktif (slurm)

$ srun --partition=interactive --pty /bin/bash

Setelah masuk ke mode interaktif, anda bisa menjalankan script/program yang anda inginkan. Bila ingin keluar dari mode interaktif, ketik perintah 'exit' pada prompt shell.



Sunday, October 12, 2025

Research Note #30 - Instalasi Ncview dengan Miniconda3 di HPC BRIN

Conda adalah suatu package manager yang memungkinkan anda untuk menggunakan aplikasi scientific pada Linux tanpa harus repot menginstall/mengkonfigurasi library khusus pada sistem (seperti yg terjadi pada WRF-Chem). Dengan conda, anda dapat memilih instalasi aplikasi yang diinginkan dan menjalankannya pada environment khusus tanpa khawatir akan terjadi konflik dengan library lain pada system.

Pada tulisan ini, contoh aplikasi yang akan diinstall adalah ncview yang biasa digunakan untuk visualisasi data NetCDF (misal data domain WRF yang dibuat oleh geogrid). Salah satu kesulitan ketika instalasi ncview adalah tidak adanya library X11 untuk visualisasi pada server, terutama bila anda user biasa yang tidak punya akses admin untuk instalasi X11 pada sistem Linux. Pada HPC BRIN (Mahameru), ada beberapa jenis Conda yang bisa dipakai seperti Anaconda3 dan Miniconda3, tapi pada tulisan ini saya menggunakan Miniconda3.

Langkah pertama, pastikan conda sudah tersedia di module yang ada di Mahameru.

 $ module avail conda
----------- /mgpfs/shared/apps/mod/tools ---------------------
   Anaconda/3-2023.09-0
----------- /mgpfs/apps/modulefiles ---------------------------
   ai-ml/Anaconda/3-2023.09              earth/anaconda3/2019.07          earth/miniconda3/24.7.1
   bioinformatics/anaconda3/2023.09-0    earth/anaconda3/2023.09-0 (D)    earth/miniconda3/24.11.1 (D)

Berikutnya muat module miniconda3 24.11.1 dan periksa path 'bin'nya.

$ module load earth/miniconda3/24.11.1
$ module show earth/miniconda3/24.11.1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
   /mgpfs/apps/modulefiles/earth/miniconda3/24.11.1:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
load("readline/8.2")
whatis("miniconda3 2023.09-0 - anaconda3 is environment management system.")
setenv("RHOME","/mgpfs/apps/earth/apps/miniconda3/24.11.1")
prepend_path("PATH","/mgpfs/apps/earth/apps/miniconda3/24.11.1/bin")
prepend_path("LIBRARY_PATH","/mgpfs/apps/earth/apps/miniconda3/24.11.1/lib")
prepend_path("LD_LIBRARY_PATH","/mgpfs/apps/earth/apps/miniconda3/24.11.1/lib")
prepend_path("MANPATH","/mgpfs/apps/earth/apps/miniconda3/24.11.1/share/man")
help([[
        This module is for use of earth/miniconda3/24.11.1.
        use example:
            $ module load earth/miniconda3/24.11.1
]])

Berikutnya, muat path bin miniconda3 ke environment. Bila dilakukan dengan benar, kita dapat menjalankan conda pada shell, misal untuk melihat versi miniconda.

$ export PATH=/mgpfs/apps/earth/apps/miniconda3/24.11.1/bin:$PATH
$ conda --version
conda 25.1.1

Bila conda sudah bisa dijalankan, selanjutnya inisiasi conda pada shell. Perhatikan prompt shell berubah setelah aktivasi (anda masuk ke environment conda). 

$ source /mgpfs/apps/earth/apps/miniconda3/24.11.1/etc/profile.d/conda.sh
$ conda activate
(base) $

Setelah masuk ke environment conda, buat environment baru (sebut saja 'wrfvis') dan install ncview dan netcdf4. NetCDF pada conda ini tidak ada hubungannya alias terisolasi dari NetCDF yang sudah terinstall pada sistem). Tunggu sampai proses instalasi selesai, lalu aktifkan wrfvis.

(base) $ conda create -n wrfvis -c conda-forge ncview netcdf4
(base) $ conda activate wrfvis

Setelah wrfvis aktifkan, anda bisa menjalankan ncview untuk melihat isi data NetCDF. Tentu saja, X-server (misal X-ming) sudah harus terinstall dan aktif pada ssh client yang anda gunakan.

(wrfvis) $ ncview WPS/geo_em.d01.nc

Untuk keluar dari environment conda yang saat ini aktif:

(wrfvis) $ conda deactivate
$

Agar tidak perlu repot memuat conda ke environment tiap kali login, tambahkan dua baris ini pada file .bashrc.

export PATH=/mgpfs/apps/earth/apps/miniconda3/24.11.1/bin:$PATH
source /mgpfs/apps/earth/apps/miniconda3/24.11.1/etc/profile.d/conda.sh

Selanjutnya, anda bisa langsung masuk-keluar environment conda.

conda activate wrfvis
coda deactivate

Thursday, October 9, 2025

Research Note #29 - Instalasi WRF-Chem di HPC BRIN (Mahameru)

Last edited on 16-10-2022

Instalasi model WRF itu selalu menantang (baca: bikin stress), apalagi kalau terakhir kali installnya itu lebih dari 5 tahun yang lalu. Butuh waktu untuk mereview ulang langkah-langkah yang dulu pernah dilakukan, termasuk merefresh ilmu per-Linux-an yang sudah lumayan lama terlupa. Untungnya, berkat catatan-catatan proses instalasi njelimet yang masih tersimpan rapih di blog ini, ditambah dengan bantuan asisten virtual yang setia mendampingi (baca: chatGPT), akhirnya WRF bisa terinstall di HPC BRIN (selanjutnya kita sebut saja Mahameru). Yang lebih bikin senang, yg terinstall bukan cuma WRF, tapi juga WRF-Chem, dan ada beberapa hal baru yang saya pelajari dari proses instalasi ini.

Secara umum, proses intalasi model WRF-Chem di Mahameru hampir sama dengan Oakforest UTokyo dulu, dengan beberapa trik baru. Kalau dirangkum prosesnya kurang lebih seperti ini:

  1. Pastikan jenis C dan Fortran compiler yang tersedia di sistem. Mahameru menggunakan gcc dan gfortran, berbeda dengan Oakforest yang menggunakan icc dan ifort.  
  2. Install library-library yg dibutuhkan WRF, seperti NetCDF, grib2, Jasper, LibPNG dll. Sebagian library ini sudah tersedia di Mahameru, tinggal di-load saja modulnya. Untuk kasus saya, seluruh library ini saya install kembali di direktori user saya. Kenapa? Karena kl misal ada masalah, akan lebih gampang melacak dan memodifikasi path library-nya tanpa harus memuat ulang modul yang ada di sistem.
  3. Cara paling mudah instalasi library adalah dengan mengikuti panduan yang ada di website ini. Ikuti saja langkah-langkahnya sampai sebelum instalasi WRF/WPS, kecuali untuk MPICH, WRF dan WPS. MPICH tidak digunakan karena Mahameru sudah menggunakan OpenMPI untuk parallel computing. Instalasi WRF/WPS di Mahameru juga perlu beberapa trik khusus yang tidak ada di panduan tersebut.
  4. Download WRF dan WPS terbaru via github. Ini termasuk hal baru karena sebelumnya saya download manual dari website WRF (UCAR). Bedanya, download WRF via github memungkin modul WRF seperti Chem, WRFDA dll otomatis terunduh, jadi tidak perlu didownload satu-per-satu lagi. Praktis.
  5. Mulai dengan konfigurasi kompilasi WRF dahulu. Bila menggunakan bash shell, pastikan WRF_CHEM=1 dan NETCDF_classic=1 sudah tersimpan di environment. Jalankan configure script, pilih opsi #34 (dmpar, gcc/gfortran) dan basic nesting (#1). Pastikan proses configure berjalan normal.
  6. Untuk WRF-Chem, pastikan YACC (Yet Another Compiler-Compiler) sudah terinstall. Bila tidak ada (di Mahameru tidak ada), lakukan instalasi manual dengan Bison (YACC sudah include di dalamnya). Jangan lupa, deklarasikan pathnya, misal: export YACC="$CUSLIB/bison/bin/yacc -d". Bison bisa diunduh di sini.
  7. Trik pertama. Setelah configure selesai, edit file configure.wrf, dan hilangkan 'time' pada bagian deklarasi variabel FC (fortran compiler). Misal:   FC  =  time $(DM_FC) menjadi  FC  =  $(DM_FC). Kenapa ini penting? Karena script compiler WRF menggunakan 'time' untuk mencatat proses kompilasi, sedangkan Mahameru tidak memiliki modul 'time' ini, sehingga kalau script configure.wrf tidak diubah, maka proses kompilasi nantinya akan gagal (dikenal juga dengan Error 127).
  8. Trik berikutnya, jalankan kompilasi dengan batch job di Mahameru. Kenapa harus pakai batch job? Proses kompilasi ini memakan memori yg besar, sehingga bila dijalankan langsung dari login node (shell tempat anda mulai login), akan ada suatu saat di mana sistem akan menghentikan proses kompilasi secara paksa (kill/terminate) karena batasan memori untuk login node (dikenal juga dengan Error 1). Untuk instalasi ini, saya menggunakan opsi  #SBATCH --mem-per-cpu=16G pada script batch job untuk memastikan kompilasi mendapat alokasi yang cukup. Contoh script ada di catatan 3 di bawah.
  9. Bila proses kompilasi berjalan lancar, beberapa file executable akan tersedia di direktori /main WRF, antara lain: real.exe, wrf.exe, ndown.exe dan tc.exe. Kalau tidak ada, ya berarti proses kompilasi gagal dan kompilasi WPS selanjutnya tidak akan bisa dilakukan.
  10. Untuk WPS, pastikan library fortran yg dibutuhkan sudah dimuat pada environment. Bila belum, jalankan: export LD_LIBRARY_PATH=$NETCDF/lib64, di mana $NETCDF adalah direktori library netcdf yg aktif digunakan. Pastikan juga WRF_DIR=[direktori WRF] karena WPS perlu executable WRF untuk mengkompilasi WPS.
  11. Jalankan script configure WPS, pilih opsi #1 (serial), dan pastikan proses configure lancar. Bila ada pesan "Your Fortran + NETCDF did not run successfully" itu artinya langkah 10 di atas msh belum benar.
  12. Jalankan script kompilasi WPS. Proses ini bisa dilakukan di login node dan tidak sampai 5 menit selesai. Bila proses lancar, akan ada tiga file executable baru di direktori WPS: geogrid.exe, metgrid.exe dan ungrib.exe.
  13. Pastikan ketiga file tadi terhubung dengan library yang dibutuhkan dengan menggunakan perintah 'ldd'. Misalnya: ldd geogrid.exe. Kalau tidak ada masalah, seharusnya sistem akan menunjukkan link ke tiap library untuk file tersebut tanpa ada pesan error.


Catatan #1: WRF-Chem yang diinstall tidak menggunakan KPP Library

Catatan #2:
Dengan asumsi langkah 1-4 tidak ada masalah, saya menggunakan konfigurasi berikut untuk file ~/.bashrc, supaya langkah 5 dst tidak perlu capek-capek memuat konfigurasi ke environment sistem tiap kali login. Konfigurasi ini bisa berbeda-beda untuk tiap orang/user dan sistemnya.

export CUSLIB=$HOME/source/wrf_dependencies
export NETCDF=$CUSLIB/netcdf
export LD_LIBRARY_PATH=$NETCDF/lib:$CUSLIB/grib2/lib:$CUSLIB/flex/lib:$NETCDF/lib64:/opt/ohpc/pub/mpi/openmpi4-gnu12/4.1.4/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/ohpc/localpub/libs/hwloc/lib:$LD_LIBRARY_PATH
export PATH=$NETCDF/bin:$HOME/opengrads/Contents:/opt/ohpc/pub/mpi/openmpi4-gnu12/4.1.4/bin:$PATH
export JASPERLIB=$CUSLIB/grib2/lib
export JASPERINC=$CUSLIB/grib2/include
export YACC="$CUSLIB/bison/bin/yacc -d"

Catatan #3: 
Script batch job untuk instalasi WRF-Chem di Mahameru (untuk mencegah Error 1):

#!/bin/bash
#SBATCH --job-name=insjob
#SBATCH --ntasks=1
#SBATCH --partition=short
#SBATCH --cpus-per-task=4
#SBATCH --mem-per-cpu=16G
module load  openmpi4/4.1.4
export LD_LIBRARY_PATH=/opt/ohpc/pub/mpi/openmpi4-gnu12/4.1.4/lib:$LD_LIBRARY_PATH
export PATH=/opt/ohpc/pub/mpi/openmpi4-gnu12/4.1.4/bin:$PATH
# Your script goes here
./compile em_real >& log.compile


Wednesday, September 24, 2025

Ressurrection

Dua setengah tahun ... Cukup lama blog ini tertidur. Mungkin sekarang sudah waktunya bangkit kembali. Merajut kembali cita dan cerita yang telah sekian lama mati suri.

I'll be back soon .... :-)