반응형

     정보

    • 업무명     : 그라즈 HDF 형식인 Terra/MODIS 및 Aqua/MODIS 자료를 이용한 에어로졸 광학두께 가시화

    • 작성자     : 이상호

    • 작성일     : 2019-09-22

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

    • HDF 결과를 이해하기 위해 가시화 도구가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어

     

    [기능]

    • 파일명의 날짜 (UTC)를 KST 변환

    • 지상 관측소를 기준으로 시공간 일치

    • HDF 형식으로 가시화 

     

    [활용 자료]

    • 자료 : Terra/MODIS 및 Aqua/MODIS의 에어로졸 광학두께

    • 시간 해상도 : 하루 2회

    • 공간 해상도 : 3 km

    • 기간 : 2015년 01월 01일 - 2015년 12월 31일

     

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

    • [1 단계] 입력 자료에 대한 파일 읽기

    • [2 단계] 파일명 (MOD04_3K.A2013334.0255.006.2015071034636.hdf)에서 날짜 정보 추출 및 KST 변환

    • [3 단계] 배치 파일 (eos2dump, hdp dusmpsds)을 통해 위도, 경도, 에어로졸 광학두께 저장

    • [4 단계] 각 지상 관측소 (이어도/가거초/소청초 종합해양과학기지)를 기준으로 시공간 일치 및 자료 저장

    • [5 단계] 에어로졸 광학두께 및 지상 관측소 매핑

     

    [사용법]

    • 필요한 입력 자료를 동일 디렉터리 위치

    • 소스 코드를 실행(csh Visualization_Using_HDF_Form_of_Terra_Aqua_MODIS_AOD.csh)

    • 가시화 결과를 확인 

     

    [사용 OS]

    • Linux

     

    [사용 언어]

    • GrADS

    • Fortran

    • ShellScript (csh)

     

     소스 코드

    [명세]

    #!/bin/csh
    
    #rm -f 21.dat 22.dat 23.dat
    #rm -f FIG/*
    
    #set fn = `ls DATA/MOD04_3K/MOD04_3K*`
    set fn = `ls DATA/MYD04_3K/MYD04_3K*`
    
    foreach fn1 ($fn)
    
    #======================================================================
    #     Data handling
    #
    #     "year", "month", "day", "hour", "min", "sec", "Julian_Day"
    #=======================================================================
       set name = `echo $fn1:t | awk -F'[.]' '{print $1}' `
       set year = `echo $fn1:t | awk -F'[.]' '{print $2}' | cut -c 2-5`
       set jd = `echo $fn1:t | awk -F'[.]' '{print $2}' | cut -c 6-8`
       set hour = `echo $fn1:t | awk -F'[.]' '{print $3}' | cut -c 1-2`
       set min = `echo $fn1:t | awk -F'[.]' '{print $3}' | cut -c 3-4`
    
       set month2 = ( 01 02 03 04 05 06 07 08 09 10 11 12 )
       set day2   = ( 31 28 31 30 31 30 31 31 30 31 30 31 )
       set day3   = ( 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 )
    
       if (( ($year % 4 == 0) && ($year % 100 != 0) ) || $year % 400 == 0 ) set day2[2] = 29
    
       set jd2 = 1
       foreach month ($month2)
       foreach day ( $day3[1-$day2[$month]] )
          set JD2 = `printf "%03d" $jd2`
          if( $jd == $JD2 ) goto 10
          @ jd2 ++
       end 
       end
    
    
    10:
       @ hour = $hour + 9   # UTC --> KST
       if ($hour > 24) then
          @ day  = $day + 1
          @ hour = $hour - 24
       endif
    
       echo $fn1
       printf "%s %04d %03d %02d %02d %02d %02d \n" $name $year $jd $month $day $hour $min
    
       hdp dumpsds -h $fn1 > HEAD
       ./eos2dump -c1 $fn1 > read_lat2.dat
       ./eos2dump -c2 $fn1 > read_lon2.dat
       sed 's/,/ /g' read_lat2.dat > read_lat.dat
       sed 's/,/ /g' read_lon2.dat > read_lon.dat
       hdp dumpsds -d -i 12 -o var.dat -x $fn1
    
    #==================================
    #        Mean by 1, 4, 9 
    #===================================
    pgf90 Average_Over_Terra_Aqua_MODIS_Pixels_Relative_To_Ground_Station.f90  ;  a.out  
    
    #==================================
    #        plot
    #===================================
    set fn3 = `printf "%04d.%02d.%02d %02d:%02d" $year $month $day $hour $min` 
    
    cat >! 2.exec << EOF
       reinit
       open INPUT_GrADS/Map.ctl
       enable print 2.gx 
       set font 5
       set vpage 0  8.5 0 11
       set parea 0 8.5 2.0 10.0
       set mpdraw off
       set xlopts 1 6 0.18
       set ylopts 1 6 0.18
       set lat 31. 45.
       set lon 121. 135.
       set cmin 9999
       set cint 2
       set xlint 2
       set xlab %3.0f\`3.\`n\`5E\`n
       set ylint 2
       set ylab %2.0f\`3.\`n\`5N
       set grid on
       set grads off
       set display color white
       d t
    
       draw title Aerosol 3km [$fn3 KST]
    *set strsiz 0.15 0.15
    *draw string 3.5 1.4 Surface Solar Radiation [Wm\`a-2\`n]
       
       run INPUT_GrADS/color.gs data.dat  1 2 3 3
       run INPUT_GrADS/gbar.gs   0   4.25 1.0   0.28 1.4  8.0 1.0  17 116   0  5 0 5 0.5
    *run GrADS/gbar.gs   1   8.0 6.0    0.25 1.0   1.0 8.0  16 116   0 900 0 900 50
       
       run INPUT_GrADS/point_color.gs INPUT_GrADS/point.dat  1 2 3 3
       
       set rgb 16 0 0 0
       
    *  draw shp INPUT_GrADS/Map/NOAA/gshhg-shp-2.3.4/GSHHS_shp/f/GSHHS_f_L1.shp
       draw shp INPUT_GrADS/Map/Global_Administrative_Areas/V2.8_map/gadm28_adm0.shp
    *   draw shp INPUT_GrADS/Map/Global_Administrative_Areas/V2.8_map/gadm28_adm1.shp
    *   draw shp INPUT_GrADS/Map/Global_Administrative_Areas/V2.8_map/gadm28_adm2.shp
       
       print
       disable print
       !gxps -c -i 2.gx -o 2.ps
       quit
    EOF
    
    grads -bpc 'exec 2.exec'
    convert 2.ps 2.gif
    #display  2.gif 
    
    
    #==================================
    #        OUTPUT
    #===================================
    set fn4 = `printf "%s_%04d_%02d%02d_%02d%02d" $name $year $month $day $hour $min` 
    echo $fn4
    
          mv -f 2.gif FIG/${fn4}.gif
    
          set num = 21
          while ($num <= 23)
             echo $fn4  >> ${num}.dat
             cat fort.${num} >> ${num}.dat
             echo  >> ${num}.dat
             @ num ++
          end
    
    #   printf "%s %04d %03d %02d %02d %02d %02d \n" $name $year $jd $month $day $hour $min
    
    end  #  fn1
    
    mv -f 21.dat ${name}_Ieodo.dat
    mv -f 22.dat ${name}_Gageocho.dat
    mv -f 23.dat ${name}_Socheongcho.dat
    
    rm -f 2.exec 2.gx 2.ps data.dat fort.*  read_*  var.dat  HEAD

     

    [GitHub Gist]

     

     결과

    • 2015년 10월 04일 Terra/MODIS 자료를 이용한 에어로졸광학두께 가시화

    그림. 2015년 10월 04일 Terra/MODIS 자료를 이용한 에어로졸광학두께 가시화.

     

    • 2015년 07월 14일 Terra/MODIS 자료를 이용한 에어로졸광학두께 가시화

    그림. 2015년 07월 14일 Terra/MODIS 자료를 이용한 에어로졸광학두께 가시화.

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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