Skip to content

Commit 766e4ea

Browse files
committed
Use param.nml to define number of sediment classes
Before, it was hard-wired to 3.
1 parent 7b312aa commit 766e4ea

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

schimpy/schism_hotstart.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,11 @@ def generate_3D_field(self, variable):
306306
params = read_param_nml(self.sediment_fn)
307307
self.Nbed = params['Nbed']
308308
kwargs_options.update({'Nbed': self.Nbed})
309+
310+
if 'nsed' not in self.__dict__.keys():
311+
params = read_param_nml(self.param_nml)
312+
self.nsed = params['sed_class']
313+
kwargs_options.update({'nsed': self.nsed})
309314
if kwargs_options:
310315
var = VariableField(v_meta, variable, self.mesh,
311316
self.depths, self.date, self.crs,
@@ -468,8 +473,10 @@ def __init__(self, v_meta, vname, mesh, depths, date, crs, tr_mname, hotstart,
468473

469474
if vname in ['SED3D_bed', 'SED3D_bedfrac']:
470475
self.Nbed = kwargs['Nbed']
476+
self.nsed = kwargs['nsed']
471477
else:
472478
self.Nbed = 1
479+
self.nsed = 1
473480
self.grid = self.get_grid() # grid can be nodes/elems/edges
474481
self.n_hgrid = list(self.grid.values())[0][0]
475482
self.n_vgrid = list(self.grid.values())[1][0]
@@ -529,7 +536,7 @@ def get_grid(self):
529536
'MBEDP': (3, ['layer thickness', 'layer age', 'layer porosity'])},
530537
'bedfrac': {'elem': (self.n_elems, self.elem),
531538
'Nbed': (self.Nbed, 0),
532-
'nsed': (3, 0)}}
539+
'nsed': (self.nsed, 0)}}
533540

534541
if self.centering == 'edge':
535542
centering_options['edge'] = {'side': (self.n_edges, self.edge),
@@ -568,7 +575,7 @@ def define_new_grid(self, mesh):
568575
'MBEDP': (3, ['layer thickness', 'layer age', 'layer porosity'])},
569576
'bedfrac': {'elem': (mesh.n_elems, mesh_elem),
570577
'Nbed': (self.Nbed, 0),
571-
'nsed': (3, 0)}}
578+
'nsed': (self.nsed, 0)}}
572579
if self.centering == 'edge':
573580
edge_depths = (mesh_depth[mesh.edges[:, 0]] +
574581
mesh_depth[mesh.edges[:, 1]])/2
@@ -669,6 +676,13 @@ def simple_trend(self, ini_meta=None, inpoly=None):
669676
else:
670677
n_hgrid = self.n_hgrid
671678

679+
if self.variable_name in ['SED3D_bedfrac']:
680+
value = str(value) # if a single float value is given, it needs to be converted to a string
681+
682+
# trigger an error if number of values is not equal to nsed
683+
if len(value.split(',')) != self.nsed:
684+
raise ValueError(
685+
"Number of values in %s does not match with nsed (%d)" % (value, self.nsed))
672686
if isinstance(value, (float, int)):
673687
# initialize the 3D field
674688
v_ini = np.full((n_hgrid, self.n_vgrid), value)

0 commit comments

Comments
 (0)