WRF | bash > ncdump로 XLAT와 XLONG을 텍스트로 출력 | Matplotlib로 표시

운영 환경
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
NCAR Command Language Version 6.3.0
for WRF3.7.1, WPS3.7.1
  openmpi-1.8.x86_64 とその-devel
  mpich.x86_64 3.1-5.el6とその-devel
  gcc version 4.4.7 (とgfortran)
for WRF3.9, WPS3.9
  Open MPI v2.1.1
  gcc version 4.9.2 (とgfortran; devtoolset-3使用)
 NetCDF v4.4.1.1, NetCDF (Fortran API) v4.4.4
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
date (GNU coreutils) 8.4 
tmux 1.6-3.el6

WRF(Weather Research and Forecasting Model)와 그 전처리인 WPS, 및 WRF의 후속 처리의 F***T 관련.

WRF 실행 후의 wrfout*** 파일로부터 위도 경도 정보를 취득한다.
  • ncdump 사용
  • 취득 사이즈는 대상 범위의 사이즈 75 x 75

  • code



    CODE_171116/extract_XLAT_XLONG_180228_exec
    #!/usr/bin/env bash
    set -eu  # just in case
    
    # 5625 = 75 x 75 (west_east * south_north)
    
    WRF_D02=$1
    
    ncdump -v XLAT $WRF_D02 | grep -A 2000 "XLAT =" | tr ", " "\n" | grep "\." | head -n 5625 > dat.XLAT
    ncdump -v XLONG $WRF_D02 | grep -A 2000 "XLONG =" | tr ", " "\n" | grep "\." | head -n 5625 > dat.XLONG
    
    $ bash CODE_171116/extract_XLAT_XLONG_180228_exec wrfout_d02_2017-11-01_00\:00\:00 
    [dat.XLAT] is created
    [dat.XLONG] is created
    
  • 1 행에 6 개 정도의 콤마 첨부 수치 열로부터 tr로 개행하고있다
  • grep -A 2000의 2000은 5625/6을 초과하는 임의의 숫자로 좋다

  • 출력 파일



    다음과 같은 5625행의 파일이 출력된다.
    $ head dat.XLAT 
    30.58262
    30.58724
    30.59171
    30.59607
    30.60028
    30.60435
    30.6083
    30.61209
    30.61576
    30.61929
    

    Matplotlib에서의 표시



    위의 파일을 Jupyter + Matplotlib가 설정된 Ubuntu에 복사했습니다.

    운영 환경
    Ubuntu 16.04.3 LTS desktop amd64
    IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
    tmux 2.1-3build1
    Python 2.7.12
    Python 3.5.2
    

    관련 : Jupyter | Matplotlib > 2차원 데이터 시각화 > imshow() | scatter()

    코드 v0.1



    mapLatitudeLongitude_WRF_180228.ipynb
    %matplotlib inline
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    lat = np.genfromtxt('dat.XLAT')
    lon = np.genfromtxt('dat.XLONG')
    print(lat)
    print(lon)
    
    plt.scatter(lon, lat)
    
    



    code v0.2 > 참조 지점 추가



    mapLatitudeLongitude_WRF_180228.ipynb
    %matplotlib inline
    
    import numpy as np
    import matplotlib.pyplot as plt
    #import matplotlib.cm as cm
    
    lat = np.genfromtxt('dat.XLAT')
    lon = np.genfromtxt('dat.XLONG')
    print(lat)
    print(lon)
    
    plt.scatter(lon, lat, color='blue')
    
    regx = np.array([135.0, 135.0, 135.0, 135.0])
    regy = np.array([30.0, 31.0, 32.0, 33.0])
    plt.scatter(regx, regy, color='red')
    
    



    코드 v0.3



    코드는 미게재로 하지만, 이하의 처리를 추가했다.
  • calc_region()이라는 함수 추가
  • regx [] 및 regy []에 F***T의 네 모퉁이의 위도 경도를 계산하고 tuple로 반환합니다.


  • 이 처리에서 F***T의 범위가 WRF의 데이터 범위에 맞지 않는 것을 시각화할 수 있게 되었다.
    Lambert에서의 projection에 의해 위도 경도의 범위가 맞지 않게 되었을지도 모른다.

    시각화는 중요



    데이터가 범위 내에 있는지 여부는 수치만 봐도 파악하기 어렵다.
    장래에 같은 처리를 실시하는 경우, 단시간에 실패를 알 수 있는 구조를 만들어 두는 것이 좋다고 생각한다.

    관련


  • WRF > 후속 처리 > 처리의 위도 경도가 반픽셀 편차
  • 좋은 웹페이지 즐겨찾기