Skip to content

Handling Maxwell Circuit Variables #1046

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions _unittest/test_09_VariableManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from pyaedt.application.Variables import Variable
from pyaedt.generic.general_methods import isclose
from pyaedt.modeler.GeometryOperators import GeometryOperators
from pyaedt import MaxwellCircuit

# Import required modules

Expand Down Expand Up @@ -349,3 +350,12 @@ def test_14_intrinsics(self):
self.aedtapp["fc"] = "Freq"
assert self.aedtapp["fc"] == "Freq"
assert self.aedtapp.variable_manager.dependent_variables["fc"].numeric_value == "Freq"

def test_15_maxwell_circuit_variables(self):
mc = MaxwellCircuit()
mc["var2"] = "10mm"
assert mc["var2"] == "10.0mm"
v_circuit = mc.variable_manager
var_circuit = v_circuit.variable_names
assert "var2" in var_circuit
assert v_circuit.independent_variables["var2"].units == "mm"
12 changes: 12 additions & 0 deletions pyaedt/application/Design.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
from pyaedt.generic.general_methods import write_csv
from pyaedt.generic.LoadAEDTFile import load_entire_aedt_file
from pyaedt.modules.Boundary import BoundaryObject
from pyaedt.application.Variables import decompose_variable_value

if sys.version_info.major > 2:
import base64
Expand Down Expand Up @@ -3152,6 +3153,16 @@ def get_evaluated_value(self, variable_name, variation=None, units=None):
>>> M3D["p3"] = "P1 * p2"
>>> eval_p3 = M3D.get_evaluated_value("p3")
"""
if self.design_type == "Maxwell Circuit":
if "$" in variable_name:
val_units = self._oproject.GetVariableValue(variable_name)
else:
val_units = self._odesign.GetVariableValue(variable_name)
val, units = decompose_variable_value(val_units)
try:
return float(val)
except ValueError:
return val_units
if not variation:
variation_string = self._odesign.GetNominalVariation()
else:
Expand All @@ -3160,6 +3171,7 @@ def get_evaluated_value(self, variable_name, variation=None, units=None):
si_value = self._odesign.GetVariationVariableValue(variation_string, variable_name)
except:
si_value = self._odesign.GetVariableValue(variable_name)

if units:
scale = AEDT_UNITS[unit_system(units)][units]
if isinstance(scale, tuple):
Expand Down
18 changes: 11 additions & 7 deletions pyaedt/application/Variables.py
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,7 @@ def _variable_dict(self, object_list, dependent=True, independent=True):
var_dict = {}
all_names = {}
for obj in object_list:
if self._app._is_object_oriented_enabled():
if self._app._is_object_oriented_enabled() and self._app.design_type != "Maxwell Circuit":
listvar = list(obj.GetChildObject("Variables").GetChildNames())
else:
listvar = list(obj.GetVariables())
Expand Down Expand Up @@ -799,11 +799,15 @@ def set_variable(
raise Exception("Unhandled input type to the design property or project variable.") # pragma: no cover

# Get all design and project variables in lower case for a case-sensitive comparison
if self._app._is_object_oriented_enabled():
if self._app._is_object_oriented_enabled() and self._app.design_type != "Maxwell Circuit":
var_list = list(desktop_object.GetChildObject("Variables").GetChildNames())
else:
var_list = list(desktop_object.GetVariables()) # pragma: no cover
lower_case_vars = [var_name.lower() for var_name in var_list]
if self._app.design_type == "Maxwell Circuit" and "$" not in variable_name:
prop_server = "Instance:{}".format(desktop_object.GetName())
else:
prop_server = "{0}Variables".format(var_type)

if variable_name.lower() not in lower_case_vars:
try:
Expand All @@ -812,7 +816,7 @@ def set_variable(
"NAME:AllTabs",
[
"NAME:{0}VariableTab".format(var_type),
["NAME:PropServers", "{0}Variables".format(var_type)],
["NAME:PropServers", prop_server],
[
"NAME:NewProps",
[
Expand Down Expand Up @@ -842,7 +846,7 @@ def set_variable(
"NAME:AllTabs",
[
"NAME:{}VariableTab".format(var_type),
["NAME:PropServers", "{}Variables".format(var_type)],
["NAME:PropServers", prop_server],
[
"NAME:ChangedProps",
[
Expand All @@ -866,7 +870,7 @@ def set_variable(
"NAME:AllTabs",
[
"NAME:{}VariableTab".format(var_type),
["NAME:PropServers", "{}Variables".format(var_type)],
["NAME:PropServers", prop_server],
[
"NAME:ChangedProps",
[
Expand All @@ -884,7 +888,7 @@ def set_variable(
],
]
)
if self._app._is_object_oriented_enabled():
if self._app._is_object_oriented_enabled() and self._app.design_type != "Maxwell Circuit":
var_list = list(desktop_object.GetChildObject("Variables").GetChildNames())
else:
var_list = list(desktop_object.GetVariables()) # pragma: no cover
Expand Down Expand Up @@ -957,7 +961,7 @@ def delete_variable(self, var_name):
"""
desktop_object = self.aedt_object(var_name)
var_type = "Project" if desktop_object == self._oproject else "Local"
if self._app._is_object_oriented_enabled():
if self._app._is_object_oriented_enabled() and self._app.design_type != "Maxwell Circuit":
var_list = list(desktop_object.GetChildObject("Variables").GetChildNames())
else:
var_list = list(desktop_object.GetVariables()) # pragma: no cover
Expand Down