@@ -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