Changeset 99
Author: Trond Kristiansen
(2010/02/08 14:02) Over 2 years ago
Important commit that solves a number of issues. First of all, all result files are now completely CF compliant. Second, a subset of the input data can now be chosen using max and min of longitude and latitude coordinates. This makes it much faster to read input data that may be global such as SODA. The solution required me to write a new module called IOsubset.py. The module contains some handy functions for getting the indices of an input grid and to combine a grid that runs from 0-360 degrees longitude into a grid that runs from -180 to 180 instead in order of making the extraction of data for the North Atlantic continuos.
elif grdfilename=="/Users/trond/Projects/arcwarm/nordic/imr_nordic_4km.nc":elif grdfilename=="/Users/trond/Projects/Roms/Nordic/Inputs/imr_nordic_4km.nc":# plotData.contourMap(grdROMS,grdMODEL,Zg,k,var)#plotData.contourMap(grdROMS,grdMODEL,np.squeeze(array1[0,:,:]),1,var)f1.Conventions = "CF-1.0"f1.createDimension('xi_rho', grdROMS.xi_rho)f1.createDimension('xi_rho', grdROMS.xi_rho)f1.createDimension('eta_rho', grdROMS.eta_rho)f1.createDimension('eta_rho', grdROMS.eta_rho)f1.createDimension('s_rho', len(grdROMS.s_rho))f1.createDimension('s_rho', len(grdROMS.s_rho))f1.createDimension('s_w', len(grdROMS.s_w))f1.createDimension('s_w', len(grdROMS.s_w))vnc = f1.createVariable('lon_rho', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('lon_rho', 'd', ('eta_rho','xi_rho',),zlib=False)vnc.long_name = 'Longitude at RHO points'vnc.long_name = 'Longitude of RHO-points'vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_rho', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('lat_rho', 'd', ('eta_rho','xi_rho',),zlib=False)vnc.long_name = 'Latitude at RHO points'vnc.long_name = 'Latitude of RHO-points'vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lon_u', 'd', ('eta_u','xi_u',))vnc = f1.createVariable('lon_u', 'd', ('eta_u','xi_u',),zlib=False)vnc.long_name = 'Longitude at U points'vnc.long_name = 'Longitude of U-points'vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_u', 'd', ('eta_u','xi_u',))vnc = f1.createVariable('lat_u', 'd', ('eta_u','xi_u',),zlib=False)vnc.long_name = 'Latitude at U points'vnc.long_name = 'Latitude of U-points'vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lon_v', 'd', ('eta_v','xi_v',))vnc = f1.createVariable('lon_v', 'd', ('eta_v','xi_v',),zlib=False)vnc.long_name = 'Longitude at V points'vnc.long_name = 'Longitude of V-points'vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_v', 'd', ('eta_v','xi_v',))vnc = f1.createVariable('lat_v', 'd', ('eta_v','xi_v',),zlib=False)vnc.long_name = 'Latitude at V points'vnc.long_name = 'Latitude of V-points'vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('h', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('lat_psi', 'd', ('eta_psi','xi_psi',),zlib=False)vnc.long_name = 'Latitude of PSI-points'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc[:,:] = grdROMS.lat_psivnc = f1.createVariable('lon_psi', 'd', ('eta_psi','xi_psi',),zlib=False)vnc.long_name = 'Longitude of PSI-points'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc[:,:] = grdROMS.lon_psivnc = f1.createVariable('h', 'd', ('eta_rho','xi_rho',),zlib=False)vnc = f1.createVariable('s_rho', 'd', ('s_rho',))vnc = f1.createVariable('s_rho', 'd', ('s_rho',),zlib=False)vnc = f1.createVariable('s_w', 'd', ('s_w',))vnc = f1.createVariable('s_w', 'd', ('s_w',),zlib=False)vnc= f1.createVariable('Cs_rho', 'd', ('s_rho',))vnc= f1.createVariable('Cs_rho', 'd', ('s_rho',),zlib=False)vnc=f1.createVariable('z_r','d',('s_rho','eta_rho','xi_rho',))vnc=f1.createVariable('z_r','d',('s_rho','eta_rho','xi_rho',),zlib=False)vnc=f1.createVariable('angle','d',('eta_rho','xi_rho',))vnc=f1.createVariable('angle','d',('eta_rho','xi_rho',),zlib=False)vnc=f1.createVariable('mask_rho','d',('eta_rho', 'xi_rho',))vnc.long_name = "mask on RHO-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_rhovnc=f1.createVariable('mask_u','d',('eta_u', 'xi_u',))v_time = f1.createVariable('ocean_time', 'd', ('ocean_time',),zlib=False)vnc.long_name = "mask on U-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_uvnc=f1.createVariable('mask_v','d',('eta_v', 'xi_v',))vnc.long_name = "mask on V-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_vv_time = f1.createVariable('ocean_time', 'd', ('ocean_time',))v_temp=f1.createVariable('temp', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',))v_temp=f1.createVariable('temp', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',),zlib=False)v_temp._FillValue = grdROMS.fill_valuev_salt=f1.createVariable('salt', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',))v_salt=f1.createVariable('salt', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',),zlib=False)v_salt.units = "nondimensional"v_salt.FillValue = grdROMS.fill_valuev_salt.field = "salinity, scalar, series"v_salt._FillValue = grdROMS.fill_valuev_ssh=f1.createVariable('zeta','f',('ocean_time','eta_rho', 'xi_rho',))v_ssh=f1.createVariable('zeta','f',('ocean_time','eta_rho', 'xi_rho',),zlib=False)v_ssh._FillValue = grdROMS.fill_valuev_u=f1.createVariable('u', 'f', ('ocean_time', 's_rho', 'eta_u', 'xi_u',))v_u=f1.createVariable('u', 'f', ('ocean_time', 's_rho', 'eta_u', 'xi_u',),zlib=False)v_u._FillValue = grdROMS.fill_valuev_v=f1.createVariable('v', 'f', ('ocean_time', 's_rho', 'eta_v', 'xi_v',))v_v=f1.createVariable('v', 'f', ('ocean_time', 's_rho', 'eta_v', 'xi_v',),zlib=False)v_v._FillValue = grdROMS.fill_valuev_vbar=f1.createVariable('vbar', 'f', ('ocean_time', 'eta_v','xi_v',))v_vbar=f1.createVariable('vbar', 'f', ('ocean_time', 'eta_v','xi_v',),zlib=False)v_vbar._FillValue = grdROMS.fill_valuev_ubar=f1.createVariable('ubar', 'f', ('ocean_time', 'eta_u', 'xi_u',))v_ubar=f1.createVariable('ubar', 'f', ('ocean_time', 'eta_u', 'xi_u',),zlib=False)v_ubar._FillValue = grdROMS.fill_valueif var.lower()=='temperature':print data1if var.lower()=='salinity':if var.lower()=='ssh':from datetime import datetime, timedeltaf1.createDimension('xi_rho', grdROMS.xi_rho)f1.createDimension('xi_rho', grdROMS.xi_rho)f1.createDimension('s_rho', len(grdROMS.s_rho))f1.createDimension('s_rho', len(grdROMS.s_rho))f1.createDimension('s_w', len(grdROMS.s_w))f1.createDimension('s_w', len(grdROMS.s_w))vnc = f1.createVariable('lon_rho', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('lon_rho', 'd', ('eta_rho','xi_rho',),zlib=False)vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_rho', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('lat_rho', 'd', ('eta_rho','xi_rho',),zlib=False)vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lon_u', 'd', ('eta_u','xi_u',))vnc = f1.createVariable('lon_u', 'd', ('eta_u','xi_u',),zlib=False)vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_u', 'd', ('eta_u','xi_u',))vnc = f1.createVariable('lat_u', 'd', ('eta_u','xi_u',),zlib=False)vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lon_v', 'd', ('eta_v','xi_v',))vnc = f1.createVariable('lon_v', 'd', ('eta_v','xi_v',),zlib=False)vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('lat_v', 'd', ('eta_v','xi_v',))vnc = f1.createVariable('lat_v', 'd', ('eta_v','xi_v',),zlib=False)vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lat_psi', 'd', ('eta_psi','xi_psi',))vnc = f1.createVariable('lat_psi', 'd', ('eta_psi','xi_psi',),zlib=False)vnc.units = 'degrees north'vnc.units = 'degree_north'vnc.standard_name = 'latitude'vnc = f1.createVariable('lon_psi', 'd', ('eta_psi','xi_psi',))vnc = f1.createVariable('lon_psi', 'd', ('eta_psi','xi_psi',),zlib=False)vnc.units = 'degrees east'vnc.units = 'degree_east'vnc.standard_name = 'longitude'vnc = f1.createVariable('h', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('h', 'd', ('eta_rho','xi_rho',),zlib=False)vnc = f1.createVariable('f', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('f', 'd', ('eta_rho','xi_rho',),zlib=False)vnc = f1.createVariable('pm', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('pm', 'd', ('eta_rho','xi_rho',),zlib=False)vnc = f1.createVariable('pn', 'd', ('eta_rho','xi_rho',))vnc = f1.createVariable('pn', 'd', ('eta_rho','xi_rho',),zlib=False)vnc = f1.createVariable('s_rho', 'd', ('s_rho',))vnc = f1.createVariable('s_rho', 'd', ('s_rho',),zlib=False)vnc = f1.createVariable('s_w', 'd', ('s_w',))vnc = f1.createVariable('s_w', 'd', ('s_w',),zlib=False)vnc= f1.createVariable('Cs_r', 'd', ('s_rho',))vnc= f1.createVariable('Cs_r', 'd', ('s_rho',),zlib=False)vnc= f1.createVariable('Cs_w', 'd', ('s_w',))vnc= f1.createVariable('Cs_w', 'd', ('s_w',),zlib=False)vnc=f1.createVariable('z_r','d',('s_rho','eta_rho','xi_rho',))vnc=f1.createVariable('z_r','d',('s_rho','eta_rho','xi_rho',),zlib=False)vnc=f1.createVariable('z_w','d',('s_w','eta_rho','xi_rho',))vnc=f1.createVariable('z_w','d',('s_w','eta_rho','xi_rho',),zlib=False)vnc=f1.createVariable('angle','d',('eta_rho','xi_rho',))vnc=f1.createVariable('angle','d',('eta_rho','xi_rho',),zlib=False)vnc=f1.createVariable('mask_rho','d',('eta_rho', 'xi_rho',))vnc.long_name = "mask on RHO-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_rhovnc=f1.createVariable('mask_u','d',('eta_u', 'xi_u',))v_time = f1.createVariable('ocean_time', 'd', ('ocean_time',),zlib=False)vnc.long_name = "mask at U-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_uvnc=f1.createVariable('mask_v','d',('eta_v', 'xi_v',))vnc.long_name = "mask at V-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_vvnc=f1.createVariable('mask_psi','d',('eta_psi', 'xi_psi',))vnc.long_name = "mask at PSI-points"vnc.option_0 = "land"vnc.option_1 = "water"vnc.FillValue = 1.0vnc[:,:]=grdROMS.mask_psiv_time = f1.createVariable('ocean_time', 'd', ('ocean_time',))v_u=f1.createVariable('u', 'f', ('ocean_time', 's_rho', 'eta_u', 'xi_u',))v_u=f1.createVariable('u', 'f', ('ocean_time', 's_rho', 'eta_u', 'xi_u',),zlib=False)v_u._FillValue = grdROMS.fill_valuev_v=f1.createVariable('v', 'f', ('ocean_time', 's_rho', 'eta_v', 'xi_v',))v_v=f1.createVariable('v', 'f', ('ocean_time', 's_rho', 'eta_v', 'xi_v',),zlib=False)v_v._FillValue = grdROMS.fill_valuev_salt=f1.createVariable('salt', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',))v_salt=f1.createVariable('salt', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',),zlib=False)v_salt.units = "nondimensional"v_salt._FillValue = grdROMS.fill_valuev_temp=f1.createVariable('temp', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',))v_temp=f1.createVariable('temp', 'f', ('ocean_time', 's_rho', 'eta_rho', 'xi_rho',),zlib=False)v_temp._FillValue = grdROMS.fill_valuev_ssh=f1.createVariable('zeta','f',('ocean_time','eta_rho', 'xi_rho',))v_ssh=f1.createVariable('zeta','f',('ocean_time','eta_rho', 'xi_rho',),zlib=False)v_ssh._FillValue = grdROMS.fill_valuev_ubar=f1.createVariable('ubar', 'f', ('ocean_time', 'eta_u', 'xi_u',))v_ubar=f1.createVariable('ubar', 'f', ('ocean_time', 'eta_u', 'xi_u',),zlib=False)v_ubar._FillValue = grdROMS.fill_valuev_vbar=f1.createVariable('vbar', 'f', ('ocean_time', 'eta_v','xi_v',))v_vbar=f1.createVariable('vbar', 'f', ('ocean_time', 'eta_v','xi_v',),zlib=False)v_vbar._FillValue = grdROMS.fill_valueif var=='vvel':"""Define the paths to the CORE data (only river file), and the SODA/HYCOM data""""""Set the input data MODEL type: Current options are SODA or HYCOM"""type='HYCOM'type='SODA'type='SODAMONTHLY'"""Define the paths to the CORE data (only river file)"""sodapath="/Volumes/HankRaid/SODA/"sodapath="/Volumes/MacintoshHD2/Datasets/SODA/"sodapath="/Volumes/MacintoshHD2/Datasets/SODAMonthly/"#sodapath="/Users/trond/Projects/arcwarm/SODAmonthly/"hycompath="/Users/trond/Projects/arcwarm/SODA/HYCOM/"#romsgridpath="/Users/trond/Projects/Roms/GOMsmall/Inputs/gom_grd_small.nc"#romsgridpath="/Users/trond/Projects/Roms/GOMfull/Inputs/gom_grd.nc"#romsgridpath="/Users/trond/Projects/Roms/GOMsmall/Inputs/ns8_grd.nc"#romsgridpath="/Users/trond/Projects/arcwarm/nordic/imr_nordic_4km.nc"# CONTAINS NAN romsgridpath="/Users/trond/Projects/Roms/GOMfull/Inputs/gom_grd.nc"#romsgridpath="/Users/trond/Projects/arcwarm/SODA/soda2roms/imr_nordic_8km.nc"#romsgridpath="/Users/trond/Projects/Roms/Nordic/Inputs/imr_nordic_4km.nc"#romsgridpath="/Users/trond/Projects/Roms/Nordic/Inputs/imr_nordic_8km.nc"#romsgridpath="/Users/trond/Projects/Roms/Julia/NATLC/Data/natl_40km.nc"end_julianday =95end_julianday =135"""Set the input data MODEL type: Current options are SODA or HYCOM"""type='HYCOM'type='SODA'type='SODAMONTHLY'# vars=['ssh','uvel','vvel']soda2roms.convertMODEL2ROMS(years,IDS,climName,initName,sodapath,romsgridpath,vars,show_progress,type,subset)soda2roms.convertMODEL2ROMS([1],[1,2,3],climName,initName,hycompath,romsgridpath,vars,show_progress,type,subset)#try:# import psyco# psyco.log()# psyco.full(memory=100)# psyco.profile(0.05, memory=100)# psyco.profile(0.2)#except ImportError:# passif grdROMS.grdName=='NATL':map = Basemap(lon_0=2,boundinglat=0,resolution='l',area_thresh=2000.,projection='npstere')levels = np.arange(-2.0, 30.0, 0.5)if var=='salinity':levels = np.arange(15.0, 40.0, 0.3)#plt.title('Variabel %s at depth %s'%(var,depthlevel))#plt.title('Variabel %s at depth %s'%(var,depthlevel))#plt.show()__modified__ = datetime(2009,10, 1)__modified__ = datetime(2010, 1, 7)__status__ = "Development, modified on 15.08.2008,01.10.2009,07.01.2010"#if var in ['temperature','salinity']:#for k in range(grdROMS.Nlevels):# for k in range(grdROMS.Nlevels):# print k# plotData.contourMap(grdROMS,grdMODEL,np.squeeze(outdata[k,:,:]),k,var)# plotData.contourMap(grdROMS,grdMODEL,np.squeeze(outdata[k,:,:]),k,var)def find_subset_indices(grdMODEL,min_lat,max_lat,min_lon,max_lon):def convertMODEL2ROMS(years,IDS,climName,initName,dataPath,romsgridpath,vars,show_progress,type,subset):"""Get the indices that covers the new grid, and enables us to only store a subset ofthe large input grid."""lat=grdMODEL.lat[:,0]lon=grdMODEL.lon[0,:]distances1 = []distances2 = []indices=[]index=0for point in lat:s1 = max_lat-point # (vector subtract)s2 = min_lat-point # (vector subtract)distances1.append((np.dot(s1, s1), point, index))distances2.append((np.dot(s2, s2), point, index))index=index+1distances1.sort()distances2.sort()indices.append(distances1[0])indices.append(distances2[0])distances1 = []distances2 = []index=0for point in lon:s1 = max_lon-point # (vector subtract)s2 = min_lon-point # (vector subtract)distances1.append((np.dot(s1, s1), point, index))distances2.append((np.dot(s2, s2), point, index))index=index+1distances1.sort()distances2.sort()indices.append(distances1[0])indices.append(distances2[0])""" Save final product: max_lat_indices,min_lat_indices,max_lon_indices,min_lon_indices"""grdMODEL.minJ=indices[1][2]grdMODEL.maxJ=indices[0][2]grdMODEL.minI=indices[3][2]grdMODEL.maxI=indices[2][2]def convertMODEL2ROMS(years,IDS,climName,initName,dataPath,romsgridpath,vars,show_progress,type):find_subset_indices(grdMODEL,min_lat=30, max_lat=90, min_lon=0, max_lon=360)IOsubset.findSubsetIndices(grdMODEL,min_lat=subset[0], max_lat=subset[1], min_lon=subset[2], max_lon=subset[3])grdMODEL.lat=grdMODEL.lat[grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI]#grdMODEL.lat=grdMODEL.lat[int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]grdMODEL.lon=grdMODEL.lon[grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI]#grdMODEL.lon=grdMODEL.lon[int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]print "---> Selected area in output file spans from (longitude=%3.2f,latitude=%3.2f) to (longitude=%3.2f,latitude=%3.2f)"%(grdROMS.lon_rho.min(),grdROMS.lat_rho.min(),grdROMS.lon_rho.max(),grdROMS.lat_rho.max())print "---> Selected area in input file spans from (longitude=%3.2f,latitude=%3.2f) to (longitude=%3.2f,latitude=%3.2f)"%(grdMODEL.lon.min(),grdMODEL.lat.min(),grdMODEL.lon.max(),grdMODEL.lat.max())variableNames=['TEMP','SALT','SSH','U','V']variableNames=['temp','salt','ssh','u','v']variableNames=['temperature','salinity','SSH','U','V'] # NATHAN FIXME; give correct name of hycom variablesif type=='SODA' or type=='SODAMONTHLY':"""The first iteration we want to organize the subset indices we want to extractfrom the input data to get the interpolation correct and to function fast"""IOsubset.organizeSplit(grdMODEL,grdROMS,type,varNames,cdf)if var=='temperature':"""Do the 3D variables first"""STdata=np.zeros((indexROMS_S_ST),dtype=np.float64)if var in ['temperature','salinity','uvel','vvel']:if type=="SODA": data = np.array(cdf.variables[str(variableNames[0])][0,:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])if type=="SODAMONTHLY": data = np.array(cdf.variables[str(variableNames[0])][:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])if time==0:if var=='temperature': varN=0; STdata=np.zeros((indexROMS_S_ST),dtype=np.float64)tmp=np.squeeze(data[0,:,:])if var=='salinity': varN=1; STdata=np.zeros((indexROMS_S_ST),dtype=np.float64)grdMODEL.mask = np.zeros((grdMODEL.lon.shape),dtype=np.float64)if var=='uvel': varN=3; Udata = np.zeros((indexROMS_S_U),dtype=np.float64)grdMODEL.mask[:,:] = np.where(tmp==grdROMS.fill_value,1,0)if var=='vvel': varN=4; Vdata = np.zeros((indexROMS_S_V),dtype=np.float64)if grdMODEL.splitExtract is True:if type=="SODA":data1 = cdf.variables[varNames[varN]][0,:,int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]data2 = cdf.variables[varNames[varN]][0,:,int(grdMODEL.indices[1,2]):int(grdMODEL.indices[1,3]),int(grdMODEL.indices[1,0]):int(grdMODEL.indices[1,1])]if type=="SODAMONTHLY":data1 = cdf.variables[str(varNames[varN])][:,int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]data2 = cdf.variables[str(varNames[varN])][:,int(grdMODEL.indices[1,2]):int(grdMODEL.indices[1,3]),int(grdMODEL.indices[1,0]):int(grdMODEL.indices[1,1])]data = np.concatenate((data1,data2),axis=2)if var=='salinity':else:STdata = np.zeros((indexROMS_S_ST),dtype=np.float64)if type=="SODA":if type=="SODA": data = np.array(cdf.variables[str(variableNames[1])][0,:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])data = cdf.variables[str(varNames[varN])][0,:,if type=="SODAMONTHLY": data = np.array(cdf.variables[str(variableNames[1])][:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]if type=="SODAMONTHLY":data = cdf.variables[str(varNames[varN])][:,int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]if time==0 and var==vars[0]:tmp=np.squeeze(data[0,:,:])grdMODEL.mask = np.zeros((grdMODEL.lon.shape),dtype=np.float64)grdMODEL.mask[:,:] = np.where(tmp==grdROMS.fill_value,1,0)"""2D varibles"""if type=="SODA": data = np.array(cdf.variables[str(variableNames[2])][0,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])if grdMODEL.splitExtract is True:if type=="SODAMONTHLY": data = np.array(cdf.variables[str(variableNames[2])][grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])if type=="SODA":data1 = cdf.variables[varNames[varN]][0,if var=='uvel':int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),Udata = np.zeros((indexROMS_S_U),dtype=np.float64)int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]if type=="SODA": data = np.array(cdf.variables[str(variableNames[3])][0,:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])data2 = cdf.variables[varNames[varN]][0,if type=="SODAMONTHLY": data = np.array(cdf.variables[str(variableNames[3])][:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])int(grdMODEL.indices[1,2]):int(grdMODEL.indices[1,3]),int(grdMODEL.indices[1,0]):int(grdMODEL.indices[1,1])]if var=='vvel':if type=="SODAMONTHLY":Vdata = np.zeros((indexROMS_S_V),dtype=np.float64)data1 = cdf.variables[str(varNames[varN])][int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),if type=="SODA": data = np.array(cdf.variables[str(variableNames[4])][0,:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]if type=="SODAMONTHLY": data = np.array(cdf.variables[str(variableNames[4])][:,grdMODEL.minJ:grdMODEL.maxJ,grdMODEL.minI:grdMODEL.maxI])data2 = cdf.variables[str(varNames[varN])][int(grdMODEL.indices[1,2]):int(grdMODEL.indices[1,3]),int(grdMODEL.indices[1,0]):int(grdMODEL.indices[1,1])]data = np.concatenate((data1,data2),axis=1)else:if type=="SODA":data = cdf.variables[str(varNames[varN])][0,int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]if type=="SODAMONTHLY":data = cdf.variables[str(varNames[varN])][int(grdMODEL.indices[0,2]):int(grdMODEL.indices[0,3]),int(grdMODEL.indices[0,0]):int(grdMODEL.indices[0,1])]"""Take the input data and horizontally interpolate to your grid."""