Changeset 2541 in lmdz_wrf for trunk/tools
- Timestamp:
- May 17, 2019, 5:21:17 AM (7 years ago)
- File:
-
- 1 edited
-
trunk/tools/nc_var_tools.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var_tools.py
r2537 r2541 3142 3142 3143 3143 def spacemean(ncfile, varn): 3144 """ Function to retrieve a space mean series from a multidimensional variable of a file 3145 ncfile = netCDF file name 3146 varn = variable name 3147 """ 3148 import datetime as dt 3149 import calendar as cal 3150 3151 ofile = 'spacemean_' + varn + '.nc' 3152 varfil=1.e20 3153 statsn = ['min', 'max', 'mean', 'mean2', 'stdv', 'meanwgt', 'mean2wgt', 'stdvwgt', 'quant'] 3154 statslongn = ['minimum', 'maximum', 'mean', 'quadratic mean', 'standard deviation', 'weigthed mean', 'weigthed quadratic mean', 'weigthed standard deviation', 'quantiles'] 3155 3156 ncf = NetCDFFile(ncfile,'r') 3157 3158 if not ncf.variables.has_key(varn): 3159 print errormsg 3160 print ' spacemean: File "' + ncfile + '" does not have variable "' + varn + '" !!!!' 3161 print errormsg 3162 ncf.close() 3163 quit(-1) 3164 3165 times = ncf.variables['time'] 3166 timevals = times[:] 3167 3168 attvar = times.ncattrs() 3169 if not gen.searchInlist(attvar, 'units'): 3170 print errormsg 3171 print ' spacemean: "time" does not have attribute: "units"' 3172 ncf.close() 3173 quit(-1) 3174 else: 3175 units = times.getncattr('units') 3144 """ Function to retrieve a space mean series from a multidimensional variable of a file 3145 ncfile = netCDF file name 3146 varn = variable name 3147 """ 3148 fname = 'spacemean' 3149 import datetime as dt 3150 import calendar as cal 3151 tunitsavail = ['weeks', 'day', 'hours', 'minutes', 'seconds', 'miliseconds'] 3152 3153 if varn == '-h': 3154 print fname + '_____________________________________________________________' 3155 print spacemean.__doc__ 3156 quit() 3157 3158 ofile = 'spacemean_' + varn + '.nc' 3159 varfil = gen.fillValueF 3160 statsn = ['min', 'max', 'mean', 'mean2', 'stdv', 'meanwgt', 'mean2wgt', \ 3161 'stdvwgt', 'quant'] 3162 statslongn = ['minimum', 'maximum', 'mean', 'quadratic mean', \ 3163 'standard deviation', 'weigthed mean', 'weigthed quadratic mean', \ 3164 'weigthed standard deviation', 'quantiles'] 3165 3166 ncf = NetCDFFile(ncfile,'r') 3167 3168 if not ncf.variables.has_key(varn): 3169 print errormsg 3170 print ' ' + fname + ": File '" + ncfile + "' does not have variable '" + \ 3171 varn + "' !!!!" 3172 Varn = list(ncf.variables.keys()) 3173 Varn.sort() 3174 print ' available ones:', Varn 3175 ncf.close() 3176 quit(-1) 3177 3178 times = ncf.variables['time'] 3179 timevals = times[:] 3180 3181 attvar = times.ncattrs() 3182 if not gen.searchInlist(attvar, 'units'): 3183 print errormsg 3184 print ' spacemean: "time" does not have attribute: "units"' 3185 ncf.close() 3186 quit(-1) 3187 else: 3188 units = times.getncattr('units') 3176 3189 3177 txtunits = units.split(' ') 3178 tunits = txtunits[0] 3179 Srefdate = txtunits[len(txtunits) - 1] 3180 # Does reference date contain a time value [YYYY]-[MM]-[DD] [HH]:[MI]:[SS] 3181 ## 3182 timeval = Srefdate.find(':') 3183 3184 if not timeval == -1: 3185 print ' spacemean: refdate with time!' 3186 refdate = datetimeStr_datetime(txtunits[len(txtunits) - 2] + '_' + Srefdate) 3187 else: 3188 refdate = dateStr_date(Srefdate) 3189 3190 dimt = len(timevals) 3191 realdates = np.zeros((dimt, 6), dtype=int) 3192 print realdates.shape 3190 timeuinf = gen.CFtimeU_inf(units) 3191 3192 dimt = len(timevals) 3193 realdates = np.zeros((dimt, 6), dtype=int) 3193 3194 3194 3195 ## Not in timedelta 3195 # if tunits == 'years': 3196 # for it in range(dimt): 3197 # realdate = refdate + dt.timedelta(years=float(times[it])) 3198 # realdates[it] = int(realdate.year) 3199 # elif tunits == 'months': 3200 # for it in range(dimt): 3201 # realdate = refdate + dt.timedelta(months=float(times[it])) 3202 # realdates[it] = int(realdate.year) 3203 if tunits == 'weeks': 3204 for it in range(dimt): 3205 realdate = refdate + dt.timedelta(weeks=float(times[it])) 3206 realdates[it,0] = int(realdate.year) 3207 realdates[it,1] = int(realdate.month) 3208 realdates[it,2] = int(realdate.day) 3209 realdates[it,3] = int(realdate.hour) 3210 realdates[it,4] = int(realdate.second) 3211 realdates[it,5] = int(realdate.minute) 3212 elif tunits == 'days': 3213 for it in range(dimt): 3214 realdate = refdate + dt.timedelta(days=float(times[it])) 3215 realdates[it,0] = int(realdate.year) 3216 realdates[it,1] = int(realdate.month) 3217 realdates[it,2] = int(realdate.day) 3218 realdates[it,3] = int(realdate.hour) 3219 realdates[it,4] = int(realdate.second) 3220 realdates[it,5] = int(realdate.minute) 3221 elif tunits == 'hours': 3222 for it in range(dimt): 3223 realdate = refdate + dt.timedelta(hours=float(times[it])) 3224 realdates[it,0] = int(realdate.year) 3225 realdates[it,1] = int(realdate.month) 3226 realdates[it,2] = int(realdate.day) 3227 realdates[it,3] = int(realdate.hour) 3228 realdates[it,4] = int(realdate.second) 3229 realdates[it,5] = int(realdate.minute) 3230 elif tunits == 'minutes': 3231 for it in range(dimt): 3232 realdate = refdate + dt.timedelta(minutes=float(times[it])) 3233 realdates[it,0] = int(realdate.year) 3234 realdates[it,1] = int(realdate.month) 3235 realdates[it,2] = int(realdate.day) 3236 realdates[it,3] = int(realdate.hour) 3237 realdates[it,4] = int(realdate.second) 3238 realdates[it,5] = int(realdate.minute) 3239 elif tunits == 'seconds': 3240 for it in range(dimt): 3241 realdate = refdate + dt.timedelta(seconds=float(times[it])) 3242 realdates[it,0] = int(realdate.year) 3243 realdates[it,1] = int(realdate.month) 3244 realdates[it,2] = int(realdate.day) 3245 realdates[it,3] = int(realdate.hour) 3246 realdates[it,4] = int(realdate.second) 3247 realdates[it,5] = int(realdate.minute) 3248 elif tunits == 'milliseconds': 3249 for it in range(dimt): 3250 realdate = refdate + dt.timedelta(milliseconds=float(times[it])) 3251 realdates[it,0] = int(realdate.year) 3252 realdates[it,1] = int(realdate.month) 3253 realdates[it,2] = int(realdate.day) 3254 realdates[it,3] = int(realdate.hour) 3255 realdates[it,4] = int(realdate.second) 3256 realdates[it,5] = int(realdate.minute) 3257 else: 3258 print errormsg 3259 print ' spacemean: time units "' + tunits + '" not ready!!!!' 3260 ncf.close() 3261 quit(-1) 3196 # if tunits == 'years': 3197 # for it in range(dimt): 3198 # realdate = refdate + dt.timedelta(years=float(times[it])) 3199 # realdates[it] = int(realdate.year) 3200 # elif tunits == 'months': 3201 # for it in range(dimt): 3202 # realdate = refdate + dt.timedelta(months=float(times[it])) 3203 # realdates[it] = int(realdate.year) 3204 if timeuinf.Tunits == 'weeks': 3205 for it in range(dimt): 3206 realdate = timeuinf.refdateDT + dt.timedelta(weeks=float(times[it])) 3207 realdates[it,0] = int(realdate.year) 3208 realdates[it,1] = int(realdate.month) 3209 realdates[it,2] = int(realdate.day) 3210 realdates[it,3] = int(realdate.hour) 3211 realdates[it,4] = int(realdate.second) 3212 realdates[it,5] = int(realdate.minute) 3213 elif timeuinf.Tunits == 'days': 3214 for it in range(dimt): 3215 realdate = timeuinf.refdateDT + dt.timedelta(days=float(times[it])) 3216 realdates[it,0] = int(realdate.year) 3217 realdates[it,1] = int(realdate.month) 3218 realdates[it,2] = int(realdate.day) 3219 realdates[it,3] = int(realdate.hour) 3220 realdates[it,4] = int(realdate.second) 3221 realdates[it,5] = int(realdate.minute) 3222 elif timeuinf.Tunits == 'hours': 3223 for it in range(dimt): 3224 realdate = timeuinf.refdateDT + dt.timedelta(hours=float(times[it])) 3225 realdates[it,0] = int(realdate.year) 3226 realdates[it,1] = int(realdate.month) 3227 realdates[it,2] = int(realdate.day) 3228 realdates[it,3] = int(realdate.hour) 3229 realdates[it,4] = int(realdate.second) 3230 realdates[it,5] = int(realdate.minute) 3231 elif timeuinf.Tunits == 'minutes': 3232 for it in range(dimt): 3233 realdate = timeuinf.refdateDT + dt.timedelta(minutes=float(times[it])) 3234 realdates[it,0] = int(realdate.year) 3235 realdates[it,1] = int(realdate.month) 3236 realdates[it,2] = int(realdate.day) 3237 realdates[it,3] = int(realdate.hour) 3238 realdates[it,4] = int(realdate.second) 3239 realdates[it,5] = int(realdate.minute) 3240 elif timeuinf.Tunits == 'seconds': 3241 for it in range(dimt): 3242 realdate = timeuinf.refdateDT + dt.timedelta(seconds=float(times[it])) 3243 realdates[it,0] = int(realdate.year) 3244 realdates[it,1] = int(realdate.month) 3245 realdates[it,2] = int(realdate.day) 3246 realdates[it,3] = int(realdate.hour) 3247 realdates[it,4] = int(realdate.second) 3248 realdates[it,5] = int(realdate.minute) 3249 elif timeuinf.Tunits == 'milliseconds': 3250 for it in range(dimt): 3251 realdate = timeuinf.refdateDT + dt.timedelta(milliseconds=float(times[it])) 3252 realdates[it,0] = int(realdate.year) 3253 realdates[it,1] = int(realdate.month) 3254 realdates[it,2] = int(realdate.day) 3255 realdates[it,3] = int(realdate.hour) 3256 realdates[it,4] = int(realdate.second) 3257 realdates[it,5] = int(realdate.minute) 3258 else: 3259 print errormsg 3260 print ' ' + ": time units '" + tunits + "' not ready!!!!" 3261 print ' available ones', tunitsavail 3262 ncf.close() 3263 quit(-1) 3262 3264 3263 3265 # Variable values (assuming time as first dimension) 3264 3266 ## 3265 var = ncf.variables[varn]3266 varinf = variable_inf(var)3267 if gen.searchInlist(varinf.attributes, 'scale_factor'):3268 scalefact = var.getncattr('scale_factor')3269 print ' spacemean: data has a scale factor of ', scalefact3270 varinf.dtype=type(np.float(1.))3271 else:3272 scalefact = 1.3273 3274 if gen.searchInlist(varinf.attributes, 'add_offset'):3275 offset = var.getncattr('add_offset')3276 print ' spacemean: data has an offset of ', offset3277 else:3278 offset = 0.3267 var = ncf.variables[varn] 3268 varinf = variable_inf(var) 3269 if gen.searchInlist(varinf.attributes, 'scale_factor'): 3270 scalefact = var.getncattr('scale_factor') 3271 print ' ' + fname + ": data has a scale factor of ", scalefact 3272 varinf.dtype=type(np.float(1.)) 3273 else: 3274 scalefact = 1. 3275 3276 if gen.searchInlist(varinf.attributes, 'add_offset'): 3277 offset = var.getncattr('add_offset') 3278 print ' ' + fname + ": data has an offset of ", offset 3279 else: 3280 offset = 0. 3279 3281 3280 3282 # varvals = var[:] 3281 vardims = var.shape3282 varshape = len(vardims)3283 vardimns = var.dimensions3283 vardims = var.shape 3284 varshape = len(vardims) 3285 vardimns = var.dimensions 3284 3286 ## print ' spacemean: Shape of data: ',varshape, ':' , vardims 3285 dimt=vardims[0]3286 vardnames = []3287 dimt=vardims[0] 3288 vardnames = [] 3287 3289 3288 3290 # Spatial average spatial weigthed 3289 3291 ## 3290 lonvar = ncf.variables['lon'] 3291 latvar = ncf.variables['lat'] 3292 3293 if not len(lonvar.shape) == 2: 3294 lonv = lonvar[:] 3295 latv = latvar[:] 3296 dx=lonvar.shape[0] 3297 dy=latvar.shape[0] 3298 lonval = np.zeros((dy, dx), dtype=np.float64) 3299 latval = np.zeros((dy, dx), dtype=np.float64) 3300 for iy in range(dy): 3301 lonval[iy,:] = lonv 3302 for ix in range(dx): 3303 latval[:,ix] = latv 3304 else: 3305 lonval = lonvar[:] 3306 latval = latvar[:] 3307 3308 weightsv = abs(np.cos(latval*np.pi/180.)) 3309 3310 if varinf.Ndims == 1: 3311 print errormsg 3312 print ' spacemean: You can not compute a space mean for a ', varinf.Ndims, 'D var!!!' 3313 ncf.close() 3314 quit(-1) 3315 elif varinf.Ndims== 2: 3316 print errormsg 3317 print ' spacemean: You can not compute a space mean for a ', varinf.Ndims, 'D var!!!' 3318 ncf.close() 3319 quit(-1) 3320 elif varinf.Ndims == 3: 3321 varstats = np.ones((dimt, 8), dtype=np.float64) 3322 varstats = varstats*varfil 3323 varquant = np.ones((dimt, 21), dtype=np.float64) 3324 varquant = varquant*varfil 3325 vardnames.append(vardimns[0]) 3326 dy=vardims[1] 3327 dx=vardims[2] 3328 for it in range(dimt): 3329 if not varinf.FillValue is None: 3330 varvl = var[it,:,:] 3331 varval = np.where(varvl == varinf.FillValue, None, varvl) 3332 else: 3333 varval = var[it,:,:] 3334 percendone(it,dimt,5,'computed space statistics') 3335 varst = gen.statsVal(varval) 3336 varstwgt = statsValWeigthed(varval, weightsv) 3337 varstats[it,0] = varst.minv 3338 varstats[it,1] = varst.maxv 3339 varstats[it,2] = varst.meanv 3340 varstats[it,3] = varst.mean2v 3341 varstats[it,4] = varst.stdv 3342 varquant[it,:] = varst.quantilesv 3343 varstats[it,5] = varstwgt.meanv 3344 varstats[it,6] = varstwgt.mean2v 3345 varstats[it,7] = varstwgt.stdv 3346 elif varshape == 4: 3347 varstats = np.ones((dimt, vardims[1], 8), dtype=np.float64) 3348 varstats = varstats*varfil 3349 varquant = np.ones((dimt, vardims[1], 21), dtype=np.float64) 3350 varquant = varquant*varfil 3351 vardimnames = (str(vardimns[0]), str(vardimns[1])) 3352 vardnames.append(vardimns[0]) 3353 vardnames.append(vardimns[1]) 3354 dy=vardims[2] 3355 dx=vardims[3] 3356 for it in range(dimt): 3357 for ik in range(vardims[1]): 3358 if not varinf.FillValue is None: 3359 varvl = var[it,ik,:,:] 3360 varval = np.where(varvl == varinf.FillValue, None, varvl) 3361 else: 3362 varval = var[it,ik,:,:] 3363 percendone(it*vardims[1]+ik,dimt*vardims[1],5,'computed space statistics') 3364 varst = gen.statsVal(varval) 3365 varstwgt = statsValWeigthed(varval, weightsv) 3366 varstats[it,ik,0] = varst.minv 3367 varstats[it,ik,1] = varst.maxv 3368 varstats[it,ik,2] = varst.meanv 3369 varstats[it,ik,3] = varst.mean2v 3370 varstats[it,ik,4] = varst.stdv 3371 varquant[it,ik,:] = varst.quantilesv 3372 varstats[it,ik,5] = varstwgt.meanv 3373 varstats[it,ik,6] = varstwgt.mean2v 3374 varstats[it,ik,7] = varstwgt.stdv 3375 elif varshape == 5: 3376 varstats = np.ones((dimt, vardims[1], vardims[2], 8), dtype=np.float64) 3377 varstats = varstats*varfil 3378 varquant = np.ones((dimt, vardims[1], vardims[2], 21), dtype=np.float64) 3379 varquant = varquant*varfil 3380 vardnames.append(vardimns[0]) 3381 vardnames.append(vardimns[1]) 3382 vardnames.append(vardimns[2]) 3383 dy=vardims[3] 3384 dx=vardims[4] 3385 for it in range(dimt): 3386 for ik in range(vardims[1]): 3387 for il in range(vardims[2]): 3388 if not varinf.FillValue is None: 3389 varvl = var[it,ik,il,:,:] 3390 varval = np.where(varvl == varinf.FillValue, None, varvl) 3391 else: 3392 varval = var[it,ik,il,:,:] 3393 3394 percendone(it*vardims[1]*vardims[2]+ik*vardims[1]+il,dimt*vardims[1]*vardims[2],5,'computed space statistics') 3395 varst = gen.statsVal(varval) 3396 varstwgt = statsValWeigthed(varval, weightsv) 3397 varstats[it,ik,il,0] = varst.minv 3398 varstats[it,ik,il,1] = varst.maxv 3399 varstats[it,ik,il,2] = varst.meanv 3400 varstats[it,ik,il,3] = varst.mean2v 3401 varstats[it,ik,il,4] = varst.stdv 3402 varquant[it,ik,il,:] = varst.quantilesv 3403 varstats[it,ik,il,5] = varstwgt.meanv 3404 varstats[it,ik,il,6] = varstwgt.mean2v 3405 varstats[it,ik,il,7] = varstwgt.stdv 3406 else: 3407 print errormsg 3408 print ' spacemean: ', varshape, ' shape of matrix not prepared !' 3409 ncf.close() 3410 quit(-1) 3411 3412 vardimnames = tuple(vardnames) 3292 olonvar = ncf.variables['lon'] 3293 olatvar = ncf.variables['lat'] 3294 3295 lonval, latval = gen.lonlat2D(olonvar[:],olatvar[:]) 3296 3297 weightsv = abs(np.cos(latval*np.pi/180.)) 3298 3299 if varinf.Ndims == 1: 3300 print errormsg 3301 print ' ' + fname + ": You can not compute a space mean for a ", \ 3302 varinf.Ndims, 'D var!!!' 3303 ncf.close() 3304 quit(-1) 3305 elif varinf.Ndims== 2: 3306 print errormsg 3307 print ' ' + fname + ': You can not compute a space mean for a ', \ 3308 varinf.Ndims, 'D var!!!' 3309 ncf.close() 3310 quit(-1) 3311 elif varinf.Ndims == 3: 3312 varstats = np.ones((dimt, 8), dtype=np.float64) 3313 varstats = varstats*varfil 3314 varquant = np.ones((dimt, 21), dtype=np.float64) 3315 varquant = varquant*varfil 3316 vardnames.append(vardimns[0]) 3317 dy=vardims[1] 3318 dx=vardims[2] 3319 for it in range(dimt): 3320 if not varinf.FillValue is None: 3321 varvl = var[it,:,:] 3322 varval0 = np.where(varvl == varinf.FillValue, None, varvl) 3323 else: 3324 varval0 = var[it,:,:] 3325 varval = varval0.flatten() 3326 gen.percendone(it,dimt,5,'computed space statistics') 3327 varst = gen.statsVal(varval) 3328 varstwgt = gen.statsValWeigthed(varval, weightsv.flatten()) 3329 varstats[it,0] = varst.minv 3330 varstats[it,1] = varst.maxv 3331 varstats[it,2] = varst.meanv 3332 varstats[it,3] = varst.mean2v 3333 varstats[it,4] = varst.stdv 3334 varquant[it,:] = varst.quantilesv 3335 varstats[it,5] = varstwgt.meanv 3336 varstats[it,6] = varstwgt.mean2v 3337 varstats[it,7] = varstwgt.stdv 3338 elif varshape == 4: 3339 varstats = np.ones((dimt, vardims[1], 8), dtype=np.float64) 3340 varstats = varstats*varfil 3341 varquant = np.ones((dimt, vardims[1], 21), dtype=np.float64) 3342 varquant = varquant*varfil 3343 vardimnames = (str(vardimns[0]), str(vardimns[1])) 3344 vardnames.append(vardimns[0]) 3345 vardnames.append(vardimns[1]) 3346 dy=vardims[2] 3347 dx=vardims[3] 3348 for it in range(dimt): 3349 for ik in range(vardims[1]): 3350 if not varinf.FillValue is None: 3351 varvl = var[it,ik,:,:] 3352 varval0 = np.where(varvl == varinf.FillValue, None, varvl) 3353 else: 3354 varval0 = var[it,ik,:,:] 3355 varval = varval0.flatten() 3356 gen.percendone(it*vardims[1]+ik,dimt*vardims[1],5,'computed space statistics') 3357 varst = gen.statsVal(varval) 3358 varstwgt = gen.statsValWeigthed(varval, weightsv) 3359 varstats[it,ik,0] = varst.minv 3360 varstats[it,ik,1] = varst.maxv 3361 varstats[it,ik,2] = varst.meanv 3362 varstats[it,ik,3] = varst.mean2v 3363 varstats[it,ik,4] = varst.stdv 3364 varquant[it,ik,:] = varst.quantilesv 3365 varstats[it,ik,5] = varstwgt.meanv 3366 varstats[it,ik,6] = varstwgt.mean2v 3367 varstats[it,ik,7] = varstwgt.stdv 3368 elif varshape == 5: 3369 varstats = np.ones((dimt, vardims[1], vardims[2], 8), dtype=np.float64) 3370 varstats = varstats*varfil 3371 varquant = np.ones((dimt, vardims[1], vardims[2], 21), dtype=np.float64) 3372 varquant = varquant*varfil 3373 vardnames.append(vardimns[0]) 3374 vardnames.append(vardimns[1]) 3375 vardnames.append(vardimns[2]) 3376 dy=vardims[3] 3377 dx=vardims[4] 3378 for it in range(dimt): 3379 for ik in range(vardims[1]): 3380 for il in range(vardims[2]): 3381 if not varinf.FillValue is None: 3382 varvl = var[it,ik,il,:,:] 3383 varval = np.where(varvl == varinf.FillValue, None, varvl) 3384 else: 3385 varval = var[it,ik,il,:,:] 3386 3387 gen.percendone(it*vardims[1]*vardims[2]+ik*vardims[1]+il,dimt*\ 3388 vardims[1]*vardims[2],5,'computed space statistics') 3389 varst = gen.statsVal(varval) 3390 varstwgt = gen.statsValWeigthed(varval, weightsv) 3391 varstats[it,ik,il,0] = varst.minv 3392 varstats[it,ik,il,1] = varst.maxv 3393 varstats[it,ik,il,2] = varst.meanv 3394 varstats[it,ik,il,3] = varst.mean2v 3395 varstats[it,ik,il,4] = varst.stdv 3396 varquant[it,ik,il,:] = varst.quantilesv 3397 varstats[it,ik,il,5] = varstwgt.meanv 3398 varstats[it,ik,il,6] = varstwgt.mean2v 3399 varstats[it,ik,il,7] = varstwgt.stdv 3400 else: 3401 print errormsg 3402 print ' ' + fname + ": shape ", varshape, " of matrix not prepared !!" 3403 ncf.close() 3404 quit(-1) 3405 3406 vardimnames = tuple(vardnames) 3413 3407 # print ' shape of desired values: ', vardesiredvalues.shape 3414 3408 # Creation of file 3415 3409 ## 3416 3410 3417 ncfo = NetCDFFile( ofile, 'w')3418 3419 vartype = var.dtype3420 varattr = var.ncattrs()3411 ncfo = NetCDFFile( ofile, 'w') 3412 3413 vartype = var.dtype 3414 varattr = var.ncattrs() 3421 3415 3422 3416 # Checking dimensions 3423 3417 ## 3424 newdims = ncfo.dimensions3425 Nvardnames = len(vardimnames)3426 for idim in range(Nvardnames):3427 rdim = vardimnames[idim]3428 if not gen.searchInlist(newdims, rdim):3429 if not rdim == 'time':3430 print ' spacemean: Adding dimension ' + rdim3431 ncfo.sync()3432 ncf.close()3433 ncfo.close()3434 fdimadd(ncfile + ',' + rdim, ofile)3435 ncf = NetCDFFile(ncfile,'r')3436 ncfo = NetCDFFile(ofile,'a')3437 else:3438 ncfo.createDimension('time', None)3418 newdims = ncfo.dimensions 3419 Nvardnames = len(vardimnames) 3420 for idim in range(Nvardnames): 3421 rdim = vardimnames[idim] 3422 if not gen.searchInlist(newdims, rdim): 3423 if not rdim == 'time': 3424 print ' spacemean: Adding dimension ' + rdim 3425 ncfo.sync() 3426 ncf.close() 3427 ncfo.close() 3428 fdimadd(ncfile + ',' + rdim, ofile) 3429 ncf = NetCDFFile(ncfile,'r') 3430 ncfo = NetCDFFile(ofile,'a') 3431 else: 3432 ncfo.createDimension('time', None) 3439 3433 3440 3434 # Checking fill value 3441 3435 ## 3442 if gen.searchInlist(varattr, '_FillValue'): 3443 varfil = var._FillValue 3444 else: 3445 varfil = False 3446 3447 Nstats = len(statsn) 3448 for ist in range(Nstats): 3449 if statsn[ist] == 'quant': 3450 print ist, statsn[ist]##, ': ', varquant[int(dimt/2),10] 3451 newdim = ncfo.createDimension('quant', 21) 3452 newvardnames = list(vardnames) 3453 newvardnames.append('quant') 3454 newvar = ncfo.createVariable(varn + statsn[ist], varinf.dtype, tuple(newvardnames), fill_value=varfil) 3455 newvar[:] = varquant 3436 if gen.searchInlist(varattr, '_FillValue'): 3437 varfil = var._FillValue 3456 3438 else: 3457 print ist, statsn[ist]##, ': ', varstats[int(dimt/2),ist] 3458 newvar = ncfo.createVariable(varn + statsn[ist], varinf.dtype, vardimnames, fill_value=varfil) 3459 if varshape == 3: 3460 newvar[:] = varstats[:,ist]*1. 3461 elif varshape == 4: 3462 newvar[:] = varstats[:,:,ist]*1. 3463 elif varshape == 5: 3464 newvar[:] = varstats[:,:,:,ist]*1. 3465 3466 newvar = ncfo.variables[varn + statsn[ist]] 3467 for attr in varattr: 3468 newvarattrs = newvar.ncattrs() 3469 attrv = var.getncattr(attr) 3470 if not gen.searchInlist(newvarattrs, attr): 3471 if attr != 'scale_factor' and attr != 'add_offset' and attr != 'valid_range' \ 3472 and attr != 'unpacked_valid_range' and attr != 'actual_range' : 3439 varfil = False 3440 3441 Nstats = len(statsn) 3442 for ist in range(Nstats): 3443 if statsn[ist] == 'quant': 3444 print ist, statsn[ist]##, ': ', varquant[int(dimt/2),10] 3445 newdim = ncfo.createDimension('quant', 21) 3446 newvardnames = list(vardnames) 3447 newvardnames.append('quant') 3448 newvar = ncfo.createVariable(varn + statsn[ist], varinf.dtype, tuple(newvardnames), fill_value=varfil) 3449 newvar[:] = varquant 3450 else: 3451 print ist, statsn[ist]##, ': ', varstats[int(dimt/2),ist] 3452 newvar = ncfo.createVariable(varn + statsn[ist], varinf.dtype, vardimnames, fill_value=varfil) 3453 if varshape == 3: 3454 newvar[:] = varstats[:,ist]*1. 3455 elif varshape == 4: 3456 newvar[:] = varstats[:,:,ist]*1. 3457 elif varshape == 5: 3458 newvar[:] = varstats[:,:,:,ist]*1. 3459 3460 newvar = ncfo.variables[varn + statsn[ist]] 3461 for attr in varattr: 3462 newvarattrs = newvar.ncattrs() 3463 attrv = var.getncattr(attr) 3464 if not gen.searchInlist(newvarattrs, attr): 3465 if attr != 'scale_factor' and attr != 'add_offset' and attr != 'valid_range' \ 3466 and attr != 'unpacked_valid_range' and attr != 'actual_range' : 3473 3467 # if not statsn[ist] == 'stdv' and not statsn[ist] == 'stdvwgt': 3474 print 'attr:', attr3475 newvar.setncattr(attr, attrv)3468 print 'attr:', attr 3469 newvar.setncattr(attr, attrv) 3476 3470 # else: 3477 3471 # newvar.setncattr(attr, attrv) 3478 3472 3479 newvar.setncattr('cell_methods', 'space ' + statslongn[ist] + ' all domain ' + str(dy) + 'x' + str(dx)) 3473 newvar.setncattr('cell_methods', 'space ' + statslongn[ist] + ' all domain '+\ 3474 str(dy) + 'x' + str(dx)) 3480 3475 3481 3476 ## print ' Adding time variable' 3482 vartdims = times.dimensions 3483 vartype = times.dtype 3484 varattr = times.ncattrs() 3485 3486 newvar = ncfo.createVariable('time', vartype, vartdims, fill_value=varfil) 3487 newvar = ncfo.variables['time'] 3488 newvar[:] = times 3489 3490 ncf.close() 3491 ncfo.sync() 3492 ncfo.close() 3493 fattradd('time', ncfile + ':time', ofile) 3494 fvaradd(ncfile + ',lon', ofile) 3495 fvaradd(ncfile + ',lat', ofile) 3496 3497 ncfo = NetCDFFile(ofile,'a') 3498 newvar = ncfo.variables['time'] 3499 newvarattrs = newvar.ncattrs() 3500 if gen.searchInlist(newvarattrs, 'bounds'): 3501 if newvar.getncattr('bounds') == 'time_bnds': 3502 ncf = NetCDFFile(ncfile,'r') 3503 tbnds = ncf.variables['time_bnds'] 3504 vardims = tbnds.dimensions 3505 vartype = tbnds.dtype 3506 varattr = tbnds.ncattrs() 3507 ncfo.createDimension('bnds', 2) 3508 newvar = ncfo.createVariable('time_bnds', vartype, vardims, fill_value=varfil) 3509 newvar[:] = tbnds[:] 3510 3511 ncf.close() 3512 ncfo.sync() 3513 ncfo.close() 3514 fattradd('time_bnds', ncfile + ':time_bnds', ofile) 3515 else: 3516 ncfo.close() 3517 else: 3518 ncfo.close() 3519 3520 fgaddattr(ncfile, ofile) 3521 3522 print ' spacemean: File "' + ofile + '" as space mean of "' + varn + '" has been created' 3523 3524 return 3477 vartdims = times.dimensions 3478 vartype = times.dtype 3479 varattr = times.ncattrs() 3480 3481 newvar = ncfo.createVariable('time', vartype, vartdims, fill_value=varfil) 3482 #newvar = ncfo.variables['time'] 3483 newvar[:] = times[:] 3484 3485 ncf.close() 3486 ncfo.sync() 3487 ncfo.close() 3488 fattradd('time', ncfile + ':time', ofile) 3489 fvaradd(ncfile + ',lon', ofile) 3490 fvaradd(ncfile + ',lat', ofile) 3491 3492 ncfo = NetCDFFile(ofile,'a') 3493 newvar = ncfo.variables['time'] 3494 newvarattrs = newvar.ncattrs() 3495 if gen.searchInlist(newvarattrs, 'bounds'): 3496 if newvar.getncattr('bounds') == 'time_bnds': 3497 ncf = NetCDFFile(ncfile,'r') 3498 tbnds = ncf.variables['time_bnds'] 3499 vardims = tbnds.dimensions 3500 vartype = tbnds.dtype 3501 varattr = tbnds.ncattrs() 3502 ncfo.createDimension('bnds', 2) 3503 newvar = ncfo.createVariable('time_bnds', vartype, vardims, fill_value=varfil) 3504 newvar[:] = tbnds[:] 3505 3506 ncf.close() 3507 ncfo.sync() 3508 ncfo.close() 3509 fattradd('time_bnds', ncfile + ':time_bnds', ofile) 3510 else: 3511 ncfo.close() 3512 else: 3513 ncfo.close() 3514 3515 fgaddattr(ncfile, ofile) 3516 ncfo = NetCDFFile(ofile, 'a') 3517 add_global_PyNCplot(ncfo, 'nc_var_tools', fname, '1.1') 3518 3519 print ' ' + fname + ": File '" + ofile + "' as space mean of '" + varn + \ 3520 "' has been created" 3521 3522 return 3525 3523 3526 3524 def timemean(values, ncfile, varn): … … 3784 3782 varval = var[:,iz,iy,ix] 3785 3783 3786 gen.percendone(iz*dy*dx+iy*dx+ix,dz*dx*dy,5,'computed time statistics') 3784 gen.percendone(iz*dy*dx+iy*dx+ix,dz*dx*dy, 5, \ 3785 'computed time statistics') 3787 3786 varst = gen.statsVal(varval) 3788 3787 var2st = gen.stats2Val(timesv, varval, powerv) … … 3829 3828 varval = var[:,iN,iz,iy,ix] 3830 3829 3831 gen.percendone(iN*dy*dx*dz+iz*dy*dx+iy*dx+ix,dn*dz*dx*dy,5,'computed time statistics') 3830 gen.percendone(iN*dy*dx*dz+iz*dy*dx+iy*dx+ix,dn*dz*dx*dy,5, \ 3831 'computed time statistics') 3832 3832 varst = gen.statsVal(varval) 3833 3833 var2st = gen.stats2Val(timesv, varval, powerv) … … 12665 12665 for i in range(Ngrid2,dh1-Ngrid2+1): 12666 12666 for j in range(Ngrid2,dh2-Ngrid2+1): 12667 percendone(i*(dh1-Ngrid)*1.+j,(dh1-Ngrid)*(dh2-Ngrid)*1., 1.,\12668 vn + ' filtered: ' + str(i) + ', ' + str(j))12667 gen.percendone(i*(dh1-Ngrid)*1.+j,(dh1-Ngrid)*(dh2-Ngrid)*1., \ 12668 1., vn + ' filtered: ' + str(i) + ', ' + str(j)) 12669 12669 varslice = [] 12670 12670 varslicesum = []
Note: See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/LMDZ_WRF/chrome/site/your_project_logo.png)