[GrADS, ShellScript] 그라즈 HDF 형식인 Terra/MODIS 및 Aqua/MODIS 자료를 이용한 에어로졸 광학두께 가시화

 정보

  • 업무명     : 그라즈 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