Skip to content

Commit

Permalink
Fixed bug where point parameter promotion to desvar would not remove …
Browse files Browse the repository at this point in the history
…the original parameter
  • Loading branch information
mlauer154 committed Feb 12, 2024
1 parent ef0b07e commit 33d8dd0
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 22 deletions.
32 changes: 20 additions & 12 deletions pymead/core/geometry_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import re
import sys
import typing
from copy import copy

from pymead.core.airfoil import Airfoil
from pymead.core.bezier import Bezier
Expand Down Expand Up @@ -172,7 +173,8 @@ def remove_from_subcontainer(self, pymead_obj: PymeadObj):
self.container()[pymead_obj.sub_container].pop(pymead_obj.name())

def add_param(self, value: float, name: str or None = None, lower: float or None = None,
upper: float or None = None, unit_type: str or None = None, assign_unique_name: bool = True):
upper: float or None = None, unit_type: str or None = None, assign_unique_name: bool = True,
point: Point = None):
"""
Adds a parameter to the geometry collection sub-container ``"params"``, and modifies the name to make it
unique if necessary.
Expand All @@ -199,7 +201,7 @@ def add_param(self, value: float, name: str or None = None, lower: float or None
Param
The generated parameter
"""
kwargs = dict(value=value, name=name, lower=lower, upper=upper, setting_from_geo_col=True)
kwargs = dict(value=value, name=name, lower=lower, upper=upper, setting_from_geo_col=True, point=point)
if unit_type is None:
param = Param(**kwargs)
elif unit_type == "length":
Expand Down Expand Up @@ -488,7 +490,7 @@ def add_line(self, point_sequence: PointSequence, name: str or None = None, assi
return self.add_pymead_obj_by_ref(line, assign_unique_name=assign_unique_name)

def add_desvar(self, value: float, name: str, lower: float or None = None, upper: float or None = None,
unit_type: str or None = None, assign_unique_name: bool = True):
unit_type: str or None = None, assign_unique_name: bool = True, point: Point = None):
"""
Directly adds a design variable value to the geometry collection.
Expand Down Expand Up @@ -516,7 +518,7 @@ def add_desvar(self, value: float, name: str, lower: float or None = None, upper
DesVar
The generated design variable
"""
kwargs = dict(value=value, name=name, lower=lower, upper=upper, setting_from_geo_col=True)
kwargs = dict(value=value, name=name, lower=lower, upper=upper, setting_from_geo_col=True, point=point)
if unit_type is None:
desvar = DesVar(**kwargs)
elif unit_type == "length":
Expand Down Expand Up @@ -581,7 +583,8 @@ def promote_param_to_desvar(self, param: Param or str, lower: float or None = No
else:
unit_type = None

desvar = self.add_desvar(value=param.value(), name=param.name(), lower=lower, upper=upper, unit_type=unit_type)
desvar = self.add_desvar(value=param.value(), name=param.name(), lower=lower, upper=upper, unit_type=unit_type,
point=copy(param.point))

# Replace the corresponding x() or y() in parameter with the new design variable
self.replace_geo_objs(tool=param, target=desvar)
Expand All @@ -602,8 +605,7 @@ def promote_param_to_desvar(self, param: Param or str, lower: float or None = No
# desvar.gcs.constraint_params[self.gcs.constraint_params.index(param)] = desvar

# Remove the parameter
if param.point is None:
self.remove_pymead_obj(param, promotion_demotion=True)
self.remove_pymead_obj(param, promotion_demotion=True)

return desvar

Expand All @@ -629,7 +631,7 @@ def demote_desvar_to_param(self, desvar: DesVar):
else:
unit_type = None

param = self.add_param(value=desvar.value(), name=desvar.name(), unit_type=unit_type)
param = self.add_param(value=desvar.value(), name=desvar.name(), unit_type=unit_type, point=copy(desvar.point))

# Replace the corresponding x() or y() in parameter with the new parameter
self.replace_geo_objs(tool=desvar, target=param)
Expand Down Expand Up @@ -834,12 +836,18 @@ def set_from_dict_rep(cls, d: dict, canvas=None, tree=None, gui_obj=None):
geo_col = cls(gui_obj=gui_obj)
geo_col.canvas = canvas
geo_col.tree = tree
for name, desvar_dict in d["desvar"].items():
geo_col.add_desvar(**desvar_dict, name=name, assign_unique_name=False)
for name, param_dict in d["params"].items():
geo_col.add_param(**param_dict, name=name, assign_unique_name=False)
for name, point_dict in d["points"].items():
geo_col.add_point(**point_dict, name=name, assign_unique_name=False)
for name, desvar_dict in d["desvar"].items():
point = None
if ".x" in name or ".y" in name:
point = geo_col.container()["points"][name.split(".")[0]]
geo_col.add_desvar(**desvar_dict, name=name, assign_unique_name=False, point=point)
for name, param_dict in d["params"].items():
point = None
if ".x" in name or ".y" in name:
point = geo_col.container()["points"][name.split(".")[0]]
geo_col.add_param(**param_dict, name=name, assign_unique_name=False, point=point)
for name, line_dict in d["lines"].items():
geo_col.add_line(point_sequence=PointSequence(
points=[geo_col.container()["points"][k] for k in line_dict["points"]]),
Expand Down
16 changes: 8 additions & 8 deletions pymead/core/param.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,12 +311,12 @@ def get_dict_rep(self):
class AngleParam(Param):
def __init__(self, value: float, name: str, lower: float or None = None, upper: float or None = None,
sub_container: str = "params",
setting_from_geo_col: bool = False):
setting_from_geo_col: bool = False, point=None):
self._unit = None
self.set_unit(UNITS.current_angle_unit())
name = "Angle-1" if name is None else name
super().__init__(value=value, name=name, lower=lower, upper=upper, sub_container=sub_container,
setting_from_geo_col=setting_from_geo_col)
setting_from_geo_col=setting_from_geo_col, point=point)

def unit(self):
return self._unit
Expand Down Expand Up @@ -432,7 +432,7 @@ class DesVar(Param):
Design variable class; subclasses the base-level Param. Adds lower and upper bound default behavior.
"""
def __init__(self, value: float, name: str, lower: float or None = None, upper: float or None = None,
sub_container: str = "desvar", setting_from_geo_col: bool = False):
sub_container: str = "desvar", setting_from_geo_col: bool = False, point=None):
"""
Parameters
==========
Expand Down Expand Up @@ -461,7 +461,7 @@ def __init__(self, value: float, name: str, lower: float or None = None, upper:
upper = default_upper(value)

super().__init__(value=value, name=name, lower=lower, upper=upper, sub_container=sub_container,
setting_from_geo_col=setting_from_geo_col)
setting_from_geo_col=setting_from_geo_col, point=point)


class LengthDesVar(LengthParam):
Expand All @@ -470,7 +470,7 @@ class LengthDesVar(LengthParam):
default behavior.
"""
def __init__(self, value: float, name: str, lower: float or None = None, upper: float or None = None,
setting_from_geo_col: bool = False):
setting_from_geo_col: bool = False, point=None):
"""
Parameters
==========
Expand Down Expand Up @@ -499,7 +499,7 @@ def __init__(self, value: float, name: str, lower: float or None = None, upper:
upper = default_upper(value)

super().__init__(value=value, name=name, lower=lower, upper=upper, setting_from_geo_col=setting_from_geo_col,
sub_container="desvar")
sub_container="desvar", point=point)

def get_dict_rep(self):
return {"value": float(self.value()), "lower": self.lower(), "upper": self.upper(),
Expand All @@ -512,7 +512,7 @@ class AngleDesVar(AngleParam):
default behavior.
"""
def __init__(self, value: float, name: str, lower: float or None = None, upper: float or None = None,
setting_from_geo_col: bool = False):
setting_from_geo_col: bool = False, point=None):
"""
Parameters
==========
Expand Down Expand Up @@ -541,7 +541,7 @@ def __init__(self, value: float, name: str, lower: float or None = None, upper:
upper = default_upper(value)

super().__init__(value=value, name=name, lower=lower, upper=upper, sub_container="desvar",
setting_from_geo_col=setting_from_geo_col)
setting_from_geo_col=setting_from_geo_col, point=point)

def get_dict_rep(self):
return {"value": float(self.value()), "lower": self.lower(), "upper": self.upper(),
Expand Down
2 changes: 1 addition & 1 deletion pymead/gui/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ def save_geo_col(self):
else:
last_saved_state = self.geo_col.get_dict_rep()
save_data(last_saved_state, self.current_save_name)
self.last_saved_state = self.get_geo_col_state(geo_col_dict=last_saved_state)
self.last_saved_state = self.get_geo_col_state()
self.setWindowTitle(f"pymead - {os.path.split(self.current_save_name)[-1]}")
self.save_attempts = 0
return True
Expand Down
1 change: 0 additions & 1 deletion pymead/optimization/shape_optimization.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ def send_over_pipe(data: object):
forces = []
ref_dirs = get_reference_directions("energy", param_dict['n_obj'], param_dict['n_ref_dirs'],
seed=param_dict['seed'])
# mea_object = MEA.generate_from_param_dict(mea)
geo_col = GeometryCollection.set_from_dict_rep(deepcopy(geo_col_dict))
airfoil_name, mea_name = None, None
if param_dict["tool"] == "XFOIL":
Expand Down

0 comments on commit 33d8dd0

Please sign in to comment.