diff --git a/src/Solver/AdisTS.py b/src/Solver/AdisTS.py index 93f6702f1528264f115a6f215f46acdd435a7390..2aeba1063153471be5042c050b78386bb2bae852 100644 --- a/src/Solver/AdisTS.py +++ b/src/Solver/AdisTS.py @@ -40,6 +40,8 @@ from Checker.Adists import ( AdistsOutputRKChecker, ) +from itertools import chain + logger = logging.getLogger() def adists_file_open(filepath, mode): @@ -173,6 +175,67 @@ class AdisTS(CommandLineSolver): name = "" return f"{name}" + _alph = list( + map( + chr, + chain( + range(48, 58), # 0..9 + range(65, 91), # A..Z + range(97, 123) # a..z + ) + ) + ) + + _l_alph = len(_alph) + + _nodes_cnt = 0 + _nodes_names = {} + _nodes_views = set() + + def get_reach_name(self, reach): + return f"Reach_{reach.id:>3}".replace(" ", "0") + + def get_node_name(self, node): + """Generate a 3 char name for node + + Args: + node: The node + + Returns: + A 3 char name string + """ + n = node.id + + ##print("node name id: ", n) + + ##if n in self._nodes_names: + ##return self._nodes_names[n] + + name = "" + + checked_new = False + while not checked_new: + self._nodes_cnt += 1 + nc = self._nodes_cnt + + name = "".join( + map( + lambda i: self._alph[i % self._l_alph], + [ + int(nc / (self._l_alph * self._l_alph)), + int(nc / self._l_alph), + nc + ] + ) + ) + + checked_new = name not in self._nodes_views + + self._nodes_views.add(name) + self._nodes_names[n] = name + + return name + ################################# # Adis-TS in weak coupling mode # ################################# @@ -252,7 +315,8 @@ class AdisTSwc(AdisTS): with adists_file_open(os.path.join(repertory, f"{POL_name}.ALD"), "w+") as f: for LC in POL_LC: - reach_name = next(filter(lambda edge: edge.id == LC.edge, study.river.edges())).name + reach = next(filter(lambda edge: edge.id == LC.edge, study.river.edges())) #.name + reach_name = self.get_reach_name(self, reach) f.write(f"${reach_name} {LC.begin_rk} {LC.end_rk}\n") f.write(f"*temps |débit massique (kg/s)\n") f.write(f"*---------++++++++++\n") @@ -270,7 +334,9 @@ class AdisTSwc(AdisTS): with adists_file_open(os.path.join(repertory, f"{POL_name}.CDT"), "w+") as f: for BC in POL_BC: - node_name = next(filter(lambda x: x.id == BC.node, study.river._nodes)).name + node = next(filter(lambda x: x.id == BC.node, study.river._nodes)) #.name + print("node name in BC:", node, node.name) + node_name = self.get_node_name(node) f.write(f"${node_name}\n") if BC.type == "Concentration":