Skip to content

Fix/dynamic link #841

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 11 commits into from
Feb 9, 2022
Merged
Show file tree
Hide file tree
Changes from 8 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 _unittest/test_00_EDB.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def test_02_get_properties(self):
assert len(self.edbapp.core_components.ICs) > 0
assert len(self.edbapp.core_components.IOs) > 0
assert len(self.edbapp.core_components.Others) > 0
assert len(self.edbapp.get_bounding_box()) == 2

def test_03_get_primitives(self):
assert len(self.edbapp.core_primitives.polygons) > 0
Expand Down
33 changes: 21 additions & 12 deletions _unittest/test_22_Circuit_DynamicLink.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
from _unittest.conftest import local_path, scratch_path, config, desktop_version

from pyaedt import Circuit
from pyaedt import Circuit, Q2d, Q3d, Hfss
from pyaedt.generic.filesystem import Scratch
import gc

Expand Down Expand Up @@ -30,7 +30,7 @@ def setup_class(self):
source_project = os.path.join(local_path, "example_models", src_project_name + ".aedt")
linked_project = os.path.join(local_path, "example_models", linked_project_name + ".aedt")

self.q3d = os.path.join(local_path, "example_models", "q2d_q3d.aedt")
self.q3d = self.local_scratch.copyfile(os.path.join(local_path, "example_models", "q2d_q3d.aedt"))
self.test_project = self.local_scratch.copyfile(example_project)
self.test_src_project = self.local_scratch.copyfile(source_project)
self.test_lkd_project = self.local_scratch.copyfile(linked_project)
Expand Down Expand Up @@ -189,16 +189,25 @@ def test_09_setup(self):
assert LNA_setup.update()

def test_10_q3d_link(self):
print("Started Test 10")
Copy link
Collaborator

@MaxJPRey MaxJPRey Feb 9, 2022

Choose a reason for hiding this comment

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

@maxcapodi78 Must have been for debugging.

Suggested change
print("Started Test 10")

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

right. I'll remove it

self.aedtapp.insert_design("test_link")
q2d = Q2d(self.q3d)
proj_path = self.q3d
proj_name = q2d.project_name
assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(q2d, extrusion_length=25)
if proj_name in self.aedtapp.project_list:
proj_path = proj_name
print("Started Test 10")
q3d = Q3d(proj_path)

assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(q3d, solution_name="Setup1 : LastAdaptive")
print("Started Test 10")
hfss = Hfss(proj_path)

assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(hfss, solution_name="Setup1 : Sweep")
print("Started Test 10")
hfss = Hfss(proj_path)
assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(
"2DExtractorDesign1", self.q3d, solution_name="Setup1 : Sweep", extrusion_length=25
)
assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(
"Q3DDesign1", self.q3d, solution_name="Setup1 : LastAdaptive"
)
assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(
"Terminal", self.q3d, solution_name="Setup1 : Sweep"
)
assert self.aedtapp.modeler.schematic.add_subcircuit_dynamic_link(
"Terminal", self.q3d, solution_name="Setup2 : Sweep", tline_port="1"
hfss, solution_name="Setup2 : Sweep", tline_port="1"
)
print("Started Test 10")
7 changes: 3 additions & 4 deletions examples/06-Multiphysics/Hfss_Mechanical.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,11 @@
# Starts HFSS
# ~~~~~~~~~~~
# Starts Hfss and initialize the Pyaedt object.

non_graphical = True
version = "2021.2"
hfss = Hfss(project_temp_name, specified_version=version)
hfss = Hfss(project_temp_name, specified_version=version, non_graphical=non_graphical)
pin_names = hfss.modeler.get_excitations_name()


###############################################################################
# Starts Circuit
# ~~~~~~~~~~~~~~
Expand All @@ -54,7 +53,7 @@
# argument of set_sim_option_on_hfss_subcircuit can be the component name, the component id or
# the component object.

circuit.modeler.schematic.refresh_dynamic_link("MyHfss")
circuit.modeler.schematic.refresh_dynamic_link(hfss_comp.composed_name)
circuit.modeler.schematic.set_sim_option_on_hfss_subcircuit(hfss_comp)
hfss_setup_name = hfss.setups[0].name + " : " + hfss.setups[0].sweeps[0].name
circuit.modeler.schematic.set_sim_solution_on_hfss_subcircuit(hfss_comp.composed_name, hfss_setup_name)
Expand Down
86 changes: 41 additions & 45 deletions pyaedt/hfss.py
Original file line number Diff line number Diff line change
Expand Up @@ -3270,8 +3270,8 @@ def assign_perfecte_to_sheets(self, sheet_list, sourcename=None, is_infinite_gnd

Create a sheet and use it to create a Perfect E.

>>> sheet = hfss.modeler.primitives.create_rectangle(hfss.PLANE.XY, [0, 0, -90],
... [10, 2], name="PerfectESheet", matname="Copper")
>>> sheet = hfss.modeler.create_rectangle(hfss.PLANE.XY, [0, 0, -90],
... [10, 2], name="PerfectESheet", matname="Copper")
>>> perfect_e_from_sheet = hfss.assign_perfecte_to_sheets(sheet.name, "PerfectEFromSheet")
>>> type(perfect_e_from_sheet)
<class 'pyaedt.modules.Boundary.BoundaryObject'>
Expand Down Expand Up @@ -3312,8 +3312,8 @@ def assign_perfecth_to_sheets(self, sheet_list, sourcename=None):

Create a sheet and use it to create a Perfect H.

>>> sheet = hfss.modeler.primitives.create_rectangle(hfss.PLANE.XY, [0, 0, -90],
... [10, 2], name="PerfectHSheet", matname="Copper")
>>> sheet = hfss.modeler.create_rectangle(hfss.PLANE.XY, [0, 0, -90],
... [10, 2], name="PerfectHSheet", matname="Copper")
>>> perfect_h_from_sheet = hfss.assign_perfecth_to_sheets(sheet.name, "PerfectHFromSheet")
>>> type(perfect_h_from_sheet)
<class 'pyaedt.modules.Boundary.BoundaryObject'>
Expand Down Expand Up @@ -3372,9 +3372,9 @@ def assign_lumped_rlc_to_sheet(

Create a sheet and use it to create a lumped RLC.

>>> sheet = hfss.modeler.primitives.create_rectangle(hfss.PLANE.XY,
... [0, 0, -90], [10, 2], name="RLCSheet",
... matname="Copper")
>>> sheet = hfss.modeler.create_rectangle(hfss.PLANE.XY,
... [0, 0, -90], [10, 2], name="RLCSheet",
... matname="Copper")
>>> lumped_rlc_to_sheet = hfss.assign_lumped_rlc_to_sheet(sheet.name, hfss.AxisDir.XPos,
... Rvalue=50, Lvalue=1e-9,
... Cvalue=1e-6)
Expand All @@ -3384,14 +3384,14 @@ def assign_lumped_rlc_to_sheet(
"""

if self.solution_type in ["Modal", "Terminal", "Transient Network", "SBR+"] and (Rvalue or Lvalue or Cvalue):
point0, point1 = self.modeler.primitives.get_mid_points_on_dir(sheet_name, axisdir)
point0, point1 = self.modeler.get_mid_points_on_dir(sheet_name, axisdir)

if not sourcename:
sourcename = generate_unique_name("Lump")
elif sourcename in self.modeler.get_boundaries_name():
sourcename = generate_unique_name(sourcename)
start = [str(i) + self.modeler.primitives.model_units for i in point0]
stop = [str(i) + self.modeler.primitives.model_units for i in point1]
start = [str(i) + self.modeler.model_units for i in point0]
stop = [str(i) + self.modeler.model_units for i in point1]
props = OrderedDict()
props["Objects"] = [sheet_name]
props["CurrentLine"] = OrderedDict({"Start": start, "End": stop})
Expand Down Expand Up @@ -3442,9 +3442,9 @@ def assign_impedance_to_sheet(self, sheet_name, sourcename=None, resistance=50,

Create a sheet and use it to create an impedance.

>>> sheet = hfss.modeler.primitives.create_rectangle(hfss.PLANE.XY,
... [0, 0, -90], [10, 2], name="ImpedanceSheet",
... matname="Copper")
>>> sheet = hfss.modeler.create_rectangle(hfss.PLANE.XY,
... [0, 0, -90], [10, 2], name="ImpedanceSheet",
... matname="Copper")
>>> impedance_to_sheet = hfss.assign_impedance_to_sheet(sheet.name, "ImpedanceFromSheet", 100, 50)
>>> type(impedance_to_sheet)
<class 'pyaedt.modules.Boundary.BoundaryObject'>
Expand Down Expand Up @@ -3521,13 +3521,13 @@ def create_circuit_port_from_edges(
toward the first edge of the second rectangle.

>>> plane = hfss.PLANE.XY
>>> rectangle1 = hfss.modeler.primitives.create_rectangle(plane, [10, 10, 10], [10, 10],
... name="rectangle1_for_port")
>>> edges1 = hfss.modeler.primitives.get_object_edges(rectangle1.id)
>>> rectangle1 = hfss.modeler.create_rectangle(plane, [10, 10, 10], [10, 10],
... name="rectangle1_for_port")
>>> edges1 = hfss.modeler.get_object_edges(rectangle1.id)
>>> first_edge = edges1[0]
>>> rectangle2 = hfss.modeler.primitives.create_rectangle(plane, [30, 10, 10], [10, 10],
... name="rectangle2_for_port")
>>> edges2 = hfss.modeler.primitives.get_object_edges(rectangle2.id)
>>> rectangle2 = hfss.modeler.create_rectangle(plane, [30, 10, 10], [10, 10],
... name="rectangle2_for_port")
>>> edges2 = hfss.modeler.get_object_edges(rectangle2.id)
>>> second_edge = edges2[0]
>>> hfss.solution_type = "Modal"
>>> hfss.create_circuit_port_from_edges(first_edge, second_edge, port_name="PortExample",
Expand Down Expand Up @@ -3576,9 +3576,9 @@ def edit_source(self, portandmode, powerin, phase="0deg"):
Create a circle sheet and use it to create a wave port.
Set up the thermal power for the port created above.

>>> sheet = hfss.modeler.primitives.create_circle(hfss.PLANE.YZ,
... [-20, 0, 0], 10,
... name="sheet_for_source")
>>> sheet = hfss.modeler.create_circle(hfss.PLANE.YZ,
... [-20, 0, 0], 10,
... name="sheet_for_source")
>>> hfss.solution_type = "Modal"
>>> wave_port = hfss.create_wave_port_from_sheet(sheet, 5, hfss.AxisDir.XNeg, 40,
... 2, "SheetWavePort", True)
Expand Down Expand Up @@ -3635,9 +3635,9 @@ def thicken_port_sheets(self, inputlist, value, internalExtr=True, internalvalue
Create a circle sheet and use it to create a wave port.
Set the thickness of this circle sheet to ``"2 mm"``.

>>> sheet_for_thickness = hfss.modeler.primitives.create_circle(hfss.PLANE.YZ,
... [60, 60, 60], 10,
... name="SheetForThickness")
>>> sheet_for_thickness = hfss.modeler.create_circle(hfss.PLANE.YZ,
... [60, 60, 60], 10,
... name="SheetForThickness")
>>> port_for_thickness = hfss.create_wave_port_from_sheet(sheet_for_thickness, 5, hfss.AxisDir.XNeg,
... 40, 2, "WavePortForThickness", True)
>>> hfss.thicken_port_sheets(["SheetForThickness"], 2)
Expand All @@ -3648,7 +3648,7 @@ def thicken_port_sheets(self, inputlist, value, internalExtr=True, internalvalue

tol = 1e-6
ports_ID = {}
aedt_bounding_box = self.modeler.primitives.get_model_bounding_box()
aedt_bounding_box = self.modeler.get_model_bounding_box()
directions = {}
for el in inputlist:
objID = self.modeler.oeditor.GetFaceIDs(el)
Expand All @@ -3661,7 +3661,7 @@ def thicken_port_sheets(self, inputlist, value, internalExtr=True, internalvalue
["NAME:SheetThickenParameters", "Thickness:=", str(l) + "mm", "BothSides:=", False],
)
# aedt_bounding_box2 = self._oeditor.GetModelBoundingBox()
aedt_bounding_box2 = self.modeler.primitives.get_model_bounding_box()
aedt_bounding_box2 = self.modeler.get_model_bounding_box()
self._odesign.Undo()
if aedt_bounding_box != aedt_bounding_box2:
directions[el] = "External"
Expand All @@ -3684,7 +3684,7 @@ def thicken_port_sheets(self, inputlist, value, internalExtr=True, internalvalue
objID = self.modeler.oeditor.GetFaceIDs(el)
maxarea = 0
for f in objID:
faceArea = self.modeler.primitives.get_face_area(int(f))
faceArea = self.modeler.get_face_area(int(f))
if faceArea > maxarea:
maxarea = faceArea
faceCenter = self.modeler.oeditor.GetFaceCenter(int(f))
Expand All @@ -3704,7 +3704,7 @@ def thicken_port_sheets(self, inputlist, value, internalExtr=True, internalvalue
try:
fc2 = self.modeler.oeditor.GetFaceCenter(f)
fc2 = [float(i) for i in fc2]
fa2 = self.modeler.primitives.get_face_area(int(f))
fa2 = self.modeler.get_face_area(int(f))
faceoriginal = [float(i) for i in faceCenter]
# dist = mat.sqrt(sum([(a*a-b*b) for a,b in zip(faceCenter, fc2)]))
if abs(fa2 - maxarea) < tol ** 2 and (
Expand Down Expand Up @@ -4154,8 +4154,8 @@ def assign_radiation_boundary_to_objects(self, obj_names, boundary_name=""):

Create a box and assign a radiation boundary to it.

>>> radiation_box = hfss.modeler.primitives.create_box([0, -200, -200], [200, 200, 200],
... name="Radiation_box")
>>> radiation_box = hfss.modeler.create_box([0, -200, -200], [200, 200, 200],
... name="Radiation_box")
>>> radiation = hfss.assign_radiation_boundary_to_objects("Radiation_box")
>>> type(radiation)
<class 'pyaedt.modules.Boundary.BoundaryObject'>
Expand Down Expand Up @@ -4196,9 +4196,9 @@ def assign_radiation_boundary_to_faces(self, faces_id, boundary_name=""):
Create a box. Select the faces of this box and assign a radiation
boundary to them.

>>> radiation_box = hfss.modeler.primitives.create_box([0 , -100, 0], [200, 200, 200],
... name="RadiationForFaces")
>>> ids = [i.id for i in hfss.modeler.primitives["RadiationForFaces"].faces]
>>> radiation_box = hfss.modeler.create_box([0 , -100, 0], [200, 200, 200],
... name="RadiationForFaces")
>>> ids = [i.id for i in hfss.modeler["RadiationForFaces"].faces]
>>> radiation = hfss.assign_radiation_boundary_to_faces(ids)
>>> type(radiation)
<class 'pyaedt.modules.Boundary.BoundaryObject'>
Expand Down Expand Up @@ -4242,21 +4242,17 @@ def _create_sbr_doppler_setup(
else:
setup1.props["SbrRangeDopplerWaveformType"] = setup_type
setup1.props["SbrRangeDopplerTimeVariable"] = time_var
setup1.props["SbrRangeDopplerCenterFreq"] = self.modeler.primitives._arg_with_dim(center_freq, "GHz")
setup1.props["SbrRangeDopplerRangeResolution"] = self.modeler.primitives._arg_with_dim(resolution, "meter")
setup1.props["SbrRangeDopplerRangePeriod"] = self.modeler.primitives._arg_with_dim(period, "meter")
setup1.props["SbrRangeDopplerVelocityResolution"] = self.modeler.primitives._arg_with_dim(
velocity_resolution, "m_per_sec"
)
setup1.props["SbrRangeDopplerVelocityMin"] = self.modeler.primitives._arg_with_dim(min_velocity, "m_per_sec")
setup1.props["SbrRangeDopplerVelocityMax"] = self.modeler.primitives._arg_with_dim(max_velocity, "m_per_sec")
setup1.props["SbrRangeDopplerCenterFreq"] = self.modeler._arg_with_dim(center_freq, "GHz")
setup1.props["SbrRangeDopplerRangeResolution"] = self.modeler._arg_with_dim(resolution, "meter")
setup1.props["SbrRangeDopplerRangePeriod"] = self.modeler._arg_with_dim(period, "meter")
setup1.props["SbrRangeDopplerVelocityResolution"] = self.modeler._arg_with_dim(velocity_resolution, "m_per_sec")
setup1.props["SbrRangeDopplerVelocityMin"] = self.modeler._arg_with_dim(min_velocity, "m_per_sec")
setup1.props["SbrRangeDopplerVelocityMax"] = self.modeler._arg_with_dim(max_velocity, "m_per_sec")
setup1.props["DopplerRayDensityPerWavelength"] = ray_density_per_wavelenght
setup1.props["MaxNumberOfBounces"] = max_bounces
if setup_type != "PulseDoppler":
setup1.props["IncludeRangeVelocityCouplingEffect"] = include_coupling_effects
setup1.props["SbrRangeDopplerA/DSamplingRate"] = self.modeler.primitives._arg_with_dim(
doppler_ad_sampling_rate, "MHz"
)
setup1.props["SbrRangeDopplerA/DSamplingRate"] = self.modeler._arg_with_dim(doppler_ad_sampling_rate, "MHz")
setup1.update()
return setup1

Expand Down
Loading