Skip to content
Open
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
1 change: 1 addition & 0 deletions doc/changelog.d/6770.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6744-Update analysis.py
42 changes: 35 additions & 7 deletions src/ansys/aedt/core/application/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -962,7 +962,7 @@ def export_results(
self.logger.warning("Touchstone format not valid. ``MagPhase`` will be set as default")
touchstone_format_value = 0

nominal_variation = self.available_variations.get_independent_nominal_values()
nominal_variation = self.available_variations.nominal_variation(dependent_params=False)

for s in self.setups:
if self.design_type == "Circuit Design":
Expand Down Expand Up @@ -1133,7 +1133,7 @@ def export_convergence(self, setup, variations="", output_file=None):
if not output_file:
output_file = os.path.join(self.working_directory, generate_unique_name("Convergence") + ".prop")
if not variations:
nominal_variation = self.available_variations.get_independent_nominal_values()
nominal_variation = self.available_variations.nominal_variation(dependent_params=False)
val_str = []
for el, val in nominal_variation.items():
val_str.append(f"{el}={val}")
Expand Down Expand Up @@ -2327,7 +2327,7 @@ def _export_touchstone(
file name when successful, ``False`` when failed.
"""
if variations is None:
variations = self.available_variations.get_independent_nominal_values()
variations = self.available_variations.nominal_variation()
variations_keys = list(variations.keys())
if variations_value is None:
variations_value = [str(x) for x in list(variations.values())]
Expand Down Expand Up @@ -2384,7 +2384,7 @@ def _export_touchstone(

if self.design_type == "HFSS":
self.osolution.ExportNetworkData(
DesignVariations,
DesignVariations.strip(),
SolutionSelectionArray,
FileFormat,
OutFile,
Expand All @@ -2401,7 +2401,7 @@ def _export_touchstone(
)
else:
self.odesign.ExportNetworkData(
DesignVariations,
DesignVariations.strip(),
SolutionSelectionArray,
FileFormat,
OutFile,
Expand Down Expand Up @@ -2802,14 +2802,42 @@ def variations(self, setup_sweep: str, output_as_dict: bool = False) -> Union[Li
def get_independent_nominal_values(self) -> Dict:
"""Retrieve variations for a given setup.

.. deprecated:: 0.22.0
Use :func:`nominal_variation` method instead.

Returns
-------
dict
Dictionary of independent nominal variations with values.
"""
return self.nominal_variation(dependent_params=False)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a warning here too, like:

warnings.warn(
"Usage of get_independent_nominal_values is deprecated. Use nominal_variation instead.",
DeprecationWarning,
stacklevel=2,
)


@pyaedt_function_handler()
def nominal_variation(self, dependent_params=True, expressions=False) -> Dict:
"""Retrieve variations for a given setup.

Parameters
----------
dependent_params : bool, optional
Return dependent parameters. The default is ``True``.
expressions : bool, optional
Return dependent parameter values as their expression. The default is ``False``
in which case the parameter value is returned.

Returns
-------
dict
Dictionary containing the nominal variation for the current design.
"""
independent_flag = self.independent
self.independent = True
variations = self.nominal_values
self.independent = not dependent_params

available_variables = self.__available_variables()
if expressions:
variations = {k: v.expression for k, v in list(available_variables.items())}
else:
variations = {k: v.evaluated_value for k, v in list(available_variables.items())}

self.independent = independent_flag
return variations

Expand Down
2 changes: 1 addition & 1 deletion src/ansys/aedt/core/application/analysis_3d_layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ def export_mesh_stats(self, setup, variations="", output_file=None):
"""
if not output_file:
output_file = str(Path(self.working_directory) / "meshstats.ms")
self.odesign.ExportMeshStats(setup, variations, output_file)
self.odesign.ExportMeshStats(setup, variations, str(output_file))
return output_file

@property
Expand Down
2 changes: 1 addition & 1 deletion src/ansys/aedt/core/application/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -1603,7 +1603,7 @@ def export_profile(self, setup, variation="", output_file=None):
output_file = Path(self.working_directory) / (generate_unique_name("Profile") + ".prof")
if not variation:
val_str = []
nominal_variation = self.available_variations.get_independent_nominal_values()
nominal_variation = self.available_variations.nominal_variation()
for el, val in nominal_variation.items():
val_str.append(f"{el}={val}")
if self.design_type == "HFSS 3D Layout Design":
Expand Down
4 changes: 2 additions & 2 deletions src/ansys/aedt/core/hfss.py
Original file line number Diff line number Diff line change
Expand Up @@ -2705,7 +2705,7 @@ def create_sbr_linked_antenna(
if not setup:
setup = assignment.nominal_adaptive
params = {}
pars = assignment.available_variations.get_independent_nominal_values()
pars = assignment.available_variations.nominal_variation(dependent_params=False)

for el in pars:
params[el] = pars[el]
Expand Down Expand Up @@ -6357,7 +6357,7 @@ def get_rcs_data(
from ansys.aedt.core.visualization.post.rcs_exporter import MonostaticRCSExporter

if not variations:
variations = self.available_variations.get_independent_nominal_values()
variations = self.available_variations.nominal_variation(dependent_params=False)
if not setup:
setup = self.nominal_adaptive

Expand Down
2 changes: 1 addition & 1 deletion src/ansys/aedt/core/icepak.py
Original file line number Diff line number Diff line change
Expand Up @@ -1795,7 +1795,7 @@ def assign_em_losses(
intr = []

argparam = {}
nominal_variation = self.available_variations.get_independent_nominal_values()
nominal_variation = self.available_variations.nominal_variation(dependent_params=False)
for key, value in nominal_variation.items():
argparam[key] = value

Expand Down
4 changes: 2 additions & 2 deletions src/ansys/aedt/core/mechanical.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ def assign_em_losses(

argparam = {}

variations = self.available_variations.get_independent_nominal_values()
variations = self.available_variations.nominal_variation(dependent_params=False)

for key, value in variations.items():
argparam[key] = value
Expand Down Expand Up @@ -346,7 +346,7 @@ def assign_thermal_map(
all_objects = assignment[:]
argparam = {}

variations = self.available_variations.get_independent_nominal_values()
variations = self.available_variations.nominal_variation(dependent_params=False)
for key, value in variations.items():
argparam[key] = value

Expand Down
4 changes: 2 additions & 2 deletions src/ansys/aedt/core/modules/solve_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -980,7 +980,7 @@ def add_mesh_link(
# parameters
mesh_link["Params"] = {}

nominal_values = self._app.available_variations.get_independent_nominal_values()
nominal_values = self._app.available_variations.nominal_variation(dependent_params=False)

if parameters is None:
parameters = self._app.available_variations.nominal_w_values_dict
Expand Down Expand Up @@ -1008,7 +1008,7 @@ def add_mesh_link(
def _parse_link_parameters(self, map_variables_by_name, parameters):
# parameters
params = {}
nominal_values = self._app.available_variations.get_independent_nominal_values()
nominal_values = self._app.available_variations.nominal_variation(dependent_params=False)
if map_variables_by_name:
parameters = nominal_values
parameters = self._app.available_variations.nominal_w_values_dict
Expand Down
4 changes: 2 additions & 2 deletions src/ansys/aedt/core/q3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ def export_matrix_data(
return False

if variations is None:
nominal_values = self.available_variations.get_independent_nominal_values()
nominal_values = self.available_variations.nominal_variation(dependent_params=False)
if not nominal_values:
variations = ""
else:
Expand Down Expand Up @@ -985,7 +985,7 @@ def export_equivalent_circuit(
analysis_setup = setup + " : " + sweep.replace(" ", "")

if variations is None:
nominal_values = self.available_variations.get_independent_nominal_values()
nominal_values = self.available_variations.nominal_variation(dependent_params=False)

if not nominal_values:
variations = ""
Expand Down
6 changes: 3 additions & 3 deletions src/ansys/aedt/core/visualization/post/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@ def _get_report_inputs(
else:
families_input[primary_sweep_variable] = [variations[primary_sweep_variable]]
if not variations:
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)
for el in list(variations.keys()):
if el == primary_sweep_variable:
continue
Expand Down Expand Up @@ -1286,9 +1286,9 @@ def _get_report_object(
if not variations:
variations = {}
if not variations and domain == "Sweep":
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)
elif not variations and domain != "Sweep":
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)
if setup_name in self._app.design_setups:
for v in self._app.design_setups[setup_name].default_intrinsics.keys():
if v not in variations:
Expand Down
6 changes: 3 additions & 3 deletions src/ansys/aedt/core/visualization/post/post_common_3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ def get_scalar_field_value(
self.ofieldsreporter.CalcOp(scalar_function)

if not variations:
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)

variation = []
for el, value in variations.items():
Expand Down Expand Up @@ -684,7 +684,7 @@ def export_field_file_on_grid(
return False

if not variations:
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)

variation = []
for el, value in variations.items():
Expand Down Expand Up @@ -851,7 +851,7 @@ def export_field_file(
self.ofieldsreporter.CopyNamedExprToStack(quantity)

if not variations:
variations = self._app.available_variations.get_independent_nominal_values()
variations = self._app.available_variations.nominal_variation(dependent_params=False)

variation = []
for el, value in variations.items():
Expand Down
2 changes: 1 addition & 1 deletion src/ansys/aedt/core/visualization/post/rcs_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def __init__(
self.expression = "ComplexMonostaticRCSTheta"

if not variations:
variations = app.available_variations.get_independent_nominal_values()
variations = app.available_variations.nominal_variation(dependent_params=False)
else:
# Set variation to Nominal
for var_name, var_value in variations.items():
Expand Down
4 changes: 2 additions & 2 deletions src/ansys/aedt/core/visualization/report/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ def __init__(self, app, report_category, setup_name, expressions=None):
self._legacy_props["context"]["secondary_sweep_range"] = ["All"]
self._legacy_props["context"]["variations"] = {"Freq": ["All"]}
if hasattr(self._app, "available_variations") and self._app.available_variations:
nominal_variation = self._post._app.available_variations.get_independent_nominal_values()
nominal_variation = self._post._app.available_variations.nominal_variation(dependent_params=False)
for el, k in nominal_variation.items():
self._legacy_props["context"]["variations"][el] = k
self._legacy_props["expressions"] = None
Expand Down Expand Up @@ -1357,7 +1357,7 @@ def _convert_dict_to_report_sel(self, sweeps):
sweep_list.append(_units_assignment(k))
else:
sweep_list.append([_units_assignment(k)])
nominal_values = self._app.available_variations.get_independent_nominal_values()
nominal_values = self._app.available_variations.nominal_variation(dependent_params=False)
for el in list(nominal_values.keys()):
if el not in sweeps:
sweep_list.append(f"{el}:=")
Expand Down
Binary file not shown.
Binary file not shown.
24 changes: 20 additions & 4 deletions tests/system/solvers/test_00_analyze.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,13 @@ def test_3dl_analyze_setup(self, hfss3dl_solve):
assert profile[key0].product == "HFSS3DLayout"
assert profile[key0].max_memory() > MemoryGB(0.01)

def test_3dl_export_profile(self, hfss3dl_solved):
assert Path(hfss3dl_solved.export_profile("Setup1")).exists()
assert Path(hfss3dl_solved.export_mesh_stats("Setup1")).exists()
def test_3dl_export_profile(self, hfss3dl_solved, local_scratch):
profile_file = local_scratch.path / "temp.prof"
profile_file = Path(hfss3dl_solved.export_profile("Setup1", output_file=profile_file))
assert profile_file.exists()
mesh_file = local_scratch.path / "temp.msh"
mesh_file = Path(hfss3dl_solved.export_mesh_stats("Setup1", output_file=mesh_file))
assert mesh_file.exists()
setup = hfss3dl_solved.setups[0]
profiles = setup.get_profile()
key0 = list(profiles.keys())[0]
Expand All @@ -186,7 +190,9 @@ def test_3dl_export_profile(self, hfss3dl_solved):
sweep_names = list(profile.frequency_sweeps.keys())
assert len(sweep_names) == 1
sweep_name = sweep_names[0]
assert len(profile.frequency_sweeps[sweep_name].frequencies) == 16
assert (
len(profile.frequency_sweeps[sweep_name].frequencies) > 0
) # This value depends on AEDT version used to solve.
assert profile.frequency_sweeps[sweep_name].elapsed_time > timedelta(seconds=1)
assert profile.num_adaptive_passes
adaptive_passes = profile.num_adaptive_passes
Expand Down Expand Up @@ -663,6 +669,16 @@ def test_export_to_maxwell(self, add_app, local_scratch):
app2.import_configuration(config)
assert app2.circuit

def test_variations(self, hfss3dl_solved, local_scratch):
var_w_expr = hfss3dl_solved.available_variations.nominal_variation(expressions=True)
assert var_w_expr["gnd_len"] == "len+gnd_buffer"
assert len(var_w_expr) == 4
var_w_values = hfss3dl_solved.available_variations.nominal_variation()
assert len(var_w_values) == 4
assert var_w_values["gnd_len"] == "23.0mm"
var_independent = hfss3dl_solved.available_variations.nominal_variation(dependent_params=False)
assert len(var_independent) == 3

def test_output_variables_3dlayout(self, hfss3dl_solved):
hfss3dl_solved.set_differential_pair(
assignment="Port1", reference="Port2", differential_mode="Diff", common_mode="Comm"
Expand Down
2 changes: 1 addition & 1 deletion tests/system/visualization/test_12_1_PostProcessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def test_export_data_to_csv(self, aedtapp, local_scratch):
for el2 in portnames:
trace_names.append("S(" + el + "," + el2 + ")")
families = {"Freq": ["All"]}
nominal_values = aedtapp.available_variations.get_independent_nominal_values()
nominal_values = aedtapp.available_variations.nominal_variation(dependent_params=False)
for key, value in nominal_values.items():
families[key] = value
my_data = aedtapp.post.get_solution_data(expressions=trace_names, variations=families)
Expand Down
2 changes: 1 addition & 1 deletion tests/system/visualization/test_12_PostProcessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def test_circuit_available_report_solutions(self, diff_test):
assert len(diff_test.post.available_report_solutions()) > 0

def test_circuit_create_report_2(self, diff_test):
variations = diff_test.available_variations.get_independent_nominal_values()
variations = diff_test.available_variations.nominal_variation(dependent_params=False)
variations["Freq"] = ["All"]
variations["l1"] = ["All"]
assert diff_test.post.create_report(
Expand Down
Loading
Loading