WRF 디폴트 케이스 실험 구동 : real.exe, wrf.exe, 간단한 지도화
발췌 : http://eroth.egloos.com/4173762
지난번 작업을 통해 WPS 폴더에 아래와 같이 met_em.d01.xxxx-xx-xx_xx:xx:xx.nc 파일을 생성했습니다.
그러면 WRF 디렉토리에서 실제 작업을 진행해봅시다. 일단 튜토리얼처럼 test/em_real 디렉토리에서 작업합니다.
cd $HOME/WRF/WRFV3/test/em_real
ls
파일 목록을 보면, 많은 파일들이 있지만, 중요한 파일에 대해 설명을 드리면
wrf.exe – 실제 모델을 실행하는 파일입니다.
real.exe – WPS에 생성한 met_em 파일을 연직적으로 내삽하는 프로그램입니다. 실제 케이스에서는 필요하겠지요.
namelist.input – wrf 모델을 돌리는 환경 설정이 담긴 파일입니다. ( 모델 영역, 적분 기간, 사용할 피직스 등)
그러면 작업 처리를 위해 일단 met_em파일들을 이 폴더로 링크시킵시다.
ln -sf $HOME/WRF/WPS/met_em* .
ls -ltrh met_em*
아래와 같이 파일이 링크되었습니다.
디폴트 케이스는 namelist.input를 수정할 필요가 없습니다만.
그래도 한 번 namelist.input 을 열어보겠습니다.
gedit namelist.input
먼저 &Time_control 부분은 모델 시작 / 종료 시간, 적분 결과 저장 간격 등을 다룹니다.
&domain은 모델 영역과 관련되며, WPS와 동일하게 맞춰주시면 됩니다.
&physics는 모델에 사용할 피직스인데, user-guide 보시면 엄청나게 많습니다.
참고로 더 추가하거나 뺄 수 있습니다. 무조건 유저 가이드를 보시면 좋습니다.
&dynamics는 역학코어 관련된 부분이며, 나머지는 생략합니다.
그냥 저장하지 않고 닫아주시기 바랍니다.
그러면 이제 real.exe를 이용하여 모델에 이용할 초기장/경계장을 생성하도록 하겠습니다.
./real.exe
를 입력하시면
starting wrf task 0 of 1
가 뜨고, 금방 작업이 완료됩니다(디폴트 케이스는 별로 데이터가 없으니..)
ls -ltrh
하시면 새로운 파일이 생성된 것을 볼 수 있습니다.
wrfinput_d01 – 초기장
wrfbdy_d01 – 경계장
모델 도메인이 여러개인 경우 d02, d03의 형태로 등장하기도 합니다.
rsl.out.0000
rsl.error.0000 – 작업 결과가 저장됩니다. 보통 rsl.error.0000파일을 많이 봅니다.
( serial로 컴파일 하신 경우는 이 내용이 모두 화면에 출력됩니다..)
gedit rsl.error.0000
를 입력하고 파일의 마지막 부분을 확인하여 제대로 작업이 수행되었는지 확인합니다.
그러면 이제 마지막으로 모델을 돌리는 것만 남았습니다. 일단 gedit를 닫으시고,
1. serial 로 컴파일 or MPI 사용 컴파일했으나 단일 CPU만 사용하고자 한다?
./wrf.exe
를 입력합니다.
단 저의 경우에는, 얼마나 시간이 소요되는지 확인하기 위해서 앞에 time 명령어를 붙여 실행하도록 하겠습니다.
테스트 케이스의 경우, 단일 cpu를 사용했을 때 약 8분 정도가 걸리네요.
ls -ltrh
을 입력하여 생성된 파일을 확인합시다.
wrfout_d0x_xxxx-xx-xx_xx:xx:xx 파일이 생성되었으며, 이 파일이 모델 수행의 결과물입니다.
rsl.error.0000과 rsl.out.0000파일이 갱신되었으며, 모델 적분 당시의 정보를 포함합니다.
gedit rsl.error.0000
을 입력하고 맨 마지막으로 이동해 모델이 성공적으로 적분을 수행했는지 살펴봅시다.
SUCCESS COMPLETE WRF
성공했네요. 3분마다 적분시에 약 1.8초가 걸리고 가끔은 3초도 걸리고 하네요.
2. MPI 사용 컴파일했으니 여러 CPU를 사용하겠다 –> mpirun 커맨드를 활용합니다.
mpirun 커맨드의 경우 -np 옵션을 통해 사용할 cpu의 갯수를 지정해줄 수 있습니다.
현재 사용하는 pc는 듀얼코어이니 -np 2를 옵션으로 주겠습니다.
mpirun -np 2 ./wrf.exe
를 입력합니다.
단 저의 경우에는, 얼마나 시간이 소요되는지 확인하기 위해서 앞에 time 명령어를 붙여 실행하도록 하겠습니다.
테스트 케이스의 경우, 2개 cpu를 사용했을 때 약 3분 이내에 작업이 완료됩니다.
ls -ltrh
을 입력하여 생성된 파일을 확인합시다.
wrfout_d0x_xxxx-xx-xx_xx:xx:xx 파일이 생성되었으며, 이 파일이 모델 수행의 결과물입니다.
rsl.error.0000과 rsl.out.0000파일이 갱신되었으며, 모델 적분 당시의 정보를 포함합니다.
rsl.error.0001과 rsl.out.0001파일이 생성됩니다(사용한 cpu갯수만큼 파일이 등장하나 중요한 건 0000 파일 입니다).
gedit rsl.error.0000
을 입력하고 맨 마지막으로 이동해 모델이 성공적으로 적분을 수행했는지 살펴봅시다.
SUCCESS COMPLETE WRF
성공했습니다. 모델 기준의로 3분 적분시마다 약 0.7초가 걸리고 가끔은 1.1초도 걸리기도 하네요.
다음은 모델을 제대로 돌린 것이 맞는지 ncl을 이용하여 결과물을 표출하도록 하겠습니다.
아래 링크를 클릭하여 WRF 홈페이지의 ncl script example: pressure level을 엽니다.
웹페이지에서 wrf_PressureLevel1.ncl 파일을 다운받습니다.
( 커서를 위치시킨 후에 마우스 오른쪽을 누르고, save Link as를 누른 후, WRF/test/em_real에 저장하거나
copy link location한후에 wget 명령어를 이용하세요.)
그러면 wrfout 파일과 wrf_PressureLevel1.ncl이 같은 디렉토리인 em_real에 있게 됩니다.
여기서
gedit wrf_PressureLevel1.ncl
을 입력하여 ncl 스크립트를 열고 먼저 13번째 줄의 경로를 현재 디렉토리로 수정합니다.(아래처럼 앞의 ../ 를 삭제합니다.)
a = addfile(“wrfout_d01_2000-01-24_12:00:00.nc”,”r”)
버그인지, 라이브러리 오류인지 현재 설정 기준으로 ncl에서 x11로 직접 출력은 그림이 제대로 그려지지 않습니다.
(나중에 문제점을 확인하면, 그 때 업로드 하겠습니다.
다음으로는 저장 방식을 ps(postscript)로 설정하기 위해서 17줄의 맨 앞에 세미콜론을 추가합니다.( ;는 주석 처리입니다. ncl)
; type=”x11″
그리고 19줄의 맨 앞 세미콜론을 제거합니다.
type = “ps”
아래와 같이 수정되었다면 저장하고 에디터를 닫으신 후에,
ncl wrf_PressureLevel1.ncl
을 입력합니다.
작업이 완료된 이후에는 탐색기로 이동하여 plt1_Pressurelevel1.ps 파일을 엽니다.
위와 같이 그림이 표출됩니다. 이 그림을 스크립트 링크가 있는 곳의 그림과 비교하세요.
가장 먼저 나오는 850hPa 등압면 변수 표출입니다.
(포트란 컴파일러에 따라 속도/계산 값 등의 차이가 있고, ncl의 환경 설정이 다르기에 완전히 똑같은 결과는 나오기 힘들지만 거의 비슷합니다.)
튜토리얼 홈페이지에 있는 예시 케이스를 모두 돌려보시면, 어느 정도 감이 잡히실 겁니다(?)
그래도.. 다음 포스팅에는 NCEP FNL자료를 이용하여, 동아시아에서 한 번 모델을 돌려보도록 하겠습니다.