arrays - Is it possible to process a 4 dimensional netCDF file in R? -


i aware of ncdf package of r.

i trying plot wind speed , wind direction(4d) of wrfout netcdf file. variable function of (i,j,k,l).

new variables need created calculation shown in code. looping through 4 loops taking long. understand advanced looping techniques such plyr or tapply or mapply exist. examples these 2d array/matrix.

please suggest optimization package 4d array.

library(ncdf) ncin <- open.ncdf("wrfout.nc") imax <- 425  #no of grids in longitude jmax <- 200  #no of grids in latitude kmax <- 40   #vertical layers lmax <- 11   #time paiv <- atan(1.0)/45.0 #however, uuin , vvin in staggerd grid input file #dim(uuin) (426,200,40,11) #dim(vvin) (425,201,40,11)  uuin <- get.var.ncdf(ncin,"u") vvin <- get.var.ncdf(ncin,"v") #initialize arrays in normal grid  uu <- array(0.0, c(imax,jmax,kmax,lmax)) vv <- array(0.0, c(imax,jmax,kmax,lmax)) wspd <- array(0.0,c(imax,jmax,kmax,lmax)) wdir <- array(0.0,c(imax,jmax,kmax,lmax)) (l in 1:lmax) { (k in 1:kmax) { (j in 1:jmax) { (i in 1:imax) { #change u , v staggerd grid regular grid uu[i,j,k,l] <- 0.5*(uuin[i,j,k,l]+ uuin[i+1,j,k,l]) vv[i,j,k,l] <- 0.5*(vvin[i,j,k,l]+ vvin[i,j+1,k,l])        #now calculate wind speed , direction in regular grid wspd[i,j,k,l] <- sqrt(uu[i,j,k,l]*uu[i,j,k,l] + vv[i,j,k,l]* vv[i,j,k,l]) if (uu[i,j,k,l] == 0.0)  {  # startif    if(vv[i,j,k,l] < 0.0)  wdir[i,j,k,l] = 0.0      else   wdir[i,j,k,l] = 180.0 } else    wdir[i,j,k,l] = atan2(vv[i,j,k,l], uu[i,j,k,l]) / paiv if(uu[i,j,k,l] < 0.0) { wdir[i,j,k,l] = 90.0 - wdir[i,j,k,l]   }   else   wdir[i,j,k,l] = 270.0 - wdir[i,j,k,l]   if (wdir[i,j,k,l] < 0.0)  {       wdir[i,j,k,l] = wdir[i,j,k,l] + 360.0 }  if (wdir[i,j,k,l] > 360.0)  { wdir[i,j,k,l] = wdir[i,j,k,l] - 360.0       }     }    #end of  }    #end of j  }    #end of k  }    #end of l  


Comments