diff --git a/_unittest_solvers/example_models/T45/m2d_elec_fields_calc.aedtz b/_unittest_solvers/example_models/T45/m2d_elec_fields_calc.aedtz deleted file mode 100644 index fb4dcb2a3e3..00000000000 Binary files a/_unittest_solvers/example_models/T45/m2d_elec_fields_calc.aedtz and /dev/null differ diff --git a/_unittest_solvers/example_models/T45/maxwell_fields_calculator.aedtz b/_unittest_solvers/example_models/T45/maxwell_fields_calculator.aedtz new file mode 100644 index 00000000000..cf87ea18eaf Binary files /dev/null and b/_unittest_solvers/example_models/T45/maxwell_fields_calculator.aedtz differ diff --git a/_unittest_solvers/test_45_workflows.py b/_unittest_solvers/test_45_workflows.py index 6a9746961e8..d3849199386 100644 --- a/_unittest_solvers/test_45_workflows.py +++ b/_unittest_solvers/test_45_workflows.py @@ -12,7 +12,7 @@ twinbuilder_circuit = "TB_test" report = "report" fields_calculator = "fields_calculator_solved" -m2d_electrostatic = "m2d_elec_fields_calc" +m2d_electrostatic = "maxwell_fields_calculator" test_subfolder = "T45" @@ -231,8 +231,9 @@ def test_09_advanced_fields_calculator_general(self, add_app): aedtapp = add_app(application=pyaedt.Maxwell2d, project_name=m2d_electrostatic, + design_name="e_tangential", subfolder=test_subfolder) - name = aedtapp.post.fields_calculator.add_expression("e_line", "Poly1") + name = aedtapp.post.fields_calculator.add_expression("e_line", None) assert name assert aedtapp.post.fields_calculator.expression_plot("e_line", "Poly1", [name]) @@ -243,6 +244,19 @@ def test_09_advanced_fields_calculator_general(self, add_app): aedtapp.close_project(aedtapp.project_name) + aedtapp = add_app(application=pyaedt.Maxwell2d, + project_name=m2d_electrostatic, + design_name="stress_tensor", + subfolder=test_subfolder) + name = aedtapp.post.fields_calculator.add_expression("radial_stress_tensor", None) + assert name + assert aedtapp.post.fields_calculator.expression_plot("radial_stress_tensor", "Polyline1", [name]) + name = aedtapp.post.fields_calculator.add_expression("tangential_stress_tensor", None) + assert name + assert aedtapp.post.fields_calculator.expression_plot("tangential_stress_tensor", "Polyline1", [name]) + + aedtapp.close_project(aedtapp.project_name) + def test_10_push_excitation_3dl(self, local_scratch, desktop): from pyaedt.workflows.hfss3dlayout.push_excitation_from_file_3dl import main diff --git a/pyaedt/misc/expression_catalog.toml b/pyaedt/misc/expression_catalog.toml index f1d07a49aa1..809dd4873ae 100644 --- a/pyaedt/misc/expression_catalog.toml +++ b/pyaedt/misc/expression_catalog.toml @@ -26,6 +26,7 @@ operations = ["Fundamental_Quantity('E')", "Operation('Integrate')", "Operation('CmplxI')", "Operation('+')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [voltage_line_time] @@ -44,6 +45,7 @@ operations = ["Fundamental_Quantity('E_t')", "Operation('LineValue')", "Operation('Integrate')" ] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [voltage_line_maxwell] @@ -72,6 +74,7 @@ operations = ["NameOfExpression('')", "Operation('Integrate')", "Operation('CmplxI')", "Operation('+')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [voltage_drop] @@ -87,6 +90,7 @@ constants = {"vrm"= 3.3} operations = ["Fundamental_Quantity('dcvPhi')", "Scalar_Function(FuncValue='vrm')", "Operation('+')"] +dependent_expressions = [] report = ["Field_3D"] # Current @@ -117,6 +121,7 @@ operations = ["NameOfExpression('')", "Operation('Integrate')", "Operation('CmplxI')", "Operation('+')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [current_line_time] @@ -134,6 +139,7 @@ operations = ["Fundamental_Quantity('H_t')", "EnterLine('assignment')", "Operation('LineValue')", "Operation('Integrate')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] # Power @@ -154,6 +160,7 @@ operations = ["NameOfExpression('Poynting')", "EnterSurface('assignment')", "Operation('SurfaceValue')", "Operation('Integrate')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] # Misc @@ -181,6 +188,7 @@ operations = ["Fundamental_Quantity('E')", "Operation('Mag')", "Operation('/')" ] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [wave_impedance_y] @@ -206,6 +214,7 @@ operations = ["Fundamental_Quantity('E')", "Operation('Mag')", "Operation('/')" ] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [wave_impedance_z] @@ -231,6 +240,7 @@ operations = ["Fundamental_Quantity('E')", "Operation('Mag')", "Operation('/')" ] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] # Electrostatic @@ -250,6 +260,7 @@ operations = ["NameOfExpression('')", "EnterSurface('assignment')", "Operation('SurfaceValue')", "Operation('Integrate')"] +dependent_expressions = [] report = ["Data Table", "Rectangular Plot"] [e_line] @@ -264,4 +275,93 @@ assignment_type = ["Line"] operations = ["NameOfExpression('')", "Operation('Tangent')", "Operation('Dot')"] -report = ["Data Table", "Rectangular Plot"] \ No newline at end of file +dependent_expressions = [] +report = ["Data Table", "Rectangular Plot"] + +[b_radial] +name = "Radial_Component_Magnetic_Field" +description = "Radial component of magnetic field" +design_type = ["Maxwell 2D"] +fields_type = ["Fields"] +solution_type = "" +primary_sweep = "Distance" +assignment = "" +assignment_type = ["Line"] +operations = ["Fundamental_Quantity('B')", + "Operation('ScalarX')", + "Scalar_Function(FuncValue='PHI')", + "Operation('UMathFunc', 'Cos')", + "Operation('*')", + "Fundamental_Quantity('B')", + "Operation('ScalarY')", + "Scalar_Function(FuncValue='PHI')", + "Operation('UMathFunc', 'Sin')", + "Operation('*')", + "Operation('+')"] +dependent_expressions = [] +report = ["Data Table", "Rectangular Plot"] + +[b_tangential] +name = "Tangential_Component_Magnetic_Field" +description = "Tangential component of magnetic field" +design_type = ["Maxwell 2D"] +fields_type = ["Fields"] +solution_type = "" +primary_sweep = "Distance" +assignment = "" +assignment_type = ["Line"] +operations = ["Fundamental_Quantity('B')", + "Operation('ScalarX')", + "Scalar_Function(FuncValue='PHI')", + "Operation('UMathFunc', 'Sin')", + "Operation('*')", + "Operation('Neg')", + "Fundamental_Quantity('B')", + "Operation('ScalarY')", + "Scalar_Function(FuncValue='PHI')", + "Operation('UMathFunc', 'Cos')", + "Operation('*')", + "Operation('+')"] +dependent_expressions = [] +report = ["Data Table", "Rectangular Plot"] + +[radial_stress_tensor] +name = "Radial_Stress_Tensor" +description = "Radial stress tensor" +design_type = ["Maxwell 2D"] +fields_type = ["Fields"] +solution_type = "" +primary_sweep = "Distance" +assignment = "" +assignment_type = ["Line"] +dependent_expressions = ["b_radial", "b_tangential"] +operations = ["NameOfExpression('b_radial')", + "NameOfExpression('b_radial')", + "Operation('*')", + "NameOfExpression('b_tangential')", + "NameOfExpression('b_tangential')", + "Operation('*')", + "Operation('Neg')", + "Operation('+')", + "Scalar_Constant(1.25664e-06)", + "Operation('/')", + "Scalar_Constant(2)", + "Operation('/')"] +report = ["Data Table", "Rectangular Plot"] + +[tangential_stress_tensor] +name = "Tangential_Stress_Tensor" +description = "Tangential stress tensor" +design_type = ["Maxwell 2D"] +fields_type = ["Fields"] +solution_type = "" +primary_sweep = "Distance" +assignment = "" +assignment_type = ["Line"] +dependent_expressions = ["b_radial", "b_tangential"] +operations = ["NameOfExpression('b_radial')", + "NameOfExpression('b_tangential')", + "Operation('*')", + "Scalar_Constant(1.25664e-06)", + "Operation('/')"] +report = ["Data Table", "Rectangular Plot"] diff --git a/pyaedt/modules/fields_calculator.py b/pyaedt/modules/fields_calculator.py index 63e9f281d45..f3cff929aa9 100644 --- a/pyaedt/modules/fields_calculator.py +++ b/pyaedt/modules/fields_calculator.py @@ -117,6 +117,14 @@ def add_expression(self, calculation, assignment, name=None): for k, v in constants.items(): self.__app.variable_manager.set_variable(k, v, postprocessing=True) + # Check for dependent expressions + if expression_info["dependent_expressions"]: + for expression in expression_info["dependent_expressions"]: + expression_name = self.add_expression(calculation=expression, assignment=None) + expression_info["operations"] = [ + operation.replace(expression, expression_name) for operation in expression_info["operations"] + ] + if assignment is not None: expression_info["assignment"] = assignment