From c652d952198bb7fdbcb68f18a3c347ec7cc102d3 Mon Sep 17 00:00:00 2001 From: Bryan Raney Date: Mon, 23 Jan 2017 11:30:13 -0500 Subject: [PATCH 1/6] Add image for use on Wiki page --- docs/images/partial-cells.png | Bin 0 -> 19593 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/partial-cells.png diff --git a/docs/images/partial-cells.png b/docs/images/partial-cells.png new file mode 100644 index 0000000000000000000000000000000000000000..a83a6ded8e975285b03634f733408b1572e402c6 GIT binary patch literal 19593 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 btTpie5v_GkgxWDU00000NkvXXu0mjfzIgLo literal 0 HcmV?d00001 From 35a97d4b2f273632ddb6752ee0dbf6e8f1b65ea8 Mon Sep 17 00:00:00 2001 From: John Pender Date: Mon, 17 Jul 2017 16:10:43 -0800 Subject: [PATCH 2/6] Add files via upload --- pycnal/pycnal/grid.py | 15 ++++++++++----- pycnal/pycnal/vgrid.py | 24 +++++++++++++++--------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/pycnal/pycnal/grid.py b/pycnal/pycnal/grid.py index d1dc500..beaef68 100644 --- a/pycnal/pycnal/grid.py +++ b/pycnal/pycnal/grid.py @@ -107,7 +107,7 @@ def _get_grid_info(self,grid_file,hist_file): line_nb = line_nb + 1 if info == []: - raise ValueError('Unknow gridid. Please check your gridid.txt file') + raise ValueError('Unknown gridid. Please check your gridid.txt file') if info[4] == 'roms': self.name = info[1] @@ -133,7 +133,7 @@ def _get_grid_info(self,grid_file,hist_file): self.depth = dep else: - raise ValueError('Unknow grid type. Please check your gridid.txt file') + raise ValueError('Unknown grid type. Please check your gridid.txt file') else: #lets get the grid information from the history and grid files #print 'CJMP> getting grid info from ROMS history and grid files' @@ -417,9 +417,14 @@ def get_ROMS_vgrid(gridid, zeta=None): elif Vtrans == 2: vgrid = s_coordinate_2(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) elif Vtrans == 4: - vgrid = s_coordinate_4(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) + vgrid = s_coordinate_4(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) + +# jgp add + elif Vtrans == 5: + vgrid = s_coordinate_5(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) + else: - raise Warning('Unknow vertical transformation Vtrans') + raise Warning('Unknown vertical transformation Vtrans') elif gridinfo.grdtype == 'z': N = gridinfo.N @@ -427,7 +432,7 @@ def get_ROMS_vgrid(gridid, zeta=None): vgrid = z_coordinate(h, depth, N) else: - raise ValueError('Unknow grid type') + raise ValueError('Unknown grid type') return vgrid diff --git a/pycnal/pycnal/vgrid.py b/pycnal/pycnal/vgrid.py index 70fdbe7..d563a97 100644 --- a/pycnal/pycnal/vgrid.py +++ b/pycnal/pycnal/vgrid.py @@ -289,21 +289,25 @@ def __init__(self, h, theta_b, theta_s, Tcline, N, hraw=None, zeta=None): self.z_r = z_r(self.h, self.hc, self.N, self.s_rho, self.Cs_r, self.zeta, self.Vtrans) self.z_w = z_w(self.h, self.hc, self.Np, self.s_w, self.Cs_w, self.zeta, self.Vtrans) - def _get_s_rho(self): - lev = np.arange(1,self.N+1,1) - s = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ - (self.N * self.N - self.N) - \ - 0.01 * (lev * lev - lev * self.N) / (self.c1 - self.N) -# (self.c1 * self.N * self.N - self.N) - \ - self.s_rho = s +## jgp replace +# lev = np.arange(1,self.N+1,1) +# s = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ +# (self.N * self.N - self.N) - \ +# 0.01 * (lev * lev - lev * self.N) / (self.c1 - self.N) +# self.s_rho = s +## jgp new section follows + lev = np.arange(1, self.N+1) - .5 + self.s_rho = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ + (1.0 * self.N * self.N - self.N) - \ + 0.01 * (lev * lev - lev * self.N) / (1.0 - self.N) + def _get_s_w(self): lev = np.arange(0,self.Np,1) s = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ (self.N * self.N - self.N) - \ 0.01 * (lev * lev - lev * self.N) / (self.c1 - self.N) -# (self.c1 * self.N * self.N - self.N) - \ self.s_w = s def _get_Cs_r(self): @@ -347,6 +351,7 @@ def __init__(self, h, hc, N, s_rho, Cs_r, zeta, Vtrans): self.zeta = zeta self.Vtrans = Vtrans + def __getitem__(self, key): if isinstance(key, tuple) and len(self.zeta.shape) > len(self.h.shape): @@ -412,12 +417,13 @@ def __getitem__(self, key): ti = zeta.shape[0] z_w = np.empty((ti, self.Np) + self.h.shape, 'd') + if self.Vtrans == 1: for n in range(ti): for k in range(self.Np): z0 = self.hc * self.s_w[k] + (self.h - self.hc) * self.Cs_w[k] z_w[n,k,:] = z0 + zeta[n,:] * (1.0 + z0 / self.h) - elif self.Vtrans == 2 or self.Vtrans == 4: + elif self.Vtrans == 2 or self.Vtrans == 4 or self.Vtrans == 5: for n in range(ti): for k in range(self.Np): z0 = (self.hc * self.s_w[k] + self.h * self.Cs_w[k]) / \ From 67dbcac3ed35420f2e62ebd3c030e566b27b7df9 Mon Sep 17 00:00:00 2001 From: John Pender Date: Mon, 17 Jul 2017 16:13:27 -0800 Subject: [PATCH 3/6] Add files via upload --- pycnal_toolbox/pycnal_toolbox/remapping.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pycnal_toolbox/pycnal_toolbox/remapping.py b/pycnal_toolbox/pycnal_toolbox/remapping.py index da25184..db3ad23 100644 --- a/pycnal_toolbox/pycnal_toolbox/remapping.py +++ b/pycnal_toolbox/pycnal_toolbox/remapping.py @@ -53,6 +53,7 @@ def remapping(varname, srcfile, wts_files, srcgrd, dstgrd, \ srcgrdz = pycnal.grid.ROMS_Grid(srcgrd.name+'_Z', srcgrd.hgrid, src_zcoord) dstgrdz = pycnal.grid.ROMS_Grid(dstgrd.name+'_Z', dstgrd.hgrid, dst_zcoord) + # varname argument if type(varname).__name__ == 'list': nvar = len(varname) @@ -230,6 +231,13 @@ def remapping(varname, srcfile, wts_files, srcgrd, dstgrd, \ else: dst_var = dst_varz +# jgp add + if varname[nv] == 'u': + dst_u = dst_var + if varname[nv] == 'v': + dst_v = dst_var +# jgp end + # write data in destination file print('write data in destination file') nc.variables[varname[nv]][nctidx] = dst_var From 1a12699bab96d35d635299e2e13f8b00061689d7 Mon Sep 17 00:00:00 2001 From: John Pender Date: Tue, 18 Jul 2017 13:05:50 -0800 Subject: [PATCH 4/6] Add files via upload --- pycnal/pycnal/grid.py | 2 -- pycnal/pycnal/vgrid.py | 7 ------- 2 files changed, 9 deletions(-) diff --git a/pycnal/pycnal/grid.py b/pycnal/pycnal/grid.py index beaef68..401d65b 100644 --- a/pycnal/pycnal/grid.py +++ b/pycnal/pycnal/grid.py @@ -418,8 +418,6 @@ def get_ROMS_vgrid(gridid, zeta=None): vgrid = s_coordinate_2(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) elif Vtrans == 4: vgrid = s_coordinate_4(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) - -# jgp add elif Vtrans == 5: vgrid = s_coordinate_5(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) diff --git a/pycnal/pycnal/vgrid.py b/pycnal/pycnal/vgrid.py index d563a97..dada0e1 100644 --- a/pycnal/pycnal/vgrid.py +++ b/pycnal/pycnal/vgrid.py @@ -290,13 +290,6 @@ def __init__(self, h, theta_b, theta_s, Tcline, N, hraw=None, zeta=None): self.z_w = z_w(self.h, self.hc, self.Np, self.s_w, self.Cs_w, self.zeta, self.Vtrans) def _get_s_rho(self): -## jgp replace -# lev = np.arange(1,self.N+1,1) -# s = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ -# (self.N * self.N - self.N) - \ -# 0.01 * (lev * lev - lev * self.N) / (self.c1 - self.N) -# self.s_rho = s -## jgp new section follows lev = np.arange(1, self.N+1) - .5 self.s_rho = -(lev * lev - 2 * lev * self.N + lev + self.N * self.N - self.N) / \ (1.0 * self.N * self.N - self.N) - \ From b0ff3dc1d3664640ec84241e04f4342d6c3fc5e1 Mon Sep 17 00:00:00 2001 From: John Pender Date: Tue, 18 Jul 2017 13:06:52 -0800 Subject: [PATCH 5/6] Add files via upload --- pycnal_toolbox/pycnal_toolbox/remapping.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pycnal_toolbox/pycnal_toolbox/remapping.py b/pycnal_toolbox/pycnal_toolbox/remapping.py index db3ad23..9971f35 100644 --- a/pycnal_toolbox/pycnal_toolbox/remapping.py +++ b/pycnal_toolbox/pycnal_toolbox/remapping.py @@ -215,14 +215,11 @@ def remapping(varname, srcfile, wts_files, srcgrd, dstgrd, \ else: src_varz = src_var[nt,jjrange[0]:jjrange[1],iirange[0]:iirange[1]] -# print datetime.datetime.now() # horizontal interpolation using scrip weights print('horizontal interpolation using scrip weights') dst_varz = pycnal.remapping.remap(src_varz, wts_file, \ spval=spval) -# print datetime.datetime.now() - if ndim == 3: # vertical interpolation from standard z level to sigma print('vertical interpolation from standard z level to sigma') @@ -231,12 +228,10 @@ def remapping(varname, srcfile, wts_files, srcgrd, dstgrd, \ else: dst_var = dst_varz -# jgp add if varname[nv] == 'u': dst_u = dst_var if varname[nv] == 'v': dst_v = dst_var -# jgp end # write data in destination file print('write data in destination file') From 2a3ae2ad3b4650dbff4d9693581c22838d7a1c9f Mon Sep 17 00:00:00 2001 From: Kate Hedstrom Date: Tue, 18 Jul 2017 13:40:06 -0800 Subject: [PATCH 6/6] Delete some trailing whitespace. --- examples/rivers/make_river_clim.py | 4 +-- pycnal/pycnal/grid.py | 57 +++++++++++++++--------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/examples/rivers/make_river_clim.py b/examples/rivers/make_river_clim.py index 2386324..ff12052 100644 --- a/examples/rivers/make_river_clim.py +++ b/examples/rivers/make_river_clim.py @@ -6,7 +6,7 @@ import pycnal_toolbox -# load 2-dimentional discharge data +# load 2-dimentional discharge data print('Load discharge data') nc_data = netCDF.Dataset('CI_runoff.nc', 'r') nc_rivers = netCDF.Dataset('Cook_Inlet_rivers.nc', 'a') @@ -54,7 +54,7 @@ frac = 1.0/count[j,i] k = rivers[j,i][n] runoff[k] = frac*data[t,j,i] - + if t==180: sum180 = np.sum(runoff) diff --git a/pycnal/pycnal/grid.py b/pycnal/pycnal/grid.py index 401d65b..315e5a9 100644 --- a/pycnal/pycnal/grid.py +++ b/pycnal/pycnal/grid.py @@ -43,10 +43,10 @@ class ROMS_gridinfo(object): There are two ways to define the grid information. If grid_file and hist_file are not passed to the object when it is created, the - information is retrieved from gridid.txt. - To add new grid please edit your gridid.txt. You need to define - an environment variable PYCNAL_GRIDID_FILE pointing to your - gridid.txt file. Just copy an existing grid and modify the + information is retrieved from gridid.txt. + To add new grid please edit your gridid.txt. You need to define + an environment variable PYCNAL_GRIDID_FILE pointing to your + gridid.txt file. Just copy an existing grid and modify the definition accordingly to your case (Be carefull with space and blank line). @@ -69,7 +69,7 @@ def __init__(self, gridid,grid_file=None,hist_file=None): #the grid and history files from the model self.id = gridid self._get_grid_info(grid_file,hist_file) - + #now save the data in the dictionary, so we don't need to get it again gridid_dictionary[gridid]=self @@ -119,7 +119,7 @@ def _get_grid_info(self,grid_file,hist_file): self.theta_b = np.float(info[7]) self.Tcline = np.float(info[8]) - elif info[4] == 'z': + elif info[4] == 'z': nline = len(info) dep = info[5] for line in range(6,nline): @@ -140,7 +140,7 @@ def _get_grid_info(self,grid_file,hist_file): assert type(grid_file)!=type(None), 'if specify history file you must specify grid file' assert type(hist_file)!=type(None), 'if specify grid file you must specify history file' - #open history file and get necessary grid information from it. + #open history file and get necessary grid information from it. hist=netCDF.Dataset(hist_file,'r') #put data into ROMS_gridinfo object @@ -164,7 +164,7 @@ def _get_grid_info(self,grid_file,hist_file): self.theta_s=np.float(hist.variables['theta_s'][:]) self.theta_b=np.float(hist.variables['theta_b'][:]) self.Tcline=np.float(hist.variables['Tcline'][:]) - + def print_ROMS_gridinfo(gridid): """ @@ -202,7 +202,7 @@ def list_ROMS_gridid(): data = open(gridid_file,'r') lines = data.readlines() data.close() - + gridid_list = [] for line in lines: s = line.split() @@ -227,7 +227,7 @@ def get_ROMS_hgrid(gridid): #Check for cartesian or geographical grid spherical = nc.variables['spherical'][:] - #Get horizontal grid + #Get horizontal grid if ((spherical == 0) or (spherical == 'F')): #cartesian grid print('Load cartesian grid from file') @@ -359,7 +359,7 @@ def get_ROMS_hgrid(gridid): else: angle = None - #Get geographical grid + #Get geographical grid hgrd = CGrid_geo(lon_vert, lat_vert, proj, \ lon_rho=lon_rho, lat_rho=lat_rho, \ lon_u=lon_u, lat_u=lat_u, lon_v=lon_v, lat_v=lat_v, \ @@ -367,9 +367,9 @@ def get_ROMS_hgrid(gridid): dndx=dndx, dmde=dmde, angle_rho=angle) #load the mask - try: + try: hgrd.mask_rho = np.array(nc.variables['mask_rho'][:]) - except: + except: hgrd.mask_rho = np.ones(hgrd.lat_rho.shape) return hgrd @@ -382,11 +382,11 @@ def get_ROMS_vgrid(gridid, zeta=None): Load ROMS vertical grid object. vgrid is a s_coordinate or a z_coordinate object, depending on gridid.grdtype. vgrid.z_r and vgrid.z_w (vgrid.z for a z_coordinate object) - can be indexed in order to retreive the actual depths. The - free surface time serie zeta can be provided as an optional - argument. Note that the values of zeta are not calculated - until z is indexed, so a netCDF variable for zeta may be passed, - even if the file is large, as only the values that are required + can be indexed in order to retreive the actual depths. The + free surface time serie zeta can be provided as an optional + argument. Note that the values of zeta are not calculated + until z is indexed, so a netCDF variable for zeta may be passed, + even if the file is large, as only the values that are required will be retrieved from the file. """ @@ -417,10 +417,10 @@ def get_ROMS_vgrid(gridid, zeta=None): elif Vtrans == 2: vgrid = s_coordinate_2(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) elif Vtrans == 4: - vgrid = s_coordinate_4(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) + vgrid = s_coordinate_4(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) elif Vtrans == 5: vgrid = s_coordinate_5(h, theta_b, theta_s, Tcline, N, hraw=hraw, zeta=zeta) - + else: raise Warning('Unknown vertical transformation Vtrans') @@ -451,15 +451,15 @@ def get_ROMS_grid(gridid, zeta=None, hist_file=None,grid_file=None): grid information will be extracted from those files, and gridid will be used to name that grid for the rest of the python session. - + grd.vgrid is a s_coordinate or a z_coordinate object, depending on gridid.grdtype. - grd.vgrid.z_r and grd.vgrid.z_w (grd.vgrid.z for a - z_coordinate object) can be indexed in order to retreive the - actual depths. The free surface time serie zeta can be provided - as an optional argument. Note that the values of zeta are not - calculated until z is indexed, so a netCDF variable for zeta may - be passed, even if the file is large, as only the values that + grd.vgrid.z_r and grd.vgrid.z_w (grd.vgrid.z for a + z_coordinate object) can be indexed in order to retreive the + actual depths. The free surface time serie zeta can be provided + as an optional argument. Note that the values of zeta are not + calculated until z is indexed, so a netCDF variable for zeta may + be passed, even if the file is large, as only the values that are required will be retrieved from the file. """ @@ -489,7 +489,6 @@ def write_ROMS_grid(grd, filename='roms_grd.nc'): Mm, Lm = grd.hgrid.x_rho.shape - # Write ROMS grid to file nc = netCDF.Dataset(filename, 'w', format='NETCDF3_64BIT') nc.Description = 'ROMS grid' @@ -501,7 +500,7 @@ def write_ROMS_grid(grd, filename='roms_grd.nc'): nc.createDimension('xi_u', Lm-1) nc.createDimension('xi_v', Lm) nc.createDimension('xi_psi', Lm-1) - + nc.createDimension('eta_rho', Mm) nc.createDimension('eta_u', Mm) nc.createDimension('eta_v', Mm-1)