[R] WRF 모델자료 후처리 시퀀스1 - nc 파일을 풀어 txt 형태로 떨어뜨리기

 정보

  • 업무명     : WRF 모델자료 푼 후 TXT또는 CSV 로 떨어뜨리기

  • 작성자     : 박진만

  • 작성일     : 2021-01-27

  • 설   명      :

  • 수정이력 :

 

 내용

[개요]

  • WRF 모델의 결과 파일인 NC 형태의 파일은 일반적으로 포트란 또는 ncl 로 처리 하는 것이 일반적이나, R을 이용해서도 처리가 가능하다.

  • 본 글에서는 R을 통해 WRF 모델 자료를 후처리 하고 TXT 형태로 직접 떨어뜨리는 방법을 소개 하고자 한다. 

 

[특징]

  • WRF 모델 자료 후처리

     

[기능]

  • 데이터형 소개

 

[활용 자료]

  • 없음

 

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

  • 없음

 

[사용법]

  • 소스 코드 예시 참조

 

[사용 OS]

  • Linux (CentOS7.0)

 

[사용 언어]

  • R v3.6.3

 

 소스 코드

[서브 함수 로드]

  • WRF 의 기상 요소는 결과 파일에 모두 담겨 있는 것이 아닌 섭동 등을 고려하여 최종적으로 계산 하여야 하는 부분이 있다.

  • 따라서 이를 고려하여 계산해주는 서브 함수를 별도로 생성 하여 로드하고 있다.

wrf_tk <- function(P = P, PB = PB, T = T) {
  
  # calculate absolute temperature (K)
  # Rd / CP   = 0.28571 (dimensionless)
  # Pair      = P + PB
  # theta     = Tk * (100000./Pair)^(Rd/Cp)
  # --> Tk    = theta * (Pair / 100000.)^(R\/Cp)
  
  #------------------------------------
  
  Rd          = 287.0
  Cp          = 7.0*Rd / 2.0
  Rd_Cp       = Rd / Cp
  Pair        = P + PB
  theta       = T + 300.0
  tk          = theta * (( Pair/100000. )**(Rd_Cp))
  
  return(tk)
  
}

wrf_rh <- function(QVAPOR = QVAPOR, P = P, PB = PB, TK = TK, flag = flag){
  
  
  # calculate Relative humidity (%) with respect to liquid water
  # this function use "Tetens formula"
  #------------------------------------
  # input variables 
  # - T: perturbationj potential temperature (theta-t0)";
  # - QVAPOR: Water vapor mixing ratio (kg kg-1)
  # - P: perturbation pressure
  # - PB: base state pressure
  # # es is calculated with respect to : flag=1 water, flag=-1 ice, flag=0 mix
  #------------------------------------
  # epsi    = 0.622
  # Rd / CP = 0.28571 (dimensionless)
  # Pair    = P + PB   # (Pa)
  # theta   = T + 300  # (K)
  # Tair    = theta * ( Pair /100000.)**(Rd/Cp)    # (K)
  # e_sat   = 0.01 * 6.1078 * 10^( a * Tdeg / (b + Tdeg) )  # Teten's formula
  # q       = QVAPOR   # (kg kg-1), water vapor mixing ratio
  # e       = q * Pair / (q + epsi)
  #------------------------------------
  # rh      = e / e_sat * 100.
  #------------------------------------
  
  EP_3      = 0.622
  QV        = QVAPOR
  Pair      = P + PB
  Tair      = TK
  
  #-- calc es -----------------------------
  a_liq = 7.5
  b_liq = 237.3
  a_ice = 9.5
  b_ice = 265.3
  rTliq = 273.15  #   0 deg.C
  rTice = 250.15  # -23 deg.C
  
  # liq / ice / mix judge #
  Tdeg     =  Tair - 273.16
  Tdegliq  = 0.0
  Tdegice  = -23.0
  # liq / ice / mix judge #  
  
  es = 100. * 6.1078 * 10.0**(a_liq * Tdeg/ (b_liq + Tdeg))
  es_liq = 100. * 6.1078 * 10.0**(a_liq * Tdeg/ (b_liq + Tdeg))
  es_ice = 100. * 6.1078 * 10.0**(a_liq * Tdeg/ (b_liq + Tdeg))
  #print(dim(Tdeg))
  
  if (flag == 1) {
    es = 100. * 6.1078 * 10.0**(a_liq * Tdeg/ (b_liq + Tdeg))
  } else if (flag == -1) {
    es = 100. * 6.1078 * 10.0**(a_ice * Tdeg/ (b_ice + Tdeg))
  } else if (flag == 0) {
    
    for (i in 1:dim(Tdeg)[1]) {
      for (j in 1:dim(Tdeg)[2]) {
        
        if (Tdeg[i,j] >= Tdegliq) {
          es[i,j] = 100. * 6.1078 * 10.0**(a_liq * Tdeg[i,j]/ (b_liq + Tdeg[i,j]))
        } else if (Tdeg[i,j] < Tdegice) {
          es[i,j] = 100. * 6.1078 * 10.0**(a_ice * Tdeg[i,j]/ (b_ice + Tdeg[i,j]))
        } else {
          es_liq[i,j] = 100.* 6.1078 * 10.0**(a_liq * Tdeg[i,j]/ (b_liq + Tdeg[i,j]))
          es_ice[i,j] = 100.* 6.1078 * 10.0**(a_ice * Tdeg[i,j]/ (b_ice + Tdeg[i,j]))
          es[i,j] = ((Tdeg[i,j] - Tdegice)*es_liq[i,j] + (Tdegliq - Tdeg[i,j])*es_ice[i,j])/(Tdegliq - Tdegice)
        }
        
      }
    }

  }

  #----------------------------------------
  QVS       = EP_3 * es / (Pair - es)     # [kg kg-1]
  
  
  rh        = QV/QVS
  rh        = ifelse(rh > 1.0, 1.0, rh)
  rh        = ifelse(rh < 0.0, 0.0, rh)

  
  return(rh)
  

}

 

[입력 파라미터 지정 및 라이브러리 로드]

  • 본 스크립트는 리눅스에서 실행되고 있다.

  • 따라서 이러한 파일은  일반적으로 명령줄 형태로 실행되기 때문에, 이를 리눅스에서 파라미터 형태로 받아 원하는 파일을 실행할 수 있도록 하였다. 

#!/usr/bin/Rscript
args = commandArgs(TRUE)

if (! is.na(args[1])) {
   today = args[1]
} else {
   today <- "2020010100_2020010500"
}


library(ggplot2)
library(dplyr)
library(RNetCDF)
library(data.table)
library(stringr)

source("./sub_pro.R")

 

[파일 로드 및 nc 파일의 모든 요소 추출 및 계산]

  • 지정된 경로로부터 nc 파일을 읽어준 후 모든 요소를 txt로 추출하여 떨어뜨린다. (본문에서는 csv 파일)

  • 따라서 이를 일괄적으로 처리하는 스크립트이다.

fn <- Sys.glob(paste0("./WRF_FILE/",today,"/wrfout_d04*"))

OUT_CSV_PATH <- paste0("./WRF_TO_ASCII_FILE/",today,"/")
name = "WRF"
count <- 0

for (i in fn) {

  count <- count + 1 
 # if(count == 10) {
 #  next
#	} 
  print(i)
  print("OPEN")

  # open #
  ncFile <- tryCatch(ncFile <- open.nc(i,write = TRUE),
                        error = function(e) return("error"),
                        warning = function(w) return("warning"),
                        finally = NULL)


  if(ncFile[1] == "error") {
     write.table(paste0("nc open error",i),row.names = F, sep = ",", append = TRUE, col.names = F)       
     next
  } 


  # read #
  ncdata <- tryCatch(ncdata <- read.nc(ncFile),
                        error = function(e) return("error"),
                        warning = function(w) return("warning"),
                        finally = NULL)
  #print(ncdata)

  #ncFile <- open.nc(i)
  if(ncdata[1] == "error") {
   
    write.table(paste0("nc read error",i),row.names = F, sep = ",", append = TRUE, col.names = F)       
    next

  }

  print("READ")
  
   
    Times <- ncdata[["Times"]]

    #ymdhm#
    yy <- substr(Times,1,4)
    mm <- substr(Times,6,7)
    dd <- substr(Times,9,10)
    hh <- substr(Times,12,13)
    mn <- substr(Times,15,16)
    #ymdhm#
    print(c(yy,mm,dd,hh,mn)) 

      # XLAT
      XLAT <- ncdata[["XLAT"]]
      
      # XLONG
      XLONG <- ncdata[["XLONG"]]
       
      # XLAT_U
      XLAT_U <- ncdata[["XLAT_U"]]
      
      # XLONG_U
      XLONG_U <- ncdata[["XLONG_U"]]
      
      # XLAT_V
      XLAT_V <- ncdata[["XLAT_V"]]
      
      # XLONG_V
      XLONG_V <- ncdata[["XLONG_V"]]
      
      ## LOCATE ##
      
      
      
      ## ALTITUDE ##
      
      # ZNU
      ZNU <- ncdata[["ZNU"]]
      
      # ZNW
      ZNW <- ncdata[["ZNW"]]
      
      ## ALTITUDE ##
      
      ## VALUE ##
      
      # CLDFRA (ALL layer)
      for (kk in seq(1,39,1)) {
        CLDFRA_PART <- ncdata[["CLDFRA"]][,,kk]
        
        if(kk == 1) {
          xt <- dim(CLDFRA_PART)[1]
          yt <- dim(CLDFRA_PART)[2]
          CLDFRA <- CLDFRA_PART
        }
        
        for (ii in 1:xt) {
          for (jj in 1:yt) {
            CLDFRA[ii,jj] <- ifelse(CLDFRA_PART[ii,jj] >= CLDFRA[ii,jj],CLDFRA_PART[ii,jj],CLDFRA[ii,jj])
          }
        }
        
      }
      
      # U (land layer)
      U <- ncdata[["U"]][,,1]
      
      # V (land layer)
      V <- ncdata[["V"]][,,1]
      
      # W (land layer)
      W <- ncdata[["W"]][,,1]
      
      # U10 (10m)
      U10 <- ncdata[["U10"]]
      
      # V10 (10m)
      V10 <- ncdata[["V10"]]
      
      # PB 
      PB <- ncdata[["PB"]][,,1]
      
      # P (pressure)
      P <- ncdata[["P"]][,,1]
      
      # LAND AIR PRESSURE
      PRE <- P + PB
      
      # PSFC (mean sea level pressure)
      PSFC <- ncdata[["PSFC"]]
      #PSFC <- ncdata[["MSLP"]]
      
      # T2 (2m Tempature)
      T2 <- ncdata[["T2"]]
      
      # T
      T <- ncdata[["T"]][,,1]
      
      # TK
      TK <- wrf_tk(P = P,PB = PB,T = T)
      
      # 비습 (2m)
      Q2 <- ncdata[["Q2"]]
      
      # 비습 (layer)
      QVAPOR <- ncdata[["QVAPOR"]][,,1]
      
      # HGT
      HGT <- ncdata[["HGT"]]
      
      # RAINC
      RAINC <- ncdata[["RAINC"]]
      
      # RAINNC
      RAINNC <- ncdata[["RAINNC"]]
      
      # PRINC 
      PRINC <- RAINC + RAINNC
      
      # RH
      RH <- wrf_rh(QVAPOR = QVAPOR,P = P,PB = PB,TK = TK, flag = 0)

    ### OUT ###
    
    # CLDFRA # 
    CLDFRATABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), CLDFRA = c(CLDFRA))
    write.csv(CLDFRATABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_CLDFRA.csv"),row.names = F)
    
    # U # 
    UTABLE <- data.frame(LAT = c(XLAT_U), LONG = c(XLONG_U), U = c(U))
    write.csv(UTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_U.csv"),row.names = F)
    
    # V # 
    VTABLE <- data.frame(LAT = c(XLAT_V), LONG = c(XLONG_V), V = c(V))
    write.csv(VTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_V.csv"),row.names = F)
    
    # W #
    WTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), W = c(W))
    write.csv(WTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_W.csv"),row.names = F)
    
    # U10 #
    U10TABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), U10 = c(U10))
    write.csv(U10TABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_U10.csv"),row.names = F)
    
    # V10 #
    V10TABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), V10 = c(V10))
    write.csv(V10TABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_V10.csv"),row.names = F)
    
    # PB #
    PBTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), PB = c(PB))
    write.csv(PBTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_PB.csv"),row.names = F)
    
    # P #
    PTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), P = c(P))
    write.csv(PTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_P.csv"),row.names = F)
    
    # PRE #
    PRETABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), PRE = c(PRE))
    write.csv(PRETABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_PRE.csv"),row.names = F)
    
    # PSFC #
    PSFCTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), PSFC = c(PSFC))
    write.csv(PSFCTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_PSFC.csv"),row.names = F)
    
    # T2 #
    T2TABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), T2 = c(T2))
    write.csv(T2TABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_T2.csv"),row.names = F)
    
    # T #
    TTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), T = c(T))
    write.csv(TTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_T.csv"),row.names = F)
    
    # TK #
    TKTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), TK = c(TK))
    write.csv(TKTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_TK.csv"),row.names = F)
    
    # Q2 #
    Q2TABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), Q2 = c(Q2))
    write.csv(Q2TABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_Q2.csv"),row.names = F)
    
    # QVAPOR #
    QVAPORTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), QVAPOR = c(QVAPOR))
    write.csv(QVAPORTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_QVAPOR.csv"),row.names = F)
    
    # HGT #
    HGTTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), HGT = c(HGT))
    write.csv(HGTTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_HGT.csv"),row.names = F)
    
    # RAINC #
    RAINCTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), RAINC = c(RAINC))
    write.csv(RAINCTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_RAINC.csv"),row.names = F)
    
    # RAINNC #
    RAINNCTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), RAINNC = c(RAINNC))
    write.csv(RAINNCTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_RAINNC.csv"),row.names = F)
    
    # PRINC #
    PRINCTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), PRINC = c(PRINC))
    write.csv(PRINCTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_PRINC.csv"),row.names = F)
    
    # RH #
    RHTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), RH = c(RH))
    write.csv(RHTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_RH.csv"),row.names = F)
    
    ### OUT ###
    
    ## mean ##
    meanCLDFRA <- mean(CLDFRA)
    meanU <- mean(U)
    meanV <- mean(V)
    meanW <- mean(W)
    meanU10 <- mean(U10)
    meanV10 <- mean(V10)
    meanPB <- mean(PB)
    meanP <- mean(P)
    meanPRE <- mean(PRE)
    meanPSFC <- mean(PSFC)
    meanT2 <- mean(T2)
    meanT <- mean(T)
    meanTK <- mean(TK)
    meanQ2 <- mean(Q2)
    meanQVAPOR <- mean(QVAPOR)
    meanHGT <- mean(HGT)
    meanRAINC <- mean(RAINC)
    meanRAINNC <- mean(RAINNC)
    meanPRINC <- mean(PRINC)
    meanRH <- mean(RH)
    ## mean ##
    
    # TT
    stime <- paste0(yy,mm,dd,hh,mn)
    
    # mean CLDFRA #
    resultCLDFRA <- data.table(stime = stime, meanU = meanCLDFRA)
    # mean U #
    resultU <- data.table(stime = stime, meanU = meanU)
    # mean V #
    resultV <- data.table(stime = stime, meanV = meanV)
    # mean W #
    resultW <- data.table(stime = stime, meanW = meanW)
    # mean U10 #
    resultU10 <- data.table(stime = stime, meanU10 = meanU10)
    # mean V10 #
    resultV10 <- data.table(stime = stime, meanV10 = meanV10)
    # mean PB #
    resultPB <- data.table(stime = stime, meanPB = meanPB)
    # mean P #
    resultP <- data.table(stime = stime, meanP = meanP)
    # mean PRE #
    resultPRE <- data.table(stime = stime, meanPRE = meanPRE)
    # mean PSFC #
    resultPSFC <- data.table(stime = stime, meanPSFC = meanPSFC)
    # mean T2 #
    resultT2 <- data.table(stime = stime, meanT2 = meanT2)
    # mean T #
    resultT <- data.table(stime = stime, meanT = meanT)
    # mean TK #
    resultTK <- data.table(stime = stime, meanTK = meanTK)
    # mean Q2 #
    resultQ2 <- data.table(stime = stime, meanQ2 = meanQ2)
    # mean QVAPOR #
    resultQVAPOR <- data.table(stime = stime, meanQVAPOR = meanQVAPOR)
    # mean HGT #
    resultHGT <- data.table(stime = stime, meanHGT = meanHGT)
    # mean RAINC #
    resultRAINC <- data.table(stime = stime, meanRAINC = meanRAINC)
    # mean RAINNC #
    resultRAINNC <- data.table(stime = stime, meanRAINNC = meanRAINNC)
    # mean PRINC #
    resultPRINC <- data.table(stime = stime, meanPRINC = meanPRINC)
    # mean RH #
    resultRH <- data.table(stime = stime, meanRH = meanRH)
    
      
    if(count == 1){
      
      write.table(resultCLDFRA,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_CLDFRA.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultU,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_U.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultV,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_V.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultW,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_W.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultU10,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_U10.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultV10,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_V10.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultPB,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PB.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultP,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_P.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultPRE,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PRE.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultPSFC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PSFC.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultT2,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_T2.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultT,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_T.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultTK,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_TK.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultQ2,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_Q2.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultQVAPOR,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_QVAPOR.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultHGT,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_HGT.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultRAINC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RAINC.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultRAINNC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RAINNC.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultPRINC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PRINC.csv"),row.names = F, sep = ",", append = FALSE)
      write.table(resultRH,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RH.csv"),row.names = F, sep = ",", append = FALSE)
      
    } else {
      
      write.table(resultCLDFRA,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_CLDFRA.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultU,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_U.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultV,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_V.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultW,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_W.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultU10,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_U10.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultV10,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_V10.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultPB,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PB.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultP,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_P.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultPRE,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PRE.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultPSFC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PSFC.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultT2,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_T2.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultT,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_T.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultTK,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_TK.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultQ2,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_Q2.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultQVAPOR,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_QVAPOR.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultHGT,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_HGT.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultRAINC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RAINC.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultRAINNC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RAINNC.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultPRINC,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_PRINC.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      write.table(resultRH,paste0(OUT_CSV_PATH,"MEAN_OUT_",name,"_RH.csv"),row.names = F, sep = ",", append = TRUE, col.names = F)
      
      
    }
    
    wind_abs = sqrt(U10^2 + V10^2)
    wind_dir_trig_to = atan2(U10/wind_abs, V10/wind_abs) 
    wind_dir_trig_to_degrees = wind_dir_trig_to * 180/pi ## -111.6 degrees
    wind_dir_trig_to_degrees = ifelse(wind_dir_trig_to_degrees < 0, wind_dir_trig_to_degrees + 360, wind_dir_trig_to_degrees)
    
    # WDIR #
    WDIRTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), WDIR = c(wind_dir_trig_to_degrees))
    write.csv(WDIRTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_WDIR.csv"), row.names = F)
    
    # WS #
    WSTABLE <- data.frame(LAT = c(XLAT), LONG = c(XLONG), WS = c(wind_abs))
    write.csv(WSTABLE,paste0(OUT_CSV_PATH,"OUT_",name,"_",yy,mm,dd,hh,mn,"_WS.csv"),row.names = F)
    
  

  
  }
  

 

[결과]

  • 등 다수의 파일들

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

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

  • sangho.lee.1990@gmail.com

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

  • saimang0804@gmail.com