[Shell Script] 쉘 스크립트 복사 전달 모수화 모델의 투과율 계산을 위한 온도보정 계수 산출

 정보

  • 업무명    : 쉘 스크립트 복사 전달 모수화 모델의 투과율 계산을 위한 온도보정 계수 산출

  • 작성자    : 이상호

  • 작성일    : 2019-08-25

  • 설   명    :

  • 수정이력 :

 

 내용

[특징]

  • 지구 대기에서의 복사 과정을 모수화하기 위하여 개발되고 있는 모델의 투과율을 개선하기 위한 프로그램 

  • 투과율의 경우 대기 중 기체마다 연직 분포가 다르며 기층마다의 기압과 온도에 따라서도 흡수량이 달라지기 때문에 모수화 모델에서 투과율을 개선하기 위해서는 입력되는 기체에 따라 기압과 온도 보정 필요

  • 따라서 투과율을 개선하기 위해 최신 HITRAN(High resolution transmission molecular absorption database) 자료를 이용하여 얻어진 200 K, 250 K, 300 K에서의 temperature scaling factor를 이용한 온도보정 계수를 산출

 

[기능]

  • 선형 상세 모델 (Line By Line)각 기체별 (H2O, CO2,)HITRAN 자료를 입력하여 계산되어진 temperature scaling factor(f)를 이용하여 다음과 같은 수식을 통해 온도보정 계수인 를 계산

  • 에서 200, 250, 300 K에 해당하는 온도이며 GNUplot을 이용하여 를 계산

  • 또한 기존 모수화 모델에서 사용되고 있는 , 와 비교하기 쉽게 gif 파일로 그림을 표출하게 된다.

 

[사용법]

  • 각 기체마다의 개선 전/후 입력 자료 (OLD.dat, NEW.dat)와 실행 프로그램인 Regression_coefficient.csh를 같은 디렉터리에 저장

  • 실행 프로그램은 상단 설정에서 N=1(H2O), N=2(CO2)에 따라 변경할 수 있고, 지금은 H2O, CO2을 모두 실행

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

  • 개선 전/후 자료 (OLD.out, NEW.out)가 생성되고 여기서 개선 전 자료의 2열은 의 회귀계수, 3열은 의 회귀계수

  • NEW.out, OLD.out의 결과는 프로그램을 통하여 그림(H2O.gif, CO2..gif)으로 표출되며 개선 전/후를 확인

 

[사용 OS]

  • Linux

 

[사용 언어]

  • ShellScript (csh)

  • Gnuplot

 

 

 소스 코드

#!/bin/csh
#****************** Option *************************
foreach N ( 1 2 ) #*
# #*
# H2O = 1 #*
# CO2 = 2 #*
#******************* Result ************************
# OLD.dat NEW.dat *
# Alpha_old Beta_old Alpha_new Alpha_new *
#*****************************************************
set NAME = ( H2O CO2 )
set H2O = ( 1 2 3 4 5 6 7 8 9 10 )
set CO2 = ( 1 2 3 4 5 )
rm -f ${NAME[$N]}_old.out ${NAME[$N]}_new.out
foreach NUM ( `eval echo \${$NAME[$N]} `)
set NUM2 = `echo 1 + $NUM | bc`
#************************ OLD *****************************************
rm -f fit.log
gnuplot << EOF
set terminal post enhanced color font "Time-Roman, 18" background rgb "white"
a = 1 ; b = 1
f(x) = 1.0 + (a*(x-250.0)) + (b*((x-250.0)**2.0))
fit f(x) "${NAME[$N]}_OLD.dat" u 1:${NUM2} via a, b
EOF
set Alpha = `sed -n '30p' < fit.log | awk '{print $3}'`
set Beta = `sed -n '31p' < fit.log | awk '{print $3}'`
echo $NUM $Alpha $Beta > fort.1
cat fort.1 >> ${NAME[$N]}_old.out
#************************ NEW *****************************************
rm -f fit.log
gnuplot << EOF
set terminal post enhanced color font "Time-Roman, 18" background rgb "white"
a = 1 ; b = 1
f(x) = 1.0 + (a*(x-250.0)) + (b*((x-250.0)**2.0))
fit f(x) "${NAME[$N]}_NEW.dat" u 1:${NUM2} via a, b
EOF
set Alpha2 = `sed -n '30p' < fit.log | awk '{print $3}'`
set Beta2 = `sed -n '31p' < fit.log | awk '{print $3}'`
echo $NUM $Alpha2 $Beta2 > fort.1
cat fort.1 >> ${NAME[$N]}_new.out
end
#************************ Graph *****************************************
gnuplot << EOF
set terminal post enhanced color font "Time-Roman, 18" background rgb "white"
set output "Total.gif"
set xtic 1
set format y "%.1t x 10^{%T}"
set multiplot
set size 1, 0.5
set origin 0, 0.5
set title "Regression coefficient of temperature scaling factor"
set title font "bold, 24" textcolor rgb "black"
plot "${NAME[$N]}_old.out" u 1:2 w l lc "red" t "Alpha_{old}" ,\
"${NAME[$N]}_new.out" u 1:2 w l lc "blue" t "Alpha_{new}"
set size 1, 0.5
set origin 0, 0
set notitle
set xlabel "Band"
set xlabel font "bold, 18" textcolor rgb "black"
plot "${NAME[$N]}_old.out" u 1:3 w l lc "red" t "Beta_{old}" ,\
"${NAME[$N]}_new.out" u 1:3 w l lc "blue" t "Beta_{new}"
unset multiplot
quit
EOF
rm -f fort.1 fit.log
mogrify -rotate 90 Total.gif
#display Total.gif
mv -f Total.gif ${NAME[$N]}.gif
end

 

 결과

  • H2O 결과

etc-image-0

 

  • CO2 결과

etc-image-1

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

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

  • sangho.lee.1990@gmail.com

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

  • saimang0804@gmail.com