77 lines
2.6 KiB
R
77 lines
2.6 KiB
R
# read the orginal fldas data and save to .RDS file.
|
|
|
|
source('AutoSHUD/Rfunction/LDAS_UnitConvert.R')
|
|
source('AutoSHUD/Rfunction/raster2Polygon.R')
|
|
source('AutoSHUD/Rfunction/CMFD_readnc.R')
|
|
|
|
fun.CMFD.NC2RDS <- function(xfg){
|
|
varnames = c("Pres", "LRad", "Prec", "SHum", "SRad", "Temp", "Wind")
|
|
varnames = c("Prec", "Temp", "SHum", "SRad", "Wind", "Pres")
|
|
nv=length(varnames)
|
|
nyr = length(xfg$years)
|
|
fn=list.files(xfg$dir.ldas, pattern = glob2rx(paste0(varnames[1], '*CMFD*.nc') ),
|
|
recursive = TRUE, ignore.case = TRUE, full.names = TRUE)[1]
|
|
# cmd = paste('find',xfg$dir.lddas, ' -name "*CMFD*.nc" > filelist.txt')
|
|
# system(cmd)
|
|
# fn=readLines(file.path(xfg$dir.ldas, 'filelist.txt'))[1]
|
|
|
|
xp = initalGrids(fn=fn, vn=tolower(varnames[1]), pd.gcs = pd.gcs, pd.pcs = pd.pcs)
|
|
id = xp$id
|
|
print(length(id))
|
|
sitenames=xp$sitenames
|
|
ext=xp$ext
|
|
nsite = length(id)
|
|
# print(id)
|
|
# library(foreach)
|
|
# library(doMC)
|
|
# library(doParallel)
|
|
# registerDoMC(12)
|
|
# foreach (idd = 1:ndir) %dopar%{
|
|
msg <-function(i, n, str, ntab=0){
|
|
message(paste(rep('\t', ntab), collapse = ''),
|
|
i, '/', n, '\t', str)
|
|
}
|
|
for (iyr in 1:nyr) {
|
|
yr <- xfg$years[iyr]
|
|
message(iyr, '/', nyr, '\t', yr)
|
|
fn.rds = file.path(xfg$dir$predata, paste0('CMFD_', yr, '.RDS'))
|
|
if(file.exists(fn.rds)){
|
|
next;
|
|
}
|
|
arr = array(dim = c(nsite, nv, 366*(24/3))) #(N_SITE, N_VARNAME, N_TIME)
|
|
for(ivn in 1:nv){
|
|
vn = varnames[ivn]
|
|
message('\t', ivn, '/', nv, '\t', vn)
|
|
path = file.path(xfg$dir.ldas, vn)
|
|
fns = list.files(path, pattern = glob2rx(paste0(tolower(vn), '_CMFD_*', yr, '*.nc')), full.names = F)
|
|
ffns = list.files(path, pattern = glob2rx(paste0(tolower(vn), '_CMFD_*', yr, '*.nc')), full.names = T)
|
|
nf = length(fns)
|
|
pnt = 0;
|
|
for(i in 1:nf){ # vn in the whole year
|
|
msg(i, nf, fns[i], ntab=3)
|
|
ncid = nc_open(ffns[i])
|
|
# debug(readnc)
|
|
dat=readnc.CMFD(ncid, varid = tolower(vn), ext = ext)
|
|
nc_close(ncid)
|
|
nd = dim(dat$arr)
|
|
if(length(nd)==3){
|
|
mat = matrix(dat$arr, nrow=nd[1]*nd[2], ncol=nd[3])[id, ]
|
|
}else{
|
|
mat= dat$arr
|
|
}
|
|
if(i==1){
|
|
xtime=dat$time
|
|
}else{
|
|
xtime = c(xtime, dat$time)
|
|
}
|
|
timelen = length(dat$time)
|
|
arr[ , ivn, 1:timelen + pnt] = mat
|
|
pnt = pnt+timelen
|
|
}
|
|
}
|
|
arr=arr[,, 1:pnt ]
|
|
x.t = strftime(xtime, origin=as.POSIXct('1900-01-01'), usetz = FALSE, tz='UTC')
|
|
dimnames(arr) = list(sitenames, varnames, x.t)
|
|
saveRDS(arr, file=fn.rds)
|
|
}
|
|
} |