반응형

     정보

    • 업무명     : 전지구 기온 자료를 이용한 가시화 : 기본 구조 및 세부 내용

    • 작성자     : 이상호

    • 작성일     : 2020-01-15

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

    • NCL (NCAR Command Language)은 미국의 NCAR (National Center for Atmospheric Research)에서 개발된 언어로서 지구과학/대기과학 분야에서 특화되었습니다. 이는 다양한 분야에서 널리 사용되는 Matlab과 비교할 때 라이브러리를 통해 쉽게 계산할 수 있습니다.

    • 특히 예전에 자주 사용되는 소프트웨어인 GrADS는 간단한 인터페이스로 초보자도 빨리 익힐 수 있으나 소프트웨어의 유연성이 떨어집니다.

    • 오늘 포스팅은 전지구 기온 자료를 이용한 가시화를 소개합니다.

     

     

    [특징]

    • NCL를 학습하기 위해서 리눅스 환경 구축이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

    [기능]

    • 기본 구조
    • 세부 내용

     

    [활용 자료]

    • 파일명 : air.2014.nc

    • 자료 종류 : NCEP 재분석 자료 중에서 기온

    • 확장자 : nc

    • 기간 : 2014년

    • 제공처 : 미국 NOAA 공식 홈페이지 (ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.dailyavgs/pressure/air.2014.nc)

    • 자료가 없을 경우 "[NCL] NetCDF 형식 및 변수 구조"에서 링크를 통해 다운로드 받으시면 됩니다.

     

    [NCL] NetCDF 형식 및 NCL 변수 구조

    정보 업무명 : NetCDF 형식 및 NCL 구조 작성자 : 이상호 작성일 : 2020-02-27 설 명 : 수정이력 : 내용 [개요] 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다. NCL (NCAR Command Language)은 미..

    shlee1990.tistory.com

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 없음

     

    [사용 OS]

    • Linux (CentOS v7.0)

    • VMware Workstation Pro v15.5

     

    [사용 언어]

    • NCL v6.3.0

     

     세부 내용

    [기본 구조]

    • 해당 소스 코드 가시화에 필요한 기본 구조를 명확하게 나타내고 있습니다.

    • 1) 캔버스인 Work Station (wks)을 정의합니다.

    ; Work Station
    wks = gsn_open_wks("png", "AirTempMap")

     

    • 2) NetCDF 파일을 읽고 직접 필요한 변수를 정의합니다.

    ; Variable
    ncFile = addfile("air.2014.nc" , "r")
    Temp = ncFile->air

     

    • 3) 가시화에 필요한 옵션을 설정합니다.

    ; Plot control
    res = True

     

    • 4) Work Station에 가시화합니다.

    ; Plot command
    plot = gsn_csm_contour_map_ce(wks , Temp(0, 0, :, : ), res)

     

    • 소스 코드에서 주석을 제외하면 10줄 내외로 기온  맵핑을 할 수 있습니다.

    • 기본 구조의 자세한 설명은 하기에 단계별로 설명하고 있습니다. 

     

    [전체]

    begin
    
          ; Work Station
          wks = gsn_open_wks("png", "AirTempMap")
    
          ; Variable
          ncFile = addfile("air.2014.nc" , "r")
          Temp = ncFile->air
    
          ; Plot control
          res = True
    
          ; Plot command
          plot = gsn_csm_contour_map_ce(wks , Temp(0, 0, :, : ), res)
    
          print("All Done.")
    
    end

     

     

    begin
          ; Work Station
          wks_type = "pdf"
          
          ; set the aspect ratio to 16:9, fitting your screen in full
          wks_type@wkPaperWidthF  = 8.0
          wks_type@wkPaperHeightF = 4.5
          wks = gsn_open_wks(wks_type, "AirTempMap2")
          
          ; Variable
          ncFile = addfile("air.2014.nc", "r")
          
          ; load only part of variables, increase effeciency
          Temp = ncFile->air(0, :, :, : )
          
          ; Plot resources
          res = True
          res@gsnMaximize = True
          res@gsnPaperOrientation = "portrait"
          
          ; zoom in to Asia
          res@mpCenterLonF = 180.
          res@mpMinLatF = 0.
          res@mpMaxLatF = 80.
          res@mpMinLonF = 60.
          res@mpMaxLonF = 270.
          
          ; for shading plot
          res@cnFillOn = True
          res@cnLinesOn = False
          
          ; Plot command
          plot = gsn_csm_contour_map_ce(wks,Temp(0, :, : ), res)
          plot = gsn_csm_contour_map_ce(wks,Temp(5, :, : ), res)
          plot = gsn_csm_contour_map_ce(wks,Temp(10, :, : ), res)
          
          print("All Done.")
    end

     

    [1 단계] Work Station

    •  캔버스의 형식이 PNG, JPG, PDF, EPS 또는 X11 창을 통해 직접 표시되는지 NCL에 그리기 전에 캔버스를 정의해야 합니다. 여기서 페이지 크기, 해상도, 종횡비, 가로/세로 너비 등을 지정할 수도 있습니다.

    • 연구 목적으로 가장 편리한 형식은 PDF 파일입니다. 이는 학술 논문에서 시계열 또는 다중 그림을 한 패널에 그려야하기 때문입니다. 또한 다차원 구조을 2차원 평면 그림으로 이해하기 위해 하나의 PDF 파일로 저장할 수 있습니다. 이와 더불어 개인용 컴퓨터에서는 마우스 휠 또는 키보드 화살표 키를 사용하여 유사한 애니메이션 효과를 얻을 수 있습니다.

    • 이러한 PDF는 EPS와 같은 벡터 파일로서 앨리어싱없이 무한대로 확대할 수 있습니다. 이는 연구 분석 단계에서 매우 유용합니다.

    • 아래 소스 코드와 같이 캔버스를 정의하는 함수는 gsn_open_wks이고 1번째 전달 인자는 형식 (wks_type)이고 2번째는 파일 이름을 의미합니다. 즉 PDF 형식의 워크스테이션 (Work Station)을 설정할 경우 다음과 같은 전달 인자가 필요합니다.

    • 속성 정보의 경우 wks_type@으로 지정할 수 있습니다.

    ; Work Station
    wks_type = "pdf"
    
    ; set the aspect ratio to 16:9, fitting your screen in full
    wks_type@wkPaperWidthF  = 8.0
    wks_type@wkPaperHeightF = 4.5
    wks = gsn_open_wks(wks_type, "AirTempMap2")

     

    [2 단계] 변수

    • 상기 활용자료에서와 같이 1년 동안의 NetCDF 파일 (air.2014.nc)이 있습니다. 

    • 1년 중 1월 1일 사례에 대해서만 ncFile->air 명령어를 통해 기온 자료를 추출하고자 합니다. 이 경우 한번에 1년치 자료를 읽으면 작업 효율성이 저하될 수 있습니다.

    • 그에 따른 메모리 낭비를 방지하고 실행 속도를 높이는 방법은 필요한 부분만 읽는 것입니다. 크기를 지정하면 1월 1일에 3 차원 (Z x Y x X) 자료만 읽을 수 있습니다.

    • 즉 기온의 경우 NetCDF 형식으로 4 차원 (시간, 레벨, 위도, 경도)으로 구성되어 있기 때문에 Temp = ncFile->air (0, :, :, :, :) 명령어를 통해 추출합니다. 여기서 0은 1번째 인덱스를 나타내고 ":" 전체 인덱스를 의미합니다. 예를 들면 데이터의 맨 하단 3개 층만 필요한 경우 Temp = ncFile->air(0, 0:3, :, :)으로 추출하고 printVarSummary(Temp)으로 변수 정보를 확인할 수 있습니다.

    • 추가로 Temp 변수는 .nc 파일에서 직접 읽기 때문에 변수 자체에 이미 좌표 정보가 포함되어 있습니다. 그 결과 가시화할 경우 x 및 y축을 지정할 필요가 없습니다. 즉 NCL에서 자동으로 판단하고 최적의 설정을 합니다.

    ; Variable
    ncFile = addfile("air.2014.nc", "r")
    
    ; load only part of variables, increase effeciency
    Temp = ncFile->air(0, :, :, : )

     

    • 그러나 그림 그릴 변수가 계산 (예 : 두 시점에서의 온도 변화)하거나 서로 다른 형식의 이진 자료에서 변수를 읽는 경우 그렇지 않습니다. 즉 좌표축의 정보를 수동으로 지정해야합니다.

    • "[NCL] 대화식 및 스크립트 모드 소개"에서 설명한 바와 같이 !&를 사용해야합니다. 변수에 적절한 좌표축 정보를 확인하기 위해 printVarSummary를 사용해야 합니다.

     

    [NCL] 대화식 및 스크립트 모드 소개

    정보 업무명 : 대화식 및 스크립트 모드 소개 작성자 : 이상호 작성일 : 2020-02-25 설 명 : 수정이력 : 내용 [개요] 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다. NCL (NCAR Command Language)..

    shlee1990.tistory.com

     

    [3 단계] 그림 가시화

    • NCL에서 모든 가시화 설정은 논리형 변수 (True 또는 False)에 의해 제어됩니다. res = True 또는 False는 사용자 설정에 따라 사용 여부를 제어 할 수 있습니다. 모든 기본 설정은 False입니다.

    • 그리고 각 설정 변수는 @을 통해 속성을 추가합니다. 예를 들어 res@mpMinLatF, res@mpMaxLatF, res@mpMinLonF, res@mpMaxLonF는 지도의 위/경도 범위를 설정할 수 있습니다. 여기서 맵의 경도가 0도이고 경도의 범위가 -180에서 180도가 기본값입니다.

    • 대서양의 지도를 가시할 경우 mpMinLonF를 -100으로, mpMaxLonF를 0으로 설정할 수 있습니다. 그러나 태평양에서는 경도 -180도 및 경도 180 도의 데이터를 결합해야 합니다.

    • 그렇지 않으면 설정이 비논리적으로 됩니다. 따라서 지도의 중심을 180도로 이동해야합니다. res@mpCenterLonF = 180. [ 방귀 대화 영역] 60 ~ 270도를 그리려면 화면 중앙에서 mpCenterLonF를 165 도로, 180도로 설정하지 않겠습니까? 물론, 그것은 165로 설정 될 수 있습니다 .

    • 중심 경도를 180도로 설정하면 경도가 0에서 360까지 계산되고 좌측 (우측) 경계가 0 (360)임을 NCL에 알립니다. 중심을 165도로 설정하면 좌측 (우측) 경계가 -15 (345)로 설정됩니다.

    • 또 다른 설정은 Test03.ncl 그려진 윤곽을 Test04.ncl 음영에 채우고 등고선을 삭제하고 색상 블록의 일부만 남겨 둡니다.

    • res@cnFillOn = True 및 res@cnLinesOn = False은 윤곽 및 음영 설정 여부를 선ㅌ에 대한 자세한 내용은 나중에 설명 하며이 장에서는 전체 아키텍처의 개념을 강조합니다.

    • NCL에서 대/소문자는 다르기 때문에 mpMinLonF와 같은 설정은 마음대로 MPminLONf로 변경할 수 없습니다. 실제로 이러한 대/소 문자열에는 많은 유용한 메시지가 숨겨져 있습니다.

    • 이전 소개에서 mp 시작 부분의 설정은 맵과 관련되어 있고 cn은  윤곽을 설정합니다.

    • gsn에 의해 도입되지 않은 2가지 다른 설정이 있는데, 이는 전체 그림과 관련된 고급 설정입니다. 따라서 1번째 하위 문자열 (하위 문자열)은 큰 분류이며 다음 하위 문자열은 길이에 의존하지 않지만 모두 대문자로 구분되며 대표적인 의미를 갖습니다. 예를 들어 mpCenterLonF (맵, 중심, 경도, 값) 및cnFillOn (등고선, 채우기, 스위치)은 일반적으로 F로 끝나는 매개 변수는 대부분 부동 소수점 값이고 On으로 끝나는 매개 변수는 스위치이므로 논리 변수 True / False.

    • NCL은 이러한 방식으로 수천 개의 매개 변수를 설계하고 분류하여 사용자에게 코드를 이해하는 데 도움이 될뿐만 아니라 사용자가 필요한 매개 변수를 검색 할 수 있습니다.

    ; Plot resources
    res = True
    res@gsnMaximize = True
    res@gsnPaperOrientation = "portrait"
    
    ; zoom in to Asia
    res@mpCenterLonF = 180.
    res@mpMinLatF = 0.
    res@mpMaxLatF = 80.
    res@mpMinLonF = 60.
    res@mpMaxLonF = 270.
    
    ; for shading plot
    res@cnFillOn = True
    res@cnLinesOn = False

     

    [4 단계] 가시화 명령어

    • WorkStation 및 리소스를 설정 한 후 그래프를 "그리기"하는 실제 작업은 실제로 매우 간단합니다. 일반적으로 한 줄의 지침으로 만 해결할 수 있습니다.

       

    • NCL에서 모든 종류의 다이어그램에는 자체 독립적 인 기능이 있습니다. "드로우"작업을 수행 할 때 매핑 기능의 입력에는 일반적으로 세 개만 필요합니다. Where (WorkStation), What (Variables), How (Resources).

       

    • 앞서 소스코드에서 gsn_csm_contour_map_ce (wks, Temp (0, :, :), res)는 평면 맵을 처리하는 데 사용되며 ce는원통형 투영법인 Cylindrical Equidistant를 나타냅니다.

       

    • 자주 사용하는 명령어는 다음과 같습니다.

       

      • gsn_csm_vector_map_ce : 벡터 화살표 (예. 바람의 속도와 방향)

         

      • gsn_csm_contour_map_polar : 북/남극면

         

      • gsn_csm_pres_hgt : 해들리 셀과 같은 수직면

         

      • gsn_csm_contour : 등고선

         

      • gsn_csm_xy : 꺾은 선형

    ; Plot command
    plot = gsn_csm_contour_map_ce(wks,Temp(0, :, : ), res)
    plot = gsn_csm_contour_map_ce(wks,Temp(5, :, : ), res)
    plot = gsn_csm_contour_map_ce(wks,Temp(10, :, : ), res)

     

    [전체]

    begin
          ; Work Station
          wks_type = "pdf"
          
          ; set the aspect ratio to 16:9, fitting your screen in full
          wks_type@wkPaperWidthF  = 8.0
          wks_type@wkPaperHeightF = 4.5
          wks = gsn_open_wks(wks_type, "AirTempMap2")
          
          ; Variable
          ncFile = addfile("air.2014.nc", "r")
          
          ; load only part of variables, increase effeciency
          Temp = ncFile->air(0, :, :, : )
          
          ; Plot resources
          res = True
          res@gsnMaximize = True
          res@gsnPaperOrientation = "portrait"
          
          ; zoom in to Asia
          res@mpCenterLonF = 180.
          res@mpMinLatF = 0.
          res@mpMaxLatF = 80.
          res@mpMinLonF = 60.
          res@mpMaxLonF = 270.
          
          ; for shading plot
          res@cnFillOn = True
          res@cnLinesOn = False
          
          ; Plot command
          plot = gsn_csm_contour_map_ce(wks,Temp(0, :, : ), res)
          plot = gsn_csm_contour_map_ce(wks,Temp(5, :, : ), res)
          plot = gsn_csm_contour_map_ce(wks,Temp(10, :, : ), res)
          
          print("All Done.")
    end

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기