88"""
99from schimpy .schism_yaml import load
1010from schimpy .schism_mesh import SchismMeshGr3Reader , BoundaryType
11+ import datetime
1112import numbers
1213import numpy as np
1314import click
@@ -643,8 +644,8 @@ def write_bctides(self, bctides_file):
643644 node_id_lst = hgrid .boundaries [i ].nodes
644645 elev_id = 0
645646 elev_boundary = None
646- if "elevation_boundary " in self .open_boundaries [i ].keys ():
647- elev_boundary = self .open_boundaries [i ]["elevation_boundary " ]
647+ if "elevation " in self .open_boundaries [i ][ "variables" ].keys ():
648+ elev_boundary = self .open_boundaries [i ]["variables" ][ "elevation " ]
648649 elev_source = elev_boundary ["source" ]
649650 elev_key = elev_source
650651 if isinstance (elev_source , numbers .Number ):
@@ -661,8 +662,8 @@ def write_bctides(self, bctides_file):
661662
662663 vel_id = 0
663664 vel_boundary = None
664- if "velocity_boundary " in self .open_boundaries [i ].keys ():
665- vel_boundary = self .open_boundaries [i ]["velocity_boundary " ]
665+ if "velocity " in self .open_boundaries [i ][ "variables" ].keys ():
666+ vel_boundary = self .open_boundaries [i ]["variables" ][ "velocity " ]
666667 vel_source = vel_boundary ["source" ]
667668 vel_key = vel_source
668669
@@ -684,8 +685,8 @@ def write_bctides(self, bctides_file):
684685 ## output temperature and salinity boundary
685686 temp_id = 0
686687 temp_boundary = None
687- if "temperature_boundary " in self .open_boundaries [i ].keys ():
688- temp_boundary = self .open_boundaries [i ]["temperature_boundary " ]
688+ if "temperature " in self .open_boundaries [i ][ "variables" ].keys ():
689+ temp_boundary = self .open_boundaries [i ]["variables" ][ "temperature " ]
689690 temp_source = temp_boundary ["source" ]
690691 temp_key = temp_source
691692 if isinstance (temp_source , numbers .Number ):
@@ -699,8 +700,8 @@ def write_bctides(self, bctides_file):
699700 )
700701 salt_id = 0
701702 salt_boundary = None
702- if "salinity_boundary " in self .open_boundaries [i ].keys ():
703- salt_boundary = self .open_boundaries [i ]["salinity_boundary " ]
703+ if "salinity " in self .open_boundaries [i ][ "variables" ].keys ():
704+ salt_boundary = self .open_boundaries [i ]["variables" ][ "salinity " ]
704705 salt_source = salt_boundary ["source" ]
705706 salt_key = salt_source
706707 if isinstance (salt_source , numbers .Number ):
@@ -717,18 +718,20 @@ def write_bctides(self, bctides_file):
717718 tracer_boundary_sources = [0 ] * len (self .tracer_mod_pos )
718719 ## this list save sorted tracer boundary index according to SCHISM code order
719720 tracer_boundary_lst_sorted = []
720- if "tracers" in self .open_boundaries [i ].keys ():
721+ if "tracers" in self .open_boundaries [i ][ "variables" ] .keys ():
721722 boundary_tracer_mod_num = len (
722- self .open_boundaries [i ]["tracers" ]
723+ self .open_boundaries [i ]["variables" ][ " tracers" ]
723724 )
724725 for j in range (boundary_tracer_mod_num ):
725- tracer_boundary = self .open_boundaries [i ]["tracers" ][j ]["source" ]
726- tracer_mod = self .open_boundaries [i ]["tracers" ][j ]["module" ]
726+ tracer_boundary = self .open_boundaries [i ]["variables" ][ " tracers" ][j ]["source" ]
727+ tracer_mod = self .open_boundaries [i ]["variables" ][ " tracers" ][j ]["module" ]
727728 ## if tracer mod not in self.tracer_mod_pos, raise error
728729 if not (tracer_mod in self .tracer_mod_pos .keys ()):
729730 raise ValueError (
730- tracer_mod + " is not in specified tracer module list at the begining \
731- of bctide yamal\n " )
731+ f"Tracer module '{ tracer_mod } ' is not defined in the bctides 'modules' section. "
732+ f"Please add it to the top-level modules list. "
733+ f"Valid modules: { ', ' .join (sorted (self .tracer_mod_pos .keys ()))} "
734+ )
732735
733736 tracer_boundary_key = tracer_boundary
734737 ## set boundary key to "constant" if source is a number or list of numbers
@@ -740,7 +743,7 @@ def write_bctides(self, bctides_file):
740743 ## length of tracer_boundary match the number of tracers defined
741744 ## in self.tracer_mod_num
742745 if boundary_tracer_mod_num != self .tracer_mod_num [tracer_mod ]:
743- raise ValueError ( self .open_boundaries [i ]["name" ] + ": "
746+ raise ValueError ( self .open_boundaries [i ]["name" ] + ": " +
744747 tracer_mod + " boundary source length "
745748 + str (boundary_tracer_mod_num )
746749 + " does not match number of tracers defined in module section: "
0 commit comments