Teragon ACO 시스템을 이용한 WRF 분석 가시화 하기
#### Teragon ACO 시스템을 이용한 WRF 분석하기 #####
작성자 : 서진우 (alang@clunix.com)
작성일 : 2016년 7월 12일
## WRF/WPS 사용법 ###
WRFV3 3.6 버전 ..
WRF 버전에 따라 sample 문법과 참조데이터 영향을 받기 때문에
버전에 맞는 sample 을 잘 선택해야 한다.
1. wrf benchmark 샘플 다운로드
http://www.mmm.ucar.edu/WG2bench
wget http://www2.mmm.ucar.edu/WG2bench/conus12km_data_v3-2/conus12km_data_v3-2.tar.gz
2. WRF 샘플 기본 사용법 및 BMT 환경 구성
# mkdir /data/WRF_RUN
# cd /data/WRF_RUN
다운 받은 sample tar를 WRFV3 디렉토리 밑에 푼다.
# tar xzvf conus12km.tar.gz
# cd conus12km
WRFV3 밑의 run 디렉토리에 WRF 실행에 필요한 기본 파일이 들어 있다.
WRFV3/run 밑에 있는 모든 파일을 run_conus12km 밑으로 link 걸거나 copy 한다.
(wrf.exe, namelist.input 파일은 제외: )
sample_run 디렉토리에 가서 wrf_run_link 명령을 수행하면 된다.
# vi /APP/ACO/CommonUtils/bin/wrf_run_link
—————————————————-
#!/bin/sh
WRFV3_ROOT=/APP/ACO/WRF-MODEL/3.6.1
RUN_FILES=`ls -1 ${WRFV3_ROOT}/run | grep -v namelist.input`
for SLINK in `echo $RUN_FILES` ; do
ln -sf ${WRFV3_ROOT}/run/$SLINK .
done
—————————————————-
# chmod 755 /APP/ACO/CommonUtils/bin/wrf_run_link
WRF 해석이 완료되면 해석 시간을 점검하는 스크립트를 생성한다.
# vi /APP/ACO/CommonUtils/etc/wrf_stats.awk
—————————————————
BEGIN{ a = 0.0 ; i = 0 ; max = -999999999 ; min = 9999999999 }
{
i ++
a += $1
if ( $1 > max ) max = $1
if ( $1 < min ) min = $1
}
END{ printf(“—n%10s %8dn%10s %15fs%10s %15fs%10s %15fs%10s %15fs%10s %15fs”,”items:”,i,”max:”,max,”min:”,min,”sum:”,a,”mean:”,a/(i*1.0),”mean/max:”,(a/(i*1.0))/max) }
—————————————————–
# vi /APP/ACO/CommonUtils/bin/wrf_elapsed
—————————————————–
#!/bin/sh
grep ‘Timing for main’ rsl.out.0000 | sed ‘1d’ | head -149 | awk ‘{print $9}’ | awk -f /APP/ACO/CommonUtils/etc/wrf_stats.awk
echo “”
—————————————————–
# chmod 755 /APP/ACO/CommonUtils/bin/wrf_elapsed
해석이 완료된 run 디렉토리 안에서 wrf_elapsed 명령을 수행하면 아래와 같이 나타난다.
—n items: 149n max: 8.094130n min: 4.840230n sum: 749.855830n mean: 5.032589n mean/max: 0.621758n
3. nameinput.list 주요 BMT 관련 설정
nameinput.list 파일의 설정값을 수정하여 해석 범위나 해석 방식을 조정할 수 있다.
아래는 BMT 에서 대표적으로 사용하는 항목이다.
run_hours : 예보시간 (데이터에서 해석을 대상 시간대 지정)
history_interval : 360 -> 6시간 간격으로 데이터 저장 (분단위)
time_step : 적분 간격 10초 -> 10초 간격으로 해석 (초단위)
dx=3000 ( 3km 격자크기 ) 해석 지리 정밀도
nproc_x : domain decomposition x 방향 셋팅
nproc_y : domain decomposition y 방향 셋팅 ( x * y 는 전체 CPU 수와 동일 )
예를 들어 아래와 같은 설정으로 해석했을때 ..
——————————————————-
run_hours = 12,
history_interval = 180
restart = .false.,
time_step = 180,
——————————————————-
real 0m40.382s
user 0m29.496s
sys 0m4.721s
Timing for main: time 2000-01-24_12:03:00 on domain 1: 1.30590 elapsed seconds.
Timing for main: time 2000-01-24_12:06:00 on domain 1: 0.14740 elapsed seconds.
Timing for main: time 2000-01-24_12:09:00 on domain 1: 0.14470 elapsed seconds.
.
.
Timing for main: time 2000-01-24_23:54:00 on domain 1: 0.14550 elapsed seconds.
Timing for main: time 2000-01-24_23:57:00 on domain 1: 0.14290 elapsed seconds.
Timing for main: time 2000-01-25_00:00:00 on domain 1: 0.14580 elapsed seconds.
Timing for Writing wrfout_d01_2000-01-25_00:00:00 for domain 1: 0.11260 elapsed seconds.
d01 2000-01-25_00:00:00 wrf: SUCCESS COMPLETE WRF
time_step 간격으로 로그 출력 ..
run_hours 정의된 시간범위 만큼 해석
*** run_hours 변경 시 ..
——————————————————-
run_hours = 24,
——————————————————-
real 1m18.386s
user 0m58.338s
sys 0m8.910s
2000-01-24_12:00:00 부터 2000-01-25_12:00:00 까지 24시간 범위를 해석함.
헤석 시간도 2배 가까이 소요됨
*** history_interval 변경 시 ..
——————————————————-
run_hours = 24,
history_interval = 60, 60, 60,
——————————————————-
real 1m21.162s
user 0m59.479s
sys 0m9.371s
history_interval 간격으로 wrfout_d01_2000-01-25_10:00:00 결과 파일에
데이터 히스토리 저장
위 설정은 60분 단위로 history를 저장한다.
위 단위가 적으면 적을 수록 I/O가 많이 발생한다.
대신 장시간 해석 도중 장애 발생 시 손실이 적은 장점이 있음.
*** time_step 변경 시
——————————————————–
run_hours = 24,
history_interval = 60, 60, 60,
time_step = 10,
——————————————————–
Timing for main: time 2000-01-24_12:41:50 on domain 1: 0.13400 elapsed seconds.
Timing for main: time 2000-01-24_12:42:00 on domain 1: 0.13920 elapsed seconds.
Timing for main: time 2000-01-24_12:42:10 on domain 1: 0.13330 elapsed seconds.
time_step (10초 간격으로 해석이 진행 된다. ) 보다 정밀한 해석이 가능할 듯
..시간은 오래 걸림
4. conus12km sample 실행 방법 (middle size)
# tar xzvf conus12km.tar.gz
# mv conus12km run_conus12km
# cd run_conus12km
# wrf_run_link
conus12km 모델은 wrf 중간 결과를 읽어 재시작하는 형태이기 때문에 wrfinput 파일
이 없다. namelist.input 의 dynamics 제일 하단에 관련 설정 추가
domains 세션의 nproc_x, nproc_y 의 곱은 병렬 계산 core 수와 같도록 한다.
# vi namelist.input
—————————————————–
&domains
.
nproc_x = 2
nproc_y = 20
.
&dynamics
.
use_baseparam_fr_nml = .t.
——————————————————
# mpirun -np 40 ./wrf.exe
# wrf_elapsed
items: 149n
max: 5.011450n
min: 3.632750n
sum: 584.127100n
mean: 3.920316n
mean/max: 0.782272n
40core 에서 5~6분 소요
conus12km_v3-2.tar.gz sample 의 경우에는 use_baseparam_fr_nml = .t.
설정을 하지 않아도 수행(하면 에러발생)
5. conus2.5km sample 실행 방법 (big size)
# export WRFIO_NCD_LARGE_FILE_SUPPORT=1
# tar xzvf conus2.5km.tar.gz
# mv conus2.5km run_conus2.5km_v3
# cd run_conus2.5km_v3
# tar xvf wrf_large_benchmark.tar
# cp namelist.input.3h namelist.input
# wrf_run_link
부가적으로 필요한 기반 데이터 환경을 생성한다.
아래 dw.sh 스크립트를 이용하면 된다.
(12시간 정도 소요되니..퇴근하면서 수행 권장 ..)
# vi dw.sh
——————————————————————
#!/bin/sh
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/1-RST/RST/files
list=`cat files`
for A in `echo $list`
do
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/1-RST/RST/$A
done
cat rst_6hr* | gunzip -c > wrfrst_d01_2005-06-04_06_00_00
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/namelist.input
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/wrfbdy_d01.gz
gunzip wrfbdy_d01.gz
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraaa
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraab
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraac
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraad
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraae
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraaf
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraag
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraah
wget http://www2.mmm.ucar.edu/WG2bench/conus_2.5_v3/2-9HR/9HR/out_9hraai
cat out_9hr* | gunzip -c > wrf_reference
/APP/ACO/WRFV3/external/io_netcdf/diffwrf wrf_reference wrfout_2005-06-04_09_00_00
——————————————————————–
# dw.sh
# vi namelist.input
; 아래 세션의 설정 값 수정 및 추가
&time_interval section
restart_interval =360,
io_form_history =2,
io_form_restart =2,
io_form_input =2,
io_form_boundary =2,
&domains
; 아래 내용 제거
perturb_input =.true.
; 아래 내용 환경에 맞게 수정
nproc_x =2,
nproc_y =10,
; 아래 추가
tile_strategy =2,
&dynamics
; 아래 추가
use_baseparam_fr_nml =.true.
# mpirun -np 20 ./wrf.exe
6. WPS, WRF 전체 처리 과정 살펴 보기
– WPS 전처리 작업
실제 실무 환경에서 WRF를 구동하기 위해서는 WPS 단계에서 참조할 수 있는
geometry input data 가 필요하다.
다운로드 :
http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
# cd /APP/ACO/WRF-MODEL/3.6.1/WPS
# wget http://www2.mmm.ucar.edu/wrf/src/ACOs_files/geog_complete.tar.bz2
기본 샘플에서 사용되는 데이터 일부 중 topo_10m,5m,2m,30s 관련 데이터가
geog_complete.tar.bz2 포함되어 있지 않다
추가로 다운 받는다 .
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_10m.tar.bz2
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_5m.tar.bz2
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_2m.tar.bz2
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/topo_30s.tar.bz2
# tar xjvf geog_complete.tar.bz2
# cd geog
# ls
WPS 조건 정의 파일인 namelist.wps 를 수정합니다.
# cd ..
# vi namelist.wps
——————————————————————–
&share
.
max_dom = 1,
start_date = ‘2000-01-24_12:00:00′,’2006-08-16_12:00:00’,
end_date = ‘2000-01-25_12:00:00′,’2006-08-16_12:00:00’,
.
geog_data_path = ‘/APP/ACO/WRF-MODEL/3.6.1/WPS/geog/’
.
——————————————————————–
namelist.wps에 대해 간단히 설명을 드리자면 WPS에서 사용되는
geogrid.exe metgrid.exe ungrib.exe 프로그램의 환경 설정입니다.
&share는 공통적으로 적용되며, &geogrid, &metgrid, &ungrib 은
개별적으로 해당 프로그램에만 적용됩니다.
일단 디폴트 케이스의 경우 &share부분만 수정하면 됩니다. (3-5줄)
일단 모델 도메인을 하나만 사용할 것이기 때문에 max_dom은 1로 수정합니다.
그리고 모델 시작/ 종료 시간은 2000-01-24_12:00:00 / 2000-01-25_12:00:00 로
수정합니다.
(콤마(,)로 구분되어 있는 것은 각 도메인에 대한 설정입니다.
max_dom이 2인 경우에는 콤마의 좌측이 첫번째 도메인의 설정이며,
콤마의 우측은 두번째 도메인의 설정입니다.)
# ./geogrid.exe
——————————————————————–
Parsed 22 entries in GEOGRID.TBL
Processing domain 1 of 1
Processing XLAT and XLONG
Processing MAPFAC
Processing F and E
Processing ROTANG
Processing LANDUSEF
Calculating landmask from LANDUSEF ( WATER = 16 )
Processing HGT_M
Processing SOILTEMP
Processing SOILCTOP
Processing SCT_DOM
Processing SOILCBOT
Processing SCB_DOM
Processing ALBEDO12M
Processing GREENFRAC
Processing LAI12M
Processing SNOALB
Processing SLOPECAT
Processing SLOPECAT
Processing CON
Processing VAR
Processing OA1
Processing OA2
Processing OA3
Processing OA4
Processing OL1
Processing OL2
Processing OL3
Processing OL4
Processing VAR_SSO
Processing LAKE_DEPTH
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of geogrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
——————————————————————–
geogrid.exe 가 정상 수행되면, geo_em.d01.nc 파일이 생성된다.
(도메인이 여러개라면 geo_em.d0x.nc 순으로 생성됩니다.)
참고) 만일 geogrid.exe 실행 전 모델 도메인이 어떻게 되는지 간단히 확인하기
위해서는 아래 방법으로 가능하다.
# ncl util/plotgrids_new.ncl
// ncl 버전이 6.2 이하이면 util/plotgrids.ncl 파일 이용
생성된 geo_em.d01.nc 파일 확인은 아래 방법으로 수행한다.
# ncdump -h geo-em.d01.nc // nc 파일 내용 확인
# ncview geo-em.d01.nc // nv 파일 그래픽 화면 확인
[3d vars] 에 6개의 contents 가 존재함. month 의 current 항목에 마우스를
클릭하면 1월~12월의 변화를 확인할 수 있음.
각 항목에 대한 상세 내용은 아래에서 확인 가능하다.
http://rda.ucar.edu/datasets/ds083.2/#metadata/grib.html?_do=y
다음은 ungrib.exe 파일을 실행한다.
ungrib.exe은 원 자료 데이터 에서 WRF 모델 구동에 필요한 변수들을 추출하여
임시 파일로 변환하는 과정입니다.
아래에서 예제를 다운 받는다.
# cd /APP/ACO/WRF-MODEL/3.6.1/WPS
# wget http://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/JAN00_AWIP.tar.gz
# tar xzvf JAN00_AWIP.tar.gz
ungrib.exe 구동 전에 이용할 Variable Table을 링크하도록 하겠습니다.
(데이터 파일마다 데이터의 구조, 연직,수평 좌표 등이 다릅니다만…
고맙게도 대표적인 파일들은 이미 Table이 갖추어져 있습니다. NCEP GFS, R2, ECMWF 등)
# ls ungrib/Variable_Tables/
Vtable.NCEP2
.
을 입력하면 여러 재분석 모델 등 데이터의 이름이 등장합니다.
(예 Vtable.NCEP2는 NCEP2 자료를 이용할 시에 사용합니다..)
여기서는 Vtable.AWIP를 이용합니다.
# ln -sf ungrib/Variable_Tables/Vtable.AWIP Vtable
다음으로는 link_grib.csh을 이용하여 파일을 묶습니다.
# ./link_grib.csh JAN00/2000012*
# ls -l GRIBFILE.AA*
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAA -> JAN00/2000012412.AWIP3D
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAB -> JAN00/2000012412.AWIPSF
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAC -> JAN00/2000012418.AWIP3D
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAD -> JAN00/2000012418.AWIPSF
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAE -> JAN00/2000012500.AWIP3D
lrwxrwxrwx 1 root root 23 2016-07-14 10:03 GRIBFILE.AAF -> JAN00/2000012500.AWIPSF
이제 ungrib 을 실행합니다.
# ./ungrib.exe
——————————————————————–
.
.
**********
Deleting temporary files created by ungrib…
**********
Deleting file: ./PFILE:2000-01-24_12
Deleting file: ./PFILE:2000-01-24_18
Deleting file: ./PFILE:2000-01-25_00
Deleting file: ./PFILE:2000-01-25_06
Deleting file: ./PFILE:2000-01-25_12
**********
Done deleting temporary files.
**********
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of ungrib. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
——————————————————————–
Output 파일 확인
# ls -1 FILE\:2000-01-2*
FILE:2000-01-24_12
FILE:2000-01-24_18
FILE:2000-01-25_00
FILE:2000-01-25_06
FILE:2000-01-25_12
마지막으로 metagrid.exe 실행
# ./metgrid.exe
Processing domain 1 of 1
Processing 2000-01-24_12
FILE
Processing 2000-01-24_18
FILE
Processing 2000-01-25_00
FILE
Processing 2000-01-25_06
FILE
Processing 2000-01-25_12
FILE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of metgrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
이제 WRF 실행 시 사용되는 met_em*.nc 파일이 생성되어 있을 것이다.
# ls -1 met_em.d01.2000-01-2*
met_em.d01.2000-01-24_12:00:00.nc
met_em.d01.2000-01-24_18:00:00.nc
met_em.d01.2000-01-25_00:00:00.nc
met_em.d01.2000-01-25_06:00:00.nc
met_em.d01.2000-01-25_12:00:00.nc
이것으로 WPS 전처리 작업이 완료되었다. 이 전처리된 데이터를 가지고
WRF 분석을 해보도록 하자
– WRF 분석 작업
WRF 분석을 할 디렉토리를 만든다.
# mkdir /data3/WRF_RUN/arw_run
# cp met_em* /data3/WRF_RUN/arw_run
# wrf_run_link
;; wrf em_real 밑에 파일을 해당 디렉토리로 link .. namelist.input 은 제외
# cp /APP/ACO/WRF-MODEL/3.6.1/test/em_real/namelist.input .
namelist.input 은 원래 WPS 전처리 모델에 맞게 수정이 필요합니다.
다만, 기본 em_real 에 기본 생성되는 namelist.input 은 기본 케이스로 지금껏
해온 WPS 모델과 일치하기 때문에 별도 수정할 필요는 없습니다.
일단 namelist.input 에 어떤 내용이 있는지 점검
# vi namelist.input
&Time_control : 모델 시작 / 종료 시간, 적분 결과 저장 간격 등 정의
&domain : 모델 영역과 관련되며, WPS namelist 의 &geogrid와 동일하게 수정 (Mesh)
&physics : 모델에 사용할 피직스임. 해석 엔진과 같은.. (solve)
&dynamics : 역학코어 (경계,해석 조건..)
이제 real.exe를 이용하여 모델에 이용할 초기장/경계장을 생성.
# ./real.exe
starting wrf task 0 of 1
완료되면 WRF INPUT 에 해당하는 wrfbdy_d01, wrfinput_d01 파일이 생성된다.
wrfinput_d01 – 초기장
wrfbdy_d01 – 경계장
(모델 도메인이 여러개인 경우 d02, d03의 형태로 등장하기도 합니다.)
작업로그는 rsl.out*, rsl.err* 파일로 생성됨. 문제가 있을 경우 해당 파일 내용을
살펴본다.
이제 wrf.exe 로 해석 수행
# mpirun -np 1 ./wrf.exe
해석 과정 확인은 rsl.out0000 파일을 살펴보면 된다.
# tail -l rsl.out.0000
Timing for main: time 2000-01-24_23:39:00 on domain 1: 0.08339 elapsed seconds
Timing for main: time 2000-01-24_23:42:00 on domain 1: 0.08907 elapsed seconds
Timing for main: time 2000-01-24_23:45:00 on domain 1: 0.08736 elapsed seconds
Timing for main: time 2000-01-24_23:48:00 on domain 1: 0.08842 elapsed seconds
Timing for main: time 2000-01-24_23:51:00 on domain 1: 0.07079 elapsed seconds
Timing for main: time 2000-01-24_23:54:00 on domain 1: 0.06977 elapsed seconds
Timing for main: time 2000-01-24_23:57:00 on domain 1: 0.07918 elapsed seconds
Timing for main: time 2000-01-25_00:00:00 on domain 1: 0.06812 elapsed seconds
Timing for Writing wrfout_d01_2000-01-25_00:00:00 for domain 1: 0.07114 elapsed seconds
d01 2000-01-25_00:00:00 wrf: SUCCESS COMPLETE WRF
해석 소요 시간 확인
# wrf_elapsed (1core 해석 시 46.7초)
.
sum: 46.738890s
# mpirun -np 8 ./wrf.exe
# wrf_elapsed (8core 해석 시 11.4초)
.
sum: 11.475820s
정상적으로 해석이 완료되면 wrfout_d* 파일이 생성된다.
7. NCL 을 이용하여 WRF 결과 그래프 확인
WRF 결과 그래프를 표출할때 사용되는 표준 ncl 파일을 다운 받음.
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/Examples/LEVELS_INTERP/wrf_PressureLevel.htm
# wget http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/Examples/LEVELS_INTERP/wrf_PressureLevel1.ncl
다운 받은 ncl 파일을 열어서 addfile 부분에 wrfout_d* 파일 경로를 맞게 수정한다.
# vi wrf_PressureLevel1.ncl
—————————————————————————-
a = addfile(“wrfout_d01_2000-01-24_12:00:00.nc”,”r”) ;; ../ 제거
만일 결과를 ps, pdf 와 같은 파일로 저장하고 싶을 경우는 type 을 수정함.
type = “png” ;; 해석 결과를 출력하는 형태, png, ps, x11, pdf 등 제공
wks = gsn_open_wks(type,”Teragon_WRF_Maemi_1″)
—————————————————————————-
# ncl wrf_PressureLevel1.ncl
그럼 12장의 그림이 표출된다.
가장 먼저 나오는 850hPa 등압면 변수 표출입니다.
/// 분석 기간과 분석 간격을 보다 세밀하게 해석할 수 있도록 환경을 수정하는
연습을 하길 권장
// Teragon ACO에서는 WRF 결과를 확인하기 위한 3가지 ncl scripts 를 제공한다.
wrf_post.ncl : 가장 간단한 형태의 기상도를 표현해줌.
wrf_wind.ncl : 풍속 정보가 스펙트럼 컬러로 표현된 기상도 제공
wrf_overlay.ncl : OLR 정도가 표현된 기상도 제공
8. 실제 태풍 분석
– 2014년 태풍 너구리 분석
ucar.edu의 NCEP FNL 데이터 페이지에서 관련 데이터 다운로드
http://rda.ucar.edu/datasets/ds083.2/
계정이 없으시면, register now 를 클릭, 계정 생성
있으신 경우 sign in을 눌러 로그인
밑으로 스크롤을 내려 보시면, DATA ACCESS가 있고, 이를 클릭.
“GRIB1 6 HOURLY FILES begin 1999.07.30” 에서 Web File Listing을 선택.
다음 화면에서는 편하게 Complete File list 를 클릭.
연도별로 일단 정렬이 되어 있습니다.
일단 너구리가 지나간 2014년인 GRIB1 2014를 클릭.
너구리는 7월에 지나갔으니 GRIB1 2014. 07 을 클릭.
아래와 같이 창이 뜨는데 일단 여기서는 2014년 7월 8일 00시부터 7월 11일 00시까지의
3일(72시간) 모델을 돌리도록 하겠습니다.
스크롤하여 fnl_20140708_00_00.grib1을 찾고 앞의 체크박스를 클릭.
다음은 fnl_20140711_00_00.grib1을 찾고 앞의 체크박스를 클릭.
그러면 대화 상자가 나오는데 yes를 클릭
그러면 7월 8일 00시부터 11일 00시까지의 데이터가 선택이 됩니다.
다시 이번에는 다시 조금 위로 커서를 옮겨, Csh Download Script를 찾아 클릭.
WPS 를 작업할 디렉토리를 만들고, 해당 디렉토리에서 csh 스크립트 복사, 실행
# mkdir /APP/ACO/WRF-MODEL/3.6.1/WPS/data_raccoon
# cp download.csh /APP/ACO/WRF-MODEL/3.6.1/WPS/data_raccoon
# cd /APP/ACO/WRF-MODEL/3.6.1/WPS/data_raccoon
# csh download.csh <ucar password>
그럼..관련 grib1 데이터가 다운로드 된다.
# cd ../
기존 WPS 작업한 결과 파일을 다른 곳으로 이동
# mkdir old
# mv FILE\:2000-01-2* met_em.d01.2000-01-2* geo_em.d0* old
# cp namelist.wps old/
namelist.wps 수정
# vi namelist.wps
—————————————————————————-
;; &share 의 start_date, end_datae 수정
start_date = ‘2014-07-08_00:00:00′,’2006-08-16_12:00:00’,
end_date = ‘2014-07-11_00:00:00′,’2006-08-16_12:00:00’,
;; &geogrid의 e_we, e_sn ref_lat, ref_lon, truelat1, truelat2, stand_lon을 수정
e_we = 134, 112,
e_sn = 111, 97,
ref_lat = 36.00, # 위도
ref_lon = 125.00, # 경도
truelat1 = 20.0,
truelat2 = 40.0,
stand_lon = 125.0,
—————————————————————————-
# ./geogrid.exe
—————————————————————————-
Parsed 22 entries in GEOGRID.TBL
Processing domain 1 of 1
Processing XLAT and XLONG
Processing MAPFAC
Processing F and E
Processing ROTANG
Processing LANDUSEF
Calculating landmask from LANDUSEF ( WATER = 16 )
Processing HGT_M
Processing SOILTEMP
Processing SOILCTOP
Processing SCT_DOM
Processing SOILCBOT
Processing SCB_DOM
Processing ALBEDO12M
Processing GREENFRAC
Processing LAI12M
Processing SNOALB
Processing SLOPECAT
Processing SLOPECAT
Processing CON
Processing VAR
Processing OA1
Processing OA2
Processing OA3
Processing OA4
Processing OL1
Processing OL2
Processing OL3
Processing OL4
Processing VAR_SSO
Processing LAKE_DEPTH
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of geogrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
—————————————————————————-
# ls -l geo_em.d01.nc
# ncview geo_em.d01.nc
3d vars 값을 하나씩 선택하면서 month의 current 값을 클릭하며 변화를 살펴봄.
이제 ungrib 을 하기 위해 NCEP FNL 자료를 받은 data_raccoon 디렉토리의 grib
파일을 link 시킴
# ./link_grib.csh data_raccoon/fnl_201407*
# ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
link 잘 되었는지 확인하고 ungrib.exe 실행
# ./ungrib.exe
—————————————————————————-
.
Found file: FILE:2014-07-10_00
Looking for data at time 2014-07-10_06
Found file: FILE:2014-07-10_06
Looking for data at time 2014-07-10_12
Found file: FILE:2014-07-10_12
Looking for data at time 2014-07-10_18
Found file: FILE:2014-07-10_18
Looking for data at time 2014-07-11_00
Found file: FILE:2014-07-11_00
End Subroutine DATINT.
.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of ungrib. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
—————————————————————————-
Output 파일 생성 확인
# ls -1 FILE\:2014-07-*
—————————————————————————-
FILE:2014-07-08_00
FILE:2014-07-08_06
FILE:2014-07-08_12
FILE:2014-07-08_18
FILE:2014-07-09_00
FILE:2014-07-09_06
FILE:2014-07-09_12
FILE:2014-07-09_18
FILE:2014-07-10_00
FILE:2014-07-10_06
FILE:2014-07-10_12
FILE:2014-07-10_18
FILE:2014-07-11_00
—————————————————————————-
이제 metgrid.exe 실행
# ./metgrid.exe
—————————————————————————-
.
Processing 2014-07-10_06
FILE
Processing 2014-07-10_12
FILE
Processing 2014-07-10_18
FILE
Processing 2014-07-11_00
FILE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Successful completion of metgrid. !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
—————————————————————————-
Output 파일 확인
# ls -1 met_em.d01.2014-07-*
—————————————————————————-
met_em.d01.2014-07-08_00:00:00.nc
met_em.d01.2014-07-08_06:00:00.nc
met_em.d01.2014-07-08_12:00:00.nc
met_em.d01.2014-07-08_18:00:00.nc
met_em.d01.2014-07-09_00:00:00.nc
met_em.d01.2014-07-09_06:00:00.nc
met_em.d01.2014-07-09_12:00:00.nc
met_em.d01.2014-07-09_18:00:00.nc
met_em.d01.2014-07-10_00:00:00.nc
met_em.d01.2014-07-10_06:00:00.nc
met_em.d01.2014-07-10_12:00:00.nc
met_em.d01.2014-07-10_18:00:00.nc
met_em.d01.2014-07-11_00:00:00.nc
—————————————————————————-
이제 WRF로 분석을 한다.
# mkdir ~/run_raccoon
# cp met_em* ~/run_raccoon
# cd ~/run_raccoon
# wrf_run_link
# cp /APP/ACO/WRF-MODEL/3.6.1/test/em_real/namelist.input .
# vi namelist.input
—————————————————————————-
&time_control
run_days = 3,
.
start_year = 2014, 2000, 2000,
start_month = 07, 01, 01,
start_day = 08, 24, 24,
start_hour = 00, 12, 12,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2014, 2000, 2000,
end_month = 07, 01, 01,
end_day = 11, 25, 25,
end_hour = 00, 12, 12,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
&domains
.
e_we = 134, 112, # namelist.wps 와 동일하게
e_sn = 111, 97, # namelist.wps 와 동일하게
.
—————————————————————————–
# ./real.exe
# cat rsl.error.0000 ;; 경계장, 초기장 생성 과정 에러 확인
# ls wrfbdy_d01 wrfinput_d01
해당 모델은 앞의 기본 케이스 보다 시간이 다소 걸리니..가급적 보유한 core 자원을
최대한 이용할 것..
# mpirun -np 16 ./wrf.exe
해석 과정 모니터링
# tail -f rsl.out.0000
Timing for main: time 2014-07-10_09:48:00 on domain 1: 0.08844 elapsed seconds
Timing for main: time 2014-07-10_09:51:00 on domain 1: 0.08584 elapsed seconds
Timing for main: time 2014-07-10_09:54:00 on domain 1: 0.08915 elapsed seconds
Timing for main: time 2014-07-10_09:57:00 on domain 1: 0.08459 elapsed seconds
Timing for main: time 2014-07-10_10:00:00 on domain 1: 0.08756 elapsed seconds
Timing for main: time 2014-07-10_10:03:00 on domain 1: 0.15790 elapsed seconds
Timing for main: time 2014-07-10_10:06:00 on domain 1: 0.08722 elapsed seconds
Timing for main: time 2014-07-10_10:09:00 on domain 1: 0.08467 elapsed seconds
Timing for main: time 2014-07-10_10:12:00 on domain 1: 0.08786 elapsed seconds
Timing for main: time 2014-07-10_10:15:00 on domain 1: 0.08479 elapsed seconds
Timing for main: time 2014-07-10_10:18:00 on domain 1: 0.08771 elapsed seconds
결과 확인
# ls wrfout_d*
wrfout_d01_2014-07-08_00\:00\:00
마지막으로 그래프 표출 ..
# cp ~/wrf_PressureLevel1.ncl .
# vi wrf_PressureLevel1.ncl
—————————————————————————–
.
a = addfile(“wrfout_d01_2014-07-08_00:00:00″,”r”)
.
type = ps
.
wks = gsn_open_wks(type,”HK_Raccoon”)
.
res@MainTitle = “Teragon ACO WRF”
.
pressure_levels = (/ 850./) ; 850hPa 고도의 내용만 생성
## 아래 부분은 삭제 ###
if ( pressure .eq. 700 ) then ; plot temp, height, wind barbs
opts_z@ContourParameters = (/ 30.0 /)
contour_height = wrf_contour(a,wks, z_plane,opts_z)
plot = wrf_map_overlays(a,wks,(/contour_tc,contour_height, \
vector/),pltres,mpres)
end if
if ( pressure .eq. 500 ) then ; plot temp, height, wind barbs
opts_z@ContourParameters = (/ 60.0 /)
contour_height = wrf_contour(a,wks, z_plane,opts_z)
plot = wrf_map_overlays(a,wks,(/contour_tc,contour_height, \
vector/),pltres,mpres)
end if
if ( pressure .eq. 300 ) then ; plot windspeed, height, wind barbs
opts_z@ContourParameters = (/ 60.0 /)
contour_height = wrf_contour(a,wks, z_plane,opts_z)
plot = wrf_map_overlays(a,wks,(/contour_spd,contour_height, \
vector/),pltres,mpres)
end if
##############################################################
.
—————————————————————————–
png 파일 변환 (움직이는 동영상 만들기 위해서..)
# convert HK_Raccoon.ps HK_Raccoon.png
동영상 만들기
# ffmpeg -r 6 -i Neoguri.%06d.png -c:v libx264 -pix_fmt yuv420p Teragon_wrf_0.mp4
# convert HK_Raccoon*.00*png HK_Raccoon.gif
– 2003년 태풍 매미 분석
NCEP 사이트에서 태풍 매미 grib 데이트를 다운 받는다. (너구리와 같은 방법)
매미가 한반도를 지나간 2003년 9월 9일부터 14일 사이의 데이터를 받으면 된다.
# mkdir /APP/ACO/WRF-MODEL/3.6.1/WPS/data_maemi
# cp download.csh /APP/ACO/WRF-MODEL/3.6.1/WPS/data_maemi
# cd /APP/ACO/WRF-MODEL/3.6.1/WPS/data_maemi
# csh download.csh <ucar password>
# cd ../
기존 너구리 데이터가 있을 경우 다른 곳으로 옮겨 둔다.
# mkdir old/neaguri
# mv FILE\:2000-01-2* met_em.d01.2000-01-2* geo_em.d0* old/meaguri
# cp namelist.wps old/meaguri
# vi namelist.wps
————————————————————————–
&share
wrf_core = ‘ARW’,
max_dom = 1,
start_date = ‘2003-09-09_12:00:00′,’2006-08-16_12:00:00’,
end_date = ‘2003-09-14_12:00:00′,’2006-08-16_12:00:00′,
interval_seconds = 21600
io_form_geogrid = 2,
/
&geogrid
parent_id = 1, 1,
parent_grid_ratio = 1, 3,
i_parent_start = 1, 31,
j_parent_start = 1, 17,
e_we = 134, 112,
e_sn = 111, 97,
geog_data_res = ’10m’,’2m’,
dx = 30000,
dy = 30000,
map_proj = ‘lambert’,
ref_lat = 36.00,
ref_lon = 125.00,
truelat1 = 20.0,
truelat2 = 40.0,
stand_lon = 125.0,
geog_data_path = ‘/APP/ACO/WRF-MODEL/3.6.1/WPS/geog’
/
&ungrib
out_format = ‘WPS’,
prefix = ‘FILE’,
/
&metgrid
fg_name = ‘FILE’
io_form_metgrid = 2,
/
—————————————————————————
# ./geogrid.exe
# ls -l geo_em.d01.nc
# ncview geo_em.d01.nc
# ./link_grib.csh data_maemi/fnl_200309*
# ls -l GRIBFILE.AA*
link 잘 되었는지 확인하고 ungrib.exe 실행
# ./ungrib.exe
Output 파일 생성 확인
# ls -1 FILE\:2003-09-*
이제 metgrid.exe 실행
# ./metgrid.exe
Output 파일 확인
# ls -1 met_em*.nc
WRF 분석
# mkdir ~/run_maemi
# cp met_em* ~/maemi
# cd ~/run_maemi
# wrf_run_link
# cp /APP/ACO/WRF-MODEL/3.6.1/test/em_real/namelist.input .
# vi namelist.input
—————————————————————————-
&time_control
run_days = 5,
.
start_year = 2003, 2000, 2000,
start_month = 09, 01, 01,
start_day = 09, 24, 24,
start_hour = 12, 12, 12,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2003, 2000, 2000,
end_month = 09, 01, 01,
end_day = 14, 25, 25,
end_hour = 12, 12, 12,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
.
// 만일 보다 많은 frame 의 해석 결과를 확인하고 싶을 경우
// 아래 history_interval, time_step 을 180분에서 60분으로 줄여준다.
history_interval = 180, 60, 60,
time_step = 180,
&domains
.
e_we = 134, 112,
e_sn = 111, 97,
—————————————————————————–
# ./real.exe
# cat rsl.error.0000 ;; 경계장, 초기장 생성 과정 에러 확인
# ls wrfbdy_d01 wrfinput_d01
# mpirun -np 16 ./wrf.exe
해석 과정 모니터링
# tail -f rsl.out.0000
결과 확인
# ls wrfout_d*
9. Vapor 을 이용한 3D 가시화 방법
Vapor 은 WRF, MOM, AM 등 다양한 대기 기상 해양 모델의 결과를 화려한 3D로
형태로 표현해 주는 가시화 도구이다.
Vapor을 통해 wrf의 결과인 wrfout 파일을 3D 형태로 확인하는 방법에 대해 간단히
설명하겠다.