mirror of https://gitlab.com/pamhyr/pamhyr2
Compare commits
3 Commits
885c8ea502
...
5287f30636
| Author | SHA1 | Date |
|---|---|---|
|
|
5287f30636 | |
|
|
67433ae325 | |
|
|
d27ce9d1d8 |
|
|
@ -54,8 +54,10 @@ class Scenario(SQLSubModel):
|
||||||
"river_reach", "river_node",
|
"river_reach", "river_node",
|
||||||
"geotiff", "reservoir", "reservoir_data",
|
"geotiff", "reservoir", "reservoir_data",
|
||||||
# Temperature
|
# Temperature
|
||||||
"boundary_condition_temperature", "boundary_condition_data_temperature",
|
"boundary_condition_temperature",
|
||||||
"initial_conditions_temperature", "initial_conditions_temperature_spec",
|
"boundary_condition_data_temperature",
|
||||||
|
"initial_conditions_temperature",
|
||||||
|
"initial_conditions_temperature_spec",
|
||||||
"weather_parameters", "weather_parameters_data",
|
"weather_parameters", "weather_parameters_data",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,9 +117,6 @@ class AdisTS(CommandLineSolver):
|
||||||
_nodes_names = {}
|
_nodes_names = {}
|
||||||
_nodes_views = set()
|
_nodes_views = set()
|
||||||
|
|
||||||
def get_reach_name(self, reach):
|
|
||||||
return f"Reach_{reach.pamhyr_id:>3}".replace(" ", "0")
|
|
||||||
|
|
||||||
def get_node_name(self, node):
|
def get_node_name(self, node):
|
||||||
"""Generate a 3 char name for node
|
"""Generate a 3 char name for node
|
||||||
|
|
||||||
|
|
@ -182,7 +179,7 @@ class AdisTS(CommandLineSolver):
|
||||||
# Write header
|
# Write header
|
||||||
edges = study.river.enable_edges()
|
edges = study.river.enable_edges()
|
||||||
for edge in edges:
|
for edge in edges:
|
||||||
name = f"Reach_{edge.id + 1:>3}".replace(" ", "0")
|
name = self.get_reach_name(edge)
|
||||||
|
|
||||||
with adists_file_open(
|
with adists_file_open(
|
||||||
os.path.join(repertory, "net", f"{name}.ST"),
|
os.path.join(repertory, "net", f"{name}.ST"),
|
||||||
|
|
@ -277,7 +274,7 @@ class AdisTS(CommandLineSolver):
|
||||||
edges = study.river.enable_edges()
|
edges = study.river.enable_edges()
|
||||||
|
|
||||||
for e in edges:
|
for e in edges:
|
||||||
name = f"Reach_{e.id + 1:>3}".replace(" ", "0")
|
name = self.get_reach_name(e)
|
||||||
id = name
|
id = name
|
||||||
|
|
||||||
n1 = f"{self.get_node_name(e.node1):3}".replace(" ", "x")
|
n1 = f"{self.get_node_name(e.node1):3}".replace(" ", "x")
|
||||||
|
|
@ -453,7 +450,8 @@ class AdisTS(CommandLineSolver):
|
||||||
_nodes_views = set()
|
_nodes_views = set()
|
||||||
|
|
||||||
def get_reach_name(self, reach):
|
def get_reach_name(self, reach):
|
||||||
return f"Reach_{reach.pamhyr_id:>3}".replace(" ", "0")
|
index = self._study.river.get_edge_id(reach) + 1
|
||||||
|
return f"Reach_{index:03d}"
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Adis-TS in weak coupling mode #
|
# Adis-TS in weak coupling mode #
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,8 @@ class AdisTT(CommandLineSolver):
|
||||||
_nodes_views = set()
|
_nodes_views = set()
|
||||||
|
|
||||||
def get_reach_name(self, reach):
|
def get_reach_name(self, reach):
|
||||||
return f"Reach_{reach.pamhyr_id:>3}".replace(" ", "0")
|
index = self._study.river.get_edge_id(reach) + 1
|
||||||
|
return f"Reach_{index:03d}"
|
||||||
|
|
||||||
def get_node_name(self, node):
|
def get_node_name(self, node):
|
||||||
"""Generate a 3 char name for node
|
"""Generate a 3 char name for node
|
||||||
|
|
@ -177,7 +178,7 @@ class AdisTT(CommandLineSolver):
|
||||||
# Write header
|
# Write header
|
||||||
edges = study.river.enable_edges()
|
edges = study.river.enable_edges()
|
||||||
for edge in edges:
|
for edge in edges:
|
||||||
name = f"Reach_{edge.id + 1:>3}".replace(" ", "0")
|
name = self.get_reach_name(edge)
|
||||||
|
|
||||||
with adistt_file_open(
|
with adistt_file_open(
|
||||||
os.path.join(repertory, "net", f"{name}.ST"),
|
os.path.join(repertory, "net", f"{name}.ST"),
|
||||||
|
|
@ -240,7 +241,7 @@ class AdisTT(CommandLineSolver):
|
||||||
edges = study.river.enable_edges()
|
edges = study.river.enable_edges()
|
||||||
|
|
||||||
for e in edges:
|
for e in edges:
|
||||||
name = f"Reach_{e.id + 1:>3}".replace(" ", "0")
|
name = self.get_reach_name(e)
|
||||||
id = name
|
id = name
|
||||||
|
|
||||||
n1 = f"{self.get_node_name(e.node1):3}".replace(" ", "x")
|
n1 = f"{self.get_node_name(e.node1):3}".replace(" ", "x")
|
||||||
|
|
@ -412,9 +413,6 @@ class AdisTT(CommandLineSolver):
|
||||||
_nodes_names = {}
|
_nodes_names = {}
|
||||||
_nodes_views = set()
|
_nodes_views = set()
|
||||||
|
|
||||||
def get_reach_name(self, reach):
|
|
||||||
return f"Reach_{reach.pamhyr_id:>3}".replace(" ", "0")
|
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Adis-TT in weak coupling mode #
|
# Adis-TT in weak coupling mode #
|
||||||
#################################
|
#################################
|
||||||
|
|
@ -478,7 +476,8 @@ class AdisTTwc(AdisTT):
|
||||||
)
|
)
|
||||||
|
|
||||||
TEM_BCs = (
|
TEM_BCs = (
|
||||||
study.river._BoundaryConditionsTemperature.BCs_Temperature_List
|
study.river._BoundaryConditionsTemperature
|
||||||
|
.BCs_Temperature_List
|
||||||
)
|
)
|
||||||
|
|
||||||
if TEM_BCs:
|
if TEM_BCs:
|
||||||
|
|
@ -527,8 +526,7 @@ class AdisTTwc(AdisTT):
|
||||||
f.write(f"*État initial pour le polluant {TEM_name}\n")
|
f.write(f"*État initial pour le polluant {TEM_name}\n")
|
||||||
f.write(" ".join(("DEFAULT =",
|
f.write(" ".join(("DEFAULT =",
|
||||||
f"{TEM_IC_default.temperature}",
|
f"{TEM_IC_default.temperature}",
|
||||||
"0.0 0.0 0.0\n")))
|
"0.0 0.0 0.0\n"))) # fake 0 to match adists
|
||||||
# fake 0 to match adists
|
|
||||||
|
|
||||||
if len(TEM_IC_default._data) != 0:
|
if len(TEM_IC_default._data) != 0:
|
||||||
self._export_ICs_AdisTT_Spec(
|
self._export_ICs_AdisTT_Spec(
|
||||||
|
|
@ -551,8 +549,7 @@ class AdisTTwc(AdisTT):
|
||||||
f"{ic_spec.start_rk}",
|
f"{ic_spec.start_rk}",
|
||||||
f"{ic_spec.end_rk}",
|
f"{ic_spec.end_rk}",
|
||||||
f"{ic_spec.temperature}"
|
f"{ic_spec.temperature}"
|
||||||
f"0.0 0.0 0.0 0.0\n")))
|
f"0.0 0.0 0.0 0.0\n"))) # fake 0 to match adists
|
||||||
# fake 0 to match adists
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
@ -617,7 +614,7 @@ class AdisTTwc(AdisTT):
|
||||||
# ) as f:
|
# ) as f:
|
||||||
# files.append(f"{name}.DIF")
|
# files.append(f"{name}.DIF")
|
||||||
|
|
||||||
# f.write(f"*Définition des paramètres des fonctions de calcul du\n")
|
# f.write(f"*Définition des paramètres des fonctions de calcul du\n")
|
||||||
# f.write(f"*coefficient de diffusion\n")
|
# f.write(f"*coefficient de diffusion\n")
|
||||||
|
|
||||||
# difAdisTT = study.river.dif_adistt.DIF_AdisTT_List
|
# difAdisTT = study.river.dif_adistt.DIF_AdisTT_List
|
||||||
|
|
@ -946,10 +943,6 @@ class AdisTTwc(AdisTT):
|
||||||
"CCF": ("cld0", "CLD"),
|
"CCF": ("cld0", "CLD"),
|
||||||
}
|
}
|
||||||
|
|
||||||
_required_weather_extensions = (
|
|
||||||
"TDA", "HSA", "RAY", "VEN", "TNA", "QNA",
|
|
||||||
)
|
|
||||||
|
|
||||||
def _export_temperature_initial_conditions(self, study, repertory):
|
def _export_temperature_initial_conditions(self, study, repertory):
|
||||||
initial_conditions = study.river.ic_temperature.Initial_Conditions_List
|
initial_conditions = study.river.ic_temperature.Initial_Conditions_List
|
||||||
filename = "TEM.INI"
|
filename = "TEM.INI"
|
||||||
|
|
@ -1000,17 +993,15 @@ class AdisTTwc(AdisTT):
|
||||||
|
|
||||||
def _export_weather_file(self, study, repertory, weather_parameter,
|
def _export_weather_file(self, study, repertory, weather_parameter,
|
||||||
extension):
|
extension):
|
||||||
|
reach = weather_parameter.reach
|
||||||
|
if reach is None or len(weather_parameter.data) == 0:
|
||||||
|
return None
|
||||||
|
|
||||||
filename = f"TEM.{extension}"
|
filename = f"TEM.{extension}"
|
||||||
path = os.path.join(repertory, filename)
|
path = os.path.join(repertory, filename)
|
||||||
mode = "a" if os.path.exists(path) else "w+"
|
mode = "a" if os.path.exists(path) else "w+"
|
||||||
with adistt_file_open(path, mode) as f:
|
with adistt_file_open(path, mode) as f:
|
||||||
reach = weather_parameter.reach
|
reach_name = self.get_reach_name(reach)
|
||||||
if reach is None:
|
|
||||||
return None
|
|
||||||
reach_name = (
|
|
||||||
f"Reach_{study.river.get_edge_id(reach) + 1:>3}"
|
|
||||||
.replace(" ", "0")
|
|
||||||
)
|
|
||||||
f.write(
|
f.write(
|
||||||
f"${reach_name} {weather_parameter.begin_rk} "
|
f"${reach_name} {weather_parameter.begin_rk} "
|
||||||
f"{weather_parameter.end_rk}\n"
|
f"{weather_parameter.end_rk}\n"
|
||||||
|
|
@ -1034,13 +1025,6 @@ class AdisTTwc(AdisTT):
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
|
|
||||||
# These files are mandatory for the AdisTT master file. They are
|
|
||||||
# created even when no spatial time series is defined in the study.
|
|
||||||
for extension in self._required_weather_extensions:
|
|
||||||
adistt_file_open(
|
|
||||||
os.path.join(repertory, f"TEM.{extension}"), "w+"
|
|
||||||
).close()
|
|
||||||
|
|
||||||
initial_file = self._export_temperature_initial_conditions(
|
initial_file = self._export_temperature_initial_conditions(
|
||||||
study, repertory
|
study, repertory
|
||||||
)
|
)
|
||||||
|
|
@ -1063,20 +1047,16 @@ class AdisTTwc(AdisTT):
|
||||||
filename = f"{name}.TEM"
|
filename = f"{name}.TEM"
|
||||||
with adistt_file_open(os.path.join(repertory, filename), "w+") as f:
|
with adistt_file_open(os.path.join(repertory, filename), "w+") as f:
|
||||||
defaults = study.river.weather_parameters
|
defaults = study.river.weather_parameters
|
||||||
for type_, (parameter, _) in self._weather_files.items():
|
for type_, (parameter, extension) in self._weather_files.items():
|
||||||
default = defaults.default_for_type(type_)
|
default = defaults.default_for_type(type_)
|
||||||
if default is not None:
|
if default is not None:
|
||||||
f.write(f"{parameter} = {default.value}\n")
|
prefix = "*" if extension in weather_files else ""
|
||||||
|
f.write(f"{prefix}{parameter} = {default.value}\n")
|
||||||
|
|
||||||
f.write(f"file_ini = {initial_file}\n")
|
f.write(f"file_ini = {initial_file}\n")
|
||||||
f.write(f"file_cl = {boundary_file}\n")
|
f.write(f"file_cl = {boundary_file}\n")
|
||||||
for extension in self._required_weather_extensions:
|
|
||||||
f.write(
|
|
||||||
f"file_{extension.lower()} = TEM.{extension}\n"
|
|
||||||
)
|
|
||||||
for _, extension in self._weather_files.values():
|
for _, extension in self._weather_files.values():
|
||||||
if (extension in weather_files
|
if extension in weather_files:
|
||||||
and extension not in self._required_weather_extensions):
|
|
||||||
f.write(
|
f.write(
|
||||||
f"file_{extension.lower()} = "
|
f"file_{extension.lower()} = "
|
||||||
f"{weather_files[extension]}\n"
|
f"{weather_files[extension]}\n"
|
||||||
|
|
@ -1117,6 +1097,20 @@ class AdisTTwc(AdisTT):
|
||||||
self._study = study
|
self._study = study
|
||||||
name = study.name.replace(" ", "_")
|
name = study.name.replace(" ", "_")
|
||||||
|
|
||||||
|
mage_path = os.path.join(
|
||||||
|
os.path.abspath(os.path.join(repertory, os.pardir)),
|
||||||
|
mage_rep
|
||||||
|
)
|
||||||
|
source_net = os.path.join(mage_path, "net")
|
||||||
|
destination_net = os.path.join(repertory, "net")
|
||||||
|
|
||||||
|
if qlog is not None:
|
||||||
|
qlog.put("Copy Mage net directory")
|
||||||
|
|
||||||
|
if os.path.exists(destination_net):
|
||||||
|
shutil.rmtree(destination_net)
|
||||||
|
shutil.copytree(source_net, destination_net)
|
||||||
|
|
||||||
# Node names must be deterministic and identical in NET and TEM.CDT.
|
# Node names must be deterministic and identical in NET and TEM.CDT.
|
||||||
self._nodes_cnt = 0
|
self._nodes_cnt = 0
|
||||||
self._nodes_names = {}
|
self._nodes_names = {}
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,8 @@ class Mage(CommandLineSolver):
|
||||||
_nodes_views = set()
|
_nodes_views = set()
|
||||||
|
|
||||||
def get_reach_name(self, reach):
|
def get_reach_name(self, reach):
|
||||||
return f"Reach_{reach.pamhyr_id:>3}".replace(" ", "0")
|
index = self._study.river.get_edge_id(reach) + 1
|
||||||
|
return f"Reach_{index:03d}"
|
||||||
|
|
||||||
def get_node_name(self, node):
|
def get_node_name(self, node):
|
||||||
"""Generate a 3 char name for node
|
"""Generate a 3 char name for node
|
||||||
|
|
@ -210,7 +211,7 @@ class Mage(CommandLineSolver):
|
||||||
# Write header
|
# Write header
|
||||||
edges = study.river.enable_edges()
|
edges = study.river.enable_edges()
|
||||||
for edge in edges:
|
for edge in edges:
|
||||||
name = f"Reach_{edge.pamhyr_id:>3}".replace(" ", "0")
|
name = self.get_reach_name(edge)
|
||||||
|
|
||||||
with mage_file_open(
|
with mage_file_open(
|
||||||
os.path.join(repertory, "net", f"{name}.ST"),
|
os.path.join(repertory, "net", f"{name}.ST"),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue