반응형

     정보

    • 업무명    : 그누플롯 이어도 종합해양과학기지에서의 일사량 관측 자료를 이용한 자료 전처리 및 운고계로부터 운량 및 운고 시계열 가시화

    • 작성자    : 이상호

    • 작성일    : 2020-05-04

    • 설   명    :

    • 수정이력 :

     

     내용

    [개요]

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

    • 태양 복사는 생명체 생존 및 지구 시스템 유지를 위한 필수 에너지원이고 또한 지구환경 변화에 따라 지표면에 도달하는 양은 예민하게 반응하기 때문에 전 세계중요 지점에서 관측 자료를 생산 및 분석하고 있습니다. 

    • 즉 복사관측 장비는 매 5년마다 스위스 세계복사센터 (World Radiation Center)에서 17개 절대 복사계들의 관측 값을 평균하여 기준을 결정하고 우리나라는 기상청이 일본 지역 센터에서 기준 일사계를 검정해 왔습니다.

    • 그러나 대한민국의 경우 복사관측 관련 시설 및 기술력이 부족하기 때문에 종합해양과학기지의 복사관측소가 BSRN (Baseline Surface Radiation network) 국제관측망에 등록되기 위해서는 전 세계 복사 관측 그룹들과 협력하여 기본적인 검⋅보정 기술 습득 및 공동 연구가 필수이며 종합해양과학기지의 특징은 다음과 같이 요약됩니다.

      • 첫째, 해양의 복사관측소는 해수면 알베도 변화 등 주변환경 변화가 없기 때문에 대기 특성 분석에 유리하며 이어도 등의 종합해양과학기지 복사관측소는 세계적으로 드물어 희소가치가 높습니다.

      • 둘째, 해양과학기지 복사관측소 자료는 인공위성 알고리즘 검정 및 복사 관련 요소 기준 자료로 사용되기 때문에 그 중요합니다. 

      • 셋째, 중국에서 불어오는 황사와 미세먼지 등 에 따른 환경오염 및 기후변화 분석을 위한 중요 자료로 사용됩니다.

      • 넷째, 이어도 종합해양과학기지 복사관측소를 BSRN에 등록할 경우 국가 경계수역 설정의 중요한 근거로 작용될 수 있습니다.

    • 육지와 달리 해양 관측소는 주변 지역의 지표면 알베도 등 환경변화가 없기 때문에 해양복사관측 자료는 대기 상태에 따른 복사 변화를 정확하게 분석할 수 있습니다.

    • 그러나 전 세계의 BSRN 해양관측소는 10여 곳 밖에 없어 중요하게 관리되고 있다.

    • 즉 대한민국 이어도 종합해양과학기지의 복사관측소는 전 세계적으로 인정받는 BSRN 가입을 위한 좋은 조건을 갖추고 있으나 그에 따른 환경 분석은 필연입니다.  

     

     

     

    • 오늘 포스팅에서는 이어도 종합해양과학기지에서의 일사량 관측 자료를 이용한 자료 전처리 및 운고계로부터 운량 및 운고 시계열 가시화를 소개해 드리고자 합니다.

     

    [특징]

    • 시계열 가시화를 이해하기 위해 자료 전처리가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해서 고안된 소프트웨어

     

    [기능]

    • 시계열 데이터셋을 이용한 일별 분할 및 자료 전처리

    • 일별 자료를 이용하여 통계 계산

    • 그누플롯을 이용한 시계열 가시화

     

    [활용 자료]

    • 자료 : 년, 월, 일, 시, 분, 초, 전천 일사량, 운고계 자료 (1-6열)

    • 기간 : 2004년 11월 25일 - 2015년 12월 31일

    • 장비 : MS-802 (EKO 사), CL31 (Valsala 사)

    • 해상도 : 매 10분 또는 1분

    • 제공처 : 이어도 종합해양과학기지

     

     

     

     

     

    [운고계]

    특징
    • 측정 범위 : 0-25,000 ff (0-7,500 m)

    • 단일 렌즈 광학 이용 : 정확도, 모든 날씨에서 높은 성능

    • DPS 기반의 빠른 처리기능 : 측정주기 2초

    • 자가진단 기능으로 데이터 높은 신뢰성

    • DIode laser lidar 사용으로 육안 보호

    • 덮개 : 강우와 낮은 온도에서 덮개는 안정적인 동작을 가능하게 함

      • 강수에 대한 보호, 얼음 알갱이 거울 반사를 방지

      • 자동 기울기 계산 및 수정 기능

     

     

    운고계 내부
    • 렌즈는 송신과 수신 영역으로 구분

    • 분리는 구멍으로 되어 있는 기울어진 기울에 의해 이루어짐

     

     

    LIDAR (Light Detection and Ranging) 동작 원리
    • 단파 빛이 공기중으로 전송

    • 수신기는 에어로졸에 의한 빛 후방산란을 모니터링

    • 후방산란의 고도는 시간 (광속 cm/ns - 1 ft/ns)에 의해 계산

    • 여러 프로파일이 신호와 노이즈율을 향상시키기 위해 더해짐

    • h = (cxt) / 2 (h: 운고, c : 빛의 속도, t : 시간)

     

     

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

    • 없음

     

    [사용법]

    • 소스 코드를 참조

    • 가시화 결과를 확인

     

    [사용 OS]

    • Linux (CentOS v7.3)

     

    [사용 언어]

    • Gnuplot

    • ShellScript (csh)

     

     소스 코드

    [명세]

    • 시계열 데이터셋을 이용한 일별 분할 및 자료 전처리

      • 앞서 활용 자료에서와 같은 년 (year), 월 (month), 일 (day), 시 (tt), 분 (mm), 초 (dd), 전천 일사량 읽기 (dsr), 1-6열 운고계 자료 (1번 운량/운고, 2번 운량/운고, 3번 운량/운고)

      • 반복문 수행하면서 1줄마다 날짜 정보를 이용하여 연도 (xran) 및 일 (xran2)에 대한 10 진수 변환

      • open 및 write를 통해 시간 (tt)이 9-16시 그리고 일마다 자료 출력

      • 포트란 컴파일 (pgf90 1.f90) 및 실행 (a.out)

    #!/bin/csh
    
    rm -f  DATA_L2  DATA_L2_NaN 
    #rm -f OUTPUT/*   FIG/*
    
    #=======================================
    #     Day Division
    #=======================================
    cat >! 1.f90 << EOF
          integer :: year, month, day, hour, min, sec
          real(8) :: xran, xran2
          real :: sunshine, dsr
          real, dimension(6) :: cel
          real, dimension(12) :: min2
          character(100) :: fn
    
          min2 = reshape( (/31,28,31,30,31,30,31,31,30,31,30,31/), (/12/) )
    
    !      open(10, file='DATA_L1')  ! Irradiance
          open(10, file='../Celiometer/DATA_merge')
    
          do i=1, 1249003
    !           read(10, *) year, month, day, hour, min, sec, dsr
                read(10, *) year, month, day, hour, min, sec, dsr, cel(1:6)
    
             if( (mod(year,4) == 0 .and. mod(year,100) /= 0) .or. mod(year,400) == 0 ) min2(2)=29
    
             xran = real(year) + ((real(month)-1.d0)/12.d0) &
                               + ((real(day)-1.d0)/(12.d0*min2(month))) &
                               + ((real(hour))/(12.d0*min2(month)*24.d0)) &
                               + ((real(min))/(12.d0*min2(month)*24.d0*60.d0)) & 
                               + ((real(sec))/(12.d0*min2(month)*24.d0*60.d0*60.d0))
    
             xran2 = real(hour) + ((real(min))/(60.d0)) & 
                               + ((real(sec))/(60.d0*60.d0))
    
             if (hour>=9 .and. hour<=16 ) then
                write(fn, '(i4,i2.2,i2.2)') year, month, day
                open(11, file='OUTPUT/'//trim(fn)//'.dat')
    !             write(11,'(2f15.7, f10.3)') xran, xran2, dsr
                 write(11,'(2f15.7, 7f10.3)') xran, xran2, dsr, cel(1:6)
             endif
    
          enddo  !  i
    
          end
    EOF
    pgf90 1.f90   ;  a.out

     

    • 출력 디렉터리 (OUTPUT)

     

    • 출력 결과 (20041203.dat)

     

    • 일별 자료를 이용하여 통계 계산

      • ls 및 foreach를 통해 OUTPUT 하위 디렉터리 파일명 (fn1)에 대해 반복문 수행

      • read를 통해 동적 파일명에 대한 자료 읽기

      • 일사량의 경우 일 평균 (Daily Mean), 일 누적 (Daily Accumulation), 자료 개수 (N) 계산

      • 운고계 자료를 이용하여 각 횟수에 대한 평균 운량 (CA 1-3), 운고 (CH 1-3), POR (per 1-3), 맑은날 탐지 개수 (cc 1-3), 구름 탐지 개수 (cc 4-6), 전체 개수 (cc1 + cc4, cc2 + cc5, cc3 + cc6) 계산

      • write(1, format)를 통해 임시 파일명 (fort.1, fort.2, fort.3) 설정

      • 포트란 컴파일 (pgf90 2.f90) 및 실행 (a.out)

    #=======================================
    #     Day Mean, Day Accumulation, N
    #
    #     cloud Amount, Height
    #
    #     NaN1, NaN2, NaN3
    #=======================================
    #set fn = `ls OUTPUT/*`
    set fn = `ls OUTPUT/20150401.dat`
    #set fn = `ls OUTPUT/20071210.dat`
    foreach fn1 ($fn)
    
    cat >! 2.f90 << EOF
          real :: SUM_xran, xran, xran2
          real :: SUM_dsr, dsr, cc, cc0
          real :: SUM_CA1, SUM_CA2, SUM_CA3, SUM_CA
          real :: SUM_CH1, SUM_CH2, SUM_CH3, SUM_CH
          real :: cc1, cc2, cc3, cc4, cc5, cc6
          real :: cc7, cc8, cc9, cc10, cc11, cc12
          real :: CA1, CH1, CA2, CH2, CA3, CH3
          real :: per_1, per_2, per_3
          real :: NaN1, NaN2, NaN3
    
          open(10,file='${fn1}')
    
          cc=0.0  ;  cc0=0.0  ;  SUM_xran=0.0  ;  SUM_dsr=0.0
          SUM_CA1=0.0  ;  SUM_CA2=0.0  ;  SUM_CA3=0.0
          SUM_CH1=0.0  ;  SUM_CH2=0.0  ;  SUM_CH3=0.0
          cc1=0.0   ;  cc2=0.0   ;  cc3=0.0
          cc4=0.0   ;  cc5=0.0   ;  cc6=0.0
          cc7=0.0   ;  cc8=0.0   ;  cc9=0.0
          cc10=0.0  ;  cc11=0.0  ;  cc12=0.0
    
          NaN1 = -999.0   ! ( My )
          NaN2 = -1       ! ( Data missing )
          NaN3 = 99       ! ( Not enough data )
    
    !===================================
    !     Irradiacne
    !===================================
    !  10  read(10,*,end=99) xran, xran2, dsr
      10  read(10,*,end=99) xran, xran2, dsr, CA1, CH1, CA2, CH2, CA3, CH3
          if (dsr > 0.0) cc=cc+1.0
          cc0=cc0+1
          SUM_xran = SUM_xran + xran
          SUM_dsr = SUM_dsr + dsr
    
    !===========================================
    !     cloud Amount, Height
    !===========================================
    !  clear
          if (CA1 == 0.0) cc1=cc1+1.0
          if (CA2 == 0.0) cc2=cc2+1.0
          if (CA3 == 0.0) cc3=cc3+1.0
    
    !  cloud
          if (CA1 >= 1.0 .and. CA1 <= 8.0) then
                cc4=cc4+1.0
                if (CA1 /= NaN1 .and. CA1 /= NaN2 .and. CA1 /= NaN3) SUM_CA1 = SUM_CA1 + CA1
                if (CH1 /= NaN1 .and. CH1 /= NaN2 .and. CH1 /= NaN3) SUM_CH1 = SUM_CH1 + CH1
          endif
    
          if (CA2 >= 1.0 .and. CA2 <= 8.0) then
                cc5=cc5+1.0
                if (CA2 /= NaN1 .and. CA2 /= NaN2 .and. CA2 /= NaN3) SUM_CA2 = SUM_CA2 + CA2
                if (CH2 /= NaN1 .and. CH2 /= NaN2 .and. CH2 /= NaN3) SUM_CH2 = SUM_CH2 + CH2
          endif
    
          if (CA3 >= 1.0 .and. CA3 <= 8.0) then
                cc6=cc6+1.0
                if (CA3 /= NaN1 .and. CA3 /= NaN2 .and. CA3 /= NaN3) SUM_CA3 = SUM_CA3 + CA3
                if (CH3 /= NaN1 .and. CH3 /= NaN2 .and. CH3 /= NaN3) SUM_CH3 = SUM_CH3 + CH3
          endif
    
          SUM_CA = SUM_CA1 + SUM_CA2 + SUM_CA3
          SUM_CH = SUM_CH1 + SUM_CH2 + SUM_CH3
    
    !  clear, cloud --> percent
          per_1 = (cc4/(cc1+cc4))*100.0
          per_2 = (cc5/(cc2+cc5))*100.0
          per_3 = (cc6/(cc3+cc6))*100.0
    
    !  vertical visibility --> fog, rain, snow
          if (CA1 == 9.0) cc7=cc7+1.0
          if (CA2 == 9.0) cc8=cc8+1.0
          if (CA3 == 9.0) cc9=cc9+1.0
    
    !  NaN1, NaN2, NaN3
          if (CA1 == NaN1 .or. CA1 == NaN2 .or. CA1 == NaN3) cc10=cc10+1.0
          if (CA2 == NaN1 .or. CA2 == NaN2 .or. CA2 == NaN3) cc11=cc11+1.0
          if (CA3 == NaN1 .or. CA3 == NaN2 .or. CA3 == NaN3) cc12=cc12+1.0
    
          goto 10
    
      99  write(1,'(f15.6, 2f15.2, i5)') SUM_xran/cc0, SUM_dsr/cc, (SUM_dsr/(10.d0**6.d0))*60.d0, int(cc)
          write(1,'(3f15.2)') SUM_CA1/(cc4), SUM_CA2/(cc5), SUM_CA3/(cc6)
          write(1,'(3f15.2)') SUM_CH1/(cc4), SUM_CH2/(cc5), SUM_CH3/(cc6)
          write(1,'(3i15)') int(per_1), int(per_2), int(per_3)
          write(1,'(3i15)') int(cc1), int(cc2), int(cc3)
          write(1,'(3i15)') int(cc4), int(cc5), int(cc6)
          write(1,'(3i15)') int(cc1)+int(cc4), int(cc2)+int(cc5), int(cc3)+int(cc6)
    
          write(2,'(12f15.5)') SUM_xran/cc0, SUM_dsr/cc, (SUM_dsr/(10.d0**6.d0))*60.d0, &
                   SUM_CA1/(cc4), SUM_CH1/(cc4), per_1,  &
                   SUM_CA2/(cc5), SUM_CH2/(cc5), per_2,  &
                   SUM_CA3/(cc6), SUM_CH3/(cc6), per_3
    
          write(3,'(7f15.2)') cc7, cc8, cc9, cc10, cc11, cc12, cc0
    
          end
    EOF
    pgf90 2.f90  ;  a.out

     

    • 그누플롯을 이용한 시계열 가시화

      • 앞서 동적 파일명 (fn1)를 fn2로 변수 설정

      • awk를 통해 통계 파일명 (fort.1)에서 일 평균 (Day_Mean), 일 누적 (Day_Acc), 자료 개수 (N), 운량 (Amount), 운고 (Height), 탐지율 (POR), 맑은 날 탐지 개수 (clear), 구름 탐지 개수 (cloud), 전체 개수 (total) 추출

      • 그누플롯을 통해 set label 및 x축 및 y축 설정

      • 20130911 날짜를 기준으로 조건문 수행

      • 그누플롯 수행 결과 (1.gif)를 mogrify로 90도 회전

      • mv를 통해 그림 디렉터리 (FIG)에 저장

      • rm를 통해 임시 파일명 (fort.1) 삭제

    #==================================
    #     Plot
    #==================================
    set fn2 = `echo $fn1:t | awk -F'[/.]' '{print $1}' `
    set Day_Mean =  `awk '{print $2}' fort.1 | sed -n '1p'`
    set Day_Acc = `awk '{print $3}' fort.1 | sed -n '1p'`
    set N = `awk '{print $4}' fort.1 | sed -n '1p'`
    
    set Amount_1 = `awk '{print $1}' fort.1 | sed -n '2p'`
    set Amount_2 = `awk '{print $2}' fort.1 | sed -n '2p'`
    set Amount_3 = `awk '{print $3}' fort.1 | sed -n '2p'`
    
    set Height_1 = `awk '{print $1}' fort.1 | sed -n '3p'`
    set Height_2 = `awk '{print $2}' fort.1 | sed -n '3p'`
    set Height_3 = `awk '{print $3}' fort.1 | sed -n '3p'`
    
    set POR_1 = `awk '{print $1}' fort.1 | sed -n '4p'`
    set POR_2 = `awk '{print $2}' fort.1 | sed -n '4p'`
    set POR_3 = `awk '{print $3}' fort.1 | sed -n '4p'`
    
    set clear_1 = `awk '{print $1}' fort.1 | sed -n '5p'`
    set clear_2 = `awk '{print $2}' fort.1 | sed -n '5p'`
    set clear_3 = `awk '{print $3}' fort.1 | sed -n '5p'`
    
    set cloud_1 = `awk '{print $1}' fort.1 | sed -n '6p'`
    set cloud_2 = `awk '{print $2}' fort.1 | sed -n '6p'`
    set cloud_3 = `awk '{print $3}' fort.1 | sed -n '6p'`
    
    set total_1 = `awk '{print $1}' fort.1 | sed -n '7p'`
    set total_2 = `awk '{print $2}' fort.1 | sed -n '7p'`
    set total_3 = `awk '{print $3}' fort.1 | sed -n '7p'`
    
    cat >! 1.gs << EOG
    set terminal post enhanced color font "Arial-bold, 24" background rgb "white" size 20, 10
    set output "1.gif"
    
    set label "Day Mean = $Day_Mean [Wm^{-2}]" at 9.25, 1350 font "bold, 20" 
    set label "Day Acc = $Day_Acc [MJm^{-2}]" at 9.25, 1250 font  "bold, 20" 
    set label "N = $N" at 9.25, 1150 font "bold, 20"
    
    if ( ${fn2} <= 20130911 ) {
        set object rectangle from 11.4, 1000 to  14.8, 1380 fs solid 1.0 fc rgb "#ffffe0"
        set arrow from 11.4, 1290 to 14.8, 1290 nohead
        set arrow from 11.8, 1000 to 11.8, 1380 nohead
        set label "           Amount          Height            POR  [ Count ]"  at 11.5, 1340 font "bold, 16"  textcolor rgb "black"
        set label "1st     ${Amount_1}" at 11.5, 1240 font "bold, 20"  textcolor rgb "red"
        set label "2st     ${Amount_2}" at 11.5, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "3st     ${Amount_3}" at 11.5, 1040 font "bold, 20"  textcolor rgb "green"
        set label "${Height_1}" at 12.7, 1240 font "bold, 20"  textcolor rgb "red"
        set label "${Height_2}" at 12.7, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "${Height_3}" at 12.7, 1040 font "bold, 20"  textcolor rgb "green"
        set label "${POR_1}" at 13.6, 1240 font "bold, 20"  textcolor rgb "red"
        set label "${POR_2}" at 13.6, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "${POR_3}" at 13.6, 1040 font "bold, 20"  textcolor rgb "green"
        set label "[ ${cloud_1} / ${total_1} ]" at 14, 1240 font "bold, 16"  textcolor rgb "red"
        set label "[ ${cloud_2} / ${total_2} ]" at 14, 1140 font "bold, 16"  textcolor rgb "blue"
        set label "[ ${cloud_3} / ${total_3} ]" at 14, 1040 font "bold, 16"  textcolor rgb "green"
    } else {
        set object rectangle from 11.4, 1100 to  14.8, 1380 fs solid 1.0 fc rgb "#ffffe0"
        set arrow from 11.4, 1290 to 14.8, 1290 nohead
        set arrow from 11.8, 1100 to 11.8, 1380 nohead
        set label "           Amount          Height            POR  [ Count ]"  at 11.5, 1340 font "bold, 16"  textcolor rgb "black"
        set label "1st     ${Amount_1}" at 11.5, 1240 font "bold, 20"  textcolor rgb "red"
        set label "2st     ${Amount_2}" at 11.5, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "${Height_1}" at 12.7, 1240 font "bold, 20"  textcolor rgb "red"
        set label "${Height_2}" at 12.7, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "${POR_1}" at 13.6, 1240 font "bold, 20"  textcolor rgb "red"
        set label "${POR_2}" at 13.6, 1140 font "bold, 20"  textcolor rgb "blue"
        set label "[ ${cloud_1} / ${total_1} ]" at 14, 1240 font "bold, 16"  textcolor rgb "red"
        set label "[ ${cloud_2} / ${total_2} ]" at 14, 1140 font "bold, 16"  textcolor rgb "blue"
    }
    
    set grid
    #set key top right
    set key Left
    set key reverse
    set key spacing 1.3
    set key font "bold, 20"
    set key noopaque
    set key box
    
    
    set title "${fn2}" 
    set title font "bold, 32" textcolor rgb "black"
    
    set ticscale 2.5
    
    set xlabel "Time [Day]" 
    set xlabel  font "bold, 24" textcolor rgb "black" norotate
    set xrange [ 9 : 17 ] noreverse nowriteback
    set xtics in 9, 1, 17 font "bold, 24"
    set mxtics 2
    set xtics nomirror
    
    set ylabel "Downward Shortwave Radiation at Surface [Wm^{-2}]" 
    set ylabel  font "bold, 24" textcolor rgb "black" rotate by -270
    set yrange [ -100 : 1400 ] noreverse nowriteback
    set ytics in 0, 200, 1200 font "bold, 24"
    set mytics 2
    set ytics nomirror
    
    set y2label "Cloud  Height [m]" 
    set y2label  font "bold, 24" textcolor rgb "black" rotate by -270
    set y2range [ -500 : 8000 ] noreverse nowriteback
    set y2tics in 0, 1000, 8000 font "bold, 24"
    set my2tics 2
    set y2tics nomirror
    
    set view map
    set colorbox default
    set cblabel "Cloud  Amount" textcolor rgb "black" rotate by -270
    set cbrange [0:8] noreverse nowriteback
    set cbtics in 0, 1, 8 font "bold, 24"
    #set palette maxcolors 8
    
    #set format cb "%.2f"
    #set palette rgbformula 22,13,-31 
    set palette defined ( 0 "#000090", 1 "#000fff", 2 "#0090ff", 3 "#0fffee", 4 "#90ff70", 5 "#ffee00",\
                           6 "#ff7000", 7 "#ee0000", 8 "#7f0000")
    #set palette negative defined ( 0 '#D53E4F', 1 '#F46D43', 2 '#FDAE61', 3 '#FEE08B', 4 '#E6F598',\
    #                               5 '#ABDDA4', 6 '#66C2A5', 7 '#3288BD' )
    # plot lc palette cb 1
    
    if ( ${fn2} <= 20130912 ) {
    plot "${fn1}" u 2:3 axes x1y1 w lp pt 7 ps 2 lw 2 t "DSR" ,\
         "${fn1}" u 2:5:4 axes x1y2 w p pt 5 ps 2 palette t "1st Layer"  ,\
         "${fn1}" u 2:7:6 axes x1y2 w p pt 5 ps 1.5 palette t "2st Layer"  ,\
         "${fn1}" u 2:9:8 axes x1y2 w p pt 5 ps 1 palette t "3st Layer"
    } else {
    plot "${fn1}" u 2:3   axes x1y1 w p pt 7 ps 1.25 t "DSR"  ,\
         "${fn1}" u 2:5:4 axes x1y2 w p pt 5 ps 1.25 palette t "1st Layer"  ,\
         "${fn1}" u 2:7:6 axes x1y2 w p pt 5 ps 0.75 palette t "2st Layer"
    }
    quit
    EOG
    
    gnuplot 1.gs
    mogrify -rotate 90 -matte -background none 1.gif
    display 1.gif
    mv -f 1.gif FIG/${fn2}.gif
    
    
    #==================================
    #     Date Handling
    #==================================
       echo $fn2
    
       echo $fn2  > 1.dat
       paste 1.dat fort.2 >> DATA_L2
       paste 1.dat fort.3 >> DATA_L2_NaN
    
    
    end   #  fn1
    
    
    rm -f 1.f90 2.f90 1.dat  fort.1  fort.2

     

    • 맑은 날

     

    • 흐린 날

      

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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