def initialize_netCDF_memfiles(outfile, ncname, ny, nx, nmembers, \ lats_in, lons_in): """ initialize the netCDF files for writing probability output""" from netCDF4 import Dataset import sys import numpy as np print ('initializing netCDF file ',outfile) if ncname == 'nc_fullfield': nc_fullfield = Dataset(outfile,'w',format='NETCDF4_CLASSIC') ncout = nc_fullfield xf = ncout.createDimension('xf',nx) xvf = ncout.createVariable('xf','f4',('xf',)) xvf.long_name = "eastward grid point number on 1/4-degree lat-lon grid" xvf.units = "n/a" yf = ncout.createDimension('yf',ny) yvf = ncout.createVariable('yf','f4',('yf',)) yvf.long_name = "northward grid point number on 1/4-degree lat-lon grid" yvf.units = "n/a" sample = ncout.createDimension('sample',None) samplev = ncout.createVariable('samplev','i4',('sample',)) samplev.units = "n/a" member = ncout.createDimension('member',nmembers) memberv = ncout.createVariable('memberv','i4',('member',)) memberv.units = "n/a" lons_out = ncout.createVariable('lons','f4',('yf','xf',)) lons_out.long_name = "longitude" lons_out.units = "degrees_east" lats_out = ncout.createVariable('lats','f4',('yf','xf',)) lats_out.long_name = "latitude" lats_out.units = "degrees_north" yyyymmddhh_init = ncout.createVariable('yyyymmddhh_init','i4',('sample',)) yyyymmddhh_init.longname = "Initial condition date/time in yyyymmddhh format" yyyymmddhh_fcst = ncout.createVariable('yyyymmddhh_fcst','i4',('sample',)) yyyymmddhh_fcst.longname = "Forecast valid date/time in yyyymmddhh format" # --- declare the single-level variable information on lat-lon grid precip_ens_raw = ncout.createVariable('precip_ens_raw','f4',\ ('sample','member','yf','xf',),zlib=True,least_significant_digit=3) precip_ens_raw.units = "n/a" precip_ens_raw.long_name = 'Raw member precipitation amount (mm)' precip_ens_raw.valid_range = [0.,1000.] precip_ens_raw.missing_value = np.array(-99.99,dtype=np.float32) precip_ens_qmapped = ncout.createVariable('precip_ens_qmapped','f4',\ ('sample','member','yf','xf',),zlib=True,least_significant_digit=3) precip_ens_qmapped.units = "n/a" precip_ens_qmapped.long_name = 'Quantile mapped member precipitation amount (mm)' precip_ens_qmapped.valid_range = [0.,1000.] precip_ens_qmapped.missing_value = np.array(-99.99,dtype=np.float32) ensmean_raw = ncout.createVariable('ensmean_raw','f4',\ ('sample','yf','xf',),zlib=True,least_significant_digit=3) ensmean_raw.units = "mm" ensmean_raw.long_name = 'Raw ensemble-mean precicipitation amount (mm)' ensmean_raw.valid_range = [0.,200.] ensmean_raw.missing_value = np.array(-99.99,dtype=np.float32) ensmean_qmapped = ncout.createVariable('ensmean_qmapped',\ 'f4',('sample','yf','xf',), zlib=True,least_significant_digit=3) ensmean_qmapped.units = "mm" ensmean_qmapped.long_name = 'Quantile-mapped ensemble-mean '+\ 'precicipitation amount (mm)' ensmean_qmapped.valid_range = [0.,200.] ensmean_qmapped.missing_value = np.array(-99.99,dtype=np.float32) # ---- metadata ncout.title = 'NDFD CONUS gridded member and mean precipitation amounts'+\ ', raw and quantile mapped' ncout.history = "GEFSv12 implemented at NCEP/EMC Sep 2020" ncout.institution = "NCEP/EMC and PSL" ncout.platform = "" ncout.references = "note Jeff Whitaker (jeffrey.s.whitaker@noaa.gov)" + \ " has a dateutils.py library for various date processing functions " + \ " that may help you with manipulating forecast and analyzed dates. " # ---- initialize xvf[:] = np.arange(nx) yvf[:] = np.arange(ny) lons_out[:] = lons_in[:,:] lats_out[:] = lats_in[:,:] memberv[:] = range(nmembers) nc_fullfield.close() istat = 0 return istat