mirror of https://gitlab.com/pamhyr/pamhyr2
Profiles: disabled profiles now affects results for mage, AdisTS and AdisTT
parent
deb84ca331
commit
824fbe506e
|
|
@ -229,7 +229,11 @@ for each reach"
|
|||
gls = []
|
||||
|
||||
for edge in edges:
|
||||
comp, incomp = edge.reach.compute_guidelines()
|
||||
profiles = edge.reach.enabled_profiles
|
||||
comp, incomp = edge.reach.compute_guidelines(
|
||||
profiles=profiles,
|
||||
update_cache=False
|
||||
)
|
||||
if len(incomp) != 0:
|
||||
self._status = STATUS.WARNING
|
||||
self._summary = "incomplete_guideline"
|
||||
|
|
@ -237,7 +241,6 @@ for each reach"
|
|||
|
||||
gls.append(comp)
|
||||
|
||||
profiles = edge.reach.profiles
|
||||
for profile in profiles:
|
||||
if not profile.has_standard_named_points():
|
||||
self._status = STATUS.WARNING
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ class StudyGeometryChecker(AbstractModelChecker):
|
|||
return False
|
||||
|
||||
for edge in edges:
|
||||
if len(edge.reach.profiles) < 2:
|
||||
if len(edge.reach.enabled_profiles) < 2:
|
||||
summary = "no_geometry_defined"
|
||||
status = STATUS.ERROR
|
||||
ok = False
|
||||
|
|
@ -132,8 +132,12 @@ class StudyInitialConditionsChecker(AbstractModelChecker):
|
|||
return ok
|
||||
|
||||
ic = river.initial_conditions[reach]
|
||||
len_ic = len(ic)
|
||||
len_reach = len(reach)
|
||||
enabled_profiles = set(reach.enabled_profiles)
|
||||
len_ic = sum(
|
||||
data["section"] in enabled_profiles
|
||||
for data in ic.data
|
||||
)
|
||||
len_reach = len(enabled_profiles)
|
||||
|
||||
if len_ic < len_reach:
|
||||
self._summary = "initial_condition_missing_profile"
|
||||
|
|
|
|||
|
|
@ -494,14 +494,22 @@ class Reach(SQLSubModel):
|
|||
)
|
||||
|
||||
@timer
|
||||
def compute_guidelines(self):
|
||||
def compute_guidelines(self, profiles=None, update_cache=True):
|
||||
"""Compute reach guidelines
|
||||
|
||||
Args:
|
||||
profiles: Profiles used to compute the guidelines. If omitted,
|
||||
all non-deleted profiles of the reach are used.
|
||||
update_cache: Whether to update the reach guidelines cache.
|
||||
|
||||
Returns:
|
||||
Tuple of complete and incomplete guidelines name.
|
||||
"""
|
||||
if profiles is None:
|
||||
profiles = self.profiles
|
||||
|
||||
# Get all point contained into a guideline
|
||||
named_points = [profile.named_points() for profile in self.profiles]
|
||||
named_points = [profile.named_points() for profile in profiles]
|
||||
points_name = list(
|
||||
map(
|
||||
lambda lst: list(map(lambda p: p.name, lst)),
|
||||
|
|
@ -532,11 +540,13 @@ class Reach(SQLSubModel):
|
|||
|
||||
complete = guide_set - incomplete
|
||||
|
||||
if update_cache:
|
||||
# Compute guideline and put data in cache
|
||||
self._compute_guidelines_cache(guide_set, named_points,
|
||||
complete, incomplete)
|
||||
|
||||
self._compute_guidelines_cache(
|
||||
guide_set, named_points, complete, incomplete
|
||||
)
|
||||
self.modified()
|
||||
|
||||
return (complete, incomplete)
|
||||
|
||||
def _map_guidelines_points(self, func, full=False):
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ class Profile(SQLSubModel):
|
|||
class Reach(SQLSubModel):
|
||||
_sub_classes = [Profile]
|
||||
|
||||
def __init__(self, reach, study, parent, with_init=True):
|
||||
def __init__(self, reach, study, parent, with_init=True, profiles=None):
|
||||
super(Reach, self).__init__(
|
||||
id=-1, status=study.status,
|
||||
owner_scenario=study.status.scenario.id
|
||||
|
|
@ -287,10 +287,12 @@ class Reach(SQLSubModel):
|
|||
self._reach = reach # Source reach in the study
|
||||
self._profiles = []
|
||||
if with_init:
|
||||
if profiles is None:
|
||||
profiles = reach.profiles
|
||||
self._profiles = list(
|
||||
map(
|
||||
lambda p: Profile(p, self._study, self._parent),
|
||||
reach.profiles
|
||||
profiles
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -379,7 +381,14 @@ class Reach(SQLSubModel):
|
|||
|
||||
for i, profile in enumerate(reach.profiles):
|
||||
data["profile"] = profile
|
||||
new_reach._profiles += [Profile._db_load(execute, data)]
|
||||
result_profile = Profile._db_load(execute, data)
|
||||
if len(result_profile) > 0:
|
||||
new_reach._profiles.append(result_profile)
|
||||
|
||||
new_reach._profile_mask = [
|
||||
profile.name[0:8] != 'interpol'
|
||||
for profile in new_reach._profiles
|
||||
]
|
||||
|
||||
return new_reach
|
||||
|
||||
|
|
@ -418,10 +427,13 @@ class River(SQLSubModel):
|
|||
def has_reach(self, id):
|
||||
return 0 <= id < len(self._reachs)
|
||||
|
||||
def add(self, reach_id):
|
||||
def add(self, reach_id, profiles=None):
|
||||
reachs = self._study.river.enable_edges()
|
||||
|
||||
new = Reach(reachs[reach_id].reach, self._study, self._parent)
|
||||
new = Reach(
|
||||
reachs[reach_id].reach, self._study, self._parent,
|
||||
profiles=profiles
|
||||
)
|
||||
|
||||
self._reachs.append(new)
|
||||
return new
|
||||
|
|
@ -460,9 +472,9 @@ class River(SQLSubModel):
|
|||
|
||||
for reach in study.river.reachs():
|
||||
data["reach"] = reach.reach
|
||||
new_river._reachs.append(
|
||||
Reach._db_load(execute, data)
|
||||
)
|
||||
result_reach = Reach._db_load(execute, data)
|
||||
if len(result_reach) > 0:
|
||||
new_river._reachs.append(result_reach)
|
||||
|
||||
return new_river
|
||||
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ class AdisTS(CommandLineSolver):
|
|||
files.append(str(os.path.join("net", f"{name}.ST")))
|
||||
|
||||
cnt_num = 1
|
||||
for profile in edge.reach.profiles:
|
||||
for profile in edge.reach.enabled_profiles:
|
||||
self._export_ST_profile_header(
|
||||
f, files, profile, cnt_num
|
||||
)
|
||||
|
|
@ -335,7 +335,7 @@ class AdisTS(CommandLineSolver):
|
|||
|
||||
return coeff.minor, coeff.medium
|
||||
|
||||
for j, profile in enumerate(edge.reach.profiles):
|
||||
for j, profile in enumerate(edge.reach.enabled_profiles):
|
||||
coef_min, coef_moy = get_stricklers_from_rk(profile.rk,
|
||||
lst)
|
||||
f.write(
|
||||
|
|
@ -861,7 +861,10 @@ class AdisTSwc(AdisTS):
|
|||
|
||||
for i in range(ibmax):
|
||||
# Add results reach to reach list
|
||||
r = results.river.add(i)
|
||||
geometry_reach = study.river.enable_edges()[i].reach
|
||||
r = results.river.add(
|
||||
i, profiles=geometry_reach.enabled_profiles
|
||||
)
|
||||
reachs.append(r)
|
||||
|
||||
is1[i] = data[2 * i] - 1 # first section of reach i
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ class AdisTT(CommandLineSolver):
|
|||
files.append(str(os.path.join("net", f"{name}.ST")))
|
||||
|
||||
cnt_num = 1
|
||||
for profile in edge.reach.profiles:
|
||||
for profile in edge.reach.enabled_profiles:
|
||||
self._export_ST_profile_header(
|
||||
f, files, profile, cnt_num
|
||||
)
|
||||
|
|
@ -310,7 +310,7 @@ class AdisTT(CommandLineSolver):
|
|||
|
||||
return coeff.minor, coeff.medium
|
||||
|
||||
for j, profile in enumerate(edge.reach.profiles):
|
||||
for j, profile in enumerate(edge.reach.enabled_profiles):
|
||||
coef_min, coef_moy = get_stricklers_from_rk(profile.rk,
|
||||
lst)
|
||||
f.write(
|
||||
|
|
@ -647,7 +647,10 @@ class AdisTTwc(AdisTT):
|
|||
|
||||
for i in range(ibmax):
|
||||
# Add results reach to reach list
|
||||
r = results.river.add(i)
|
||||
geometry_reach = study.river.enable_edges()[i].reach
|
||||
r = results.river.add(
|
||||
i, profiles=geometry_reach.enabled_profiles
|
||||
)
|
||||
reachs.append(r)
|
||||
|
||||
is1[i] = data[2 * i] - 1 # first section of reach i
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ class Mage(CommandLineSolver):
|
|||
files.append(str(os.path.join("net", f"{name}.ST")))
|
||||
|
||||
cnt_num = 1
|
||||
for profile in edge.reach.profiles:
|
||||
for profile in edge.reach.enabled_profiles:
|
||||
self._export_ST_profile_header(
|
||||
f, files, profile, cnt_num
|
||||
)
|
||||
|
|
@ -489,7 +489,12 @@ class Mage(CommandLineSolver):
|
|||
if cond.is_deleted():
|
||||
continue
|
||||
|
||||
data = cond.data
|
||||
enabled_profiles = set(reach.reach.enabled_profiles)
|
||||
data = [
|
||||
item for item in cond.data
|
||||
if not item.is_deleted()
|
||||
and item["section"] in enabled_profiles
|
||||
]
|
||||
if len(data) == 0:
|
||||
continue
|
||||
|
||||
|
|
@ -497,9 +502,6 @@ class Mage(CommandLineSolver):
|
|||
|
||||
id_sec = 1
|
||||
for d in data:
|
||||
if d.is_deleted():
|
||||
continue
|
||||
|
||||
IR = f"{id}"
|
||||
IS = f"{id_sec}"
|
||||
discharge = f"{d['discharge']:>10.5f}"
|
||||
|
|
@ -1097,7 +1099,10 @@ class Mage8(Mage):
|
|||
|
||||
for i in range(nb_reach):
|
||||
# Add results reach to reach list
|
||||
r = results.river.add(i)
|
||||
geometry_reach = study.river.enable_edges()[i].reach
|
||||
r = results.river.add(
|
||||
i, profiles=geometry_reach.enabled_profiles
|
||||
)
|
||||
reachs.append(r)
|
||||
|
||||
# ID of first and last reach profiles
|
||||
|
|
@ -1402,7 +1407,10 @@ class Mage8(Mage):
|
|||
zfd_lst = []
|
||||
|
||||
for r in reachs:
|
||||
z_min = r.geometry.get_z_min()
|
||||
z_min = [
|
||||
profile.geometry.z_min()
|
||||
for profile in r.profiles
|
||||
]
|
||||
sls = map(
|
||||
lambda p: p.get_ts_key(ts_list[0], "sl")[0],
|
||||
r.profiles
|
||||
|
|
|
|||
Loading…
Reference in New Issue