Skip to content

Commit 21d16e5

Browse files
authored
Add the clear option when creating a new HFSS sweep subrange. (#819)
* Add tests for cleaning the default sweep. * Add the 'clear' option for the sweep. * Update the sweep and return the result of the update. * Improve comments. * Add additional scenarios for testing the sweep subranges.
1 parent 87df976 commit 21d16e5

File tree

2 files changed

+79
-3
lines changed

2 files changed

+79
-3
lines changed

_unittest/test_20_HFSS.py

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,61 @@ def test_06e_delete_setup(self):
234234
assert self.aedtapp.delete_setup(setup_name)
235235
assert setuptd.name not in self.aedtapp.existing_analysis_setups
236236

237+
def test_06f_sweep_add_subrange(self):
238+
box_sweep = self.aedtapp.modeler.primitives.create_box([0, 0, 20], [10, 10, 5], "box_sweep", "Copper")
239+
box_sweep2 = self.aedtapp.modeler.primitives.create_box([0, 0, 30], [10, 10, 5], "box_sweep2", "Copper")
240+
port = self.aedtapp.create_wave_port_between_objects(
241+
"box_sweep", "box_sweep2", self.aedtapp.AxisDir.XNeg, 50, 1, "WaveForSweep", False
242+
)
243+
setup = self.aedtapp.create_setup(setupname="MySetupForSweep")
244+
sweep = setup.add_sweep()
245+
assert sweep.add_subrange("LinearCount", 1, 3, 10, "GHz")
246+
assert sweep.add_subrange("LinearCount", 2, 4, 10, "GHz")
247+
assert sweep.add_subrange("LinearStep", 1.1, 2.1, 0.4, "GHz")
248+
assert sweep.add_subrange("LinearCount", 1, 1.5, 5, "MHz")
249+
assert sweep.add_subrange("LogScale", 1, 3, 10, "GHz")
250+
251+
def test_06g_sweep_clear_subrange(self):
252+
box_sweep3 = self.aedtapp.modeler.primitives.create_box([0, 0, 50], [10, 10, 5], "box_sweep3", "Copper")
253+
box_sweep4 = self.aedtapp.modeler.primitives.create_box([0, 0, 60], [10, 10, 5], "box_sweep4", "Copper")
254+
port = self.aedtapp.create_wave_port_between_objects(
255+
"box_sweep3", "box_sweep4", self.aedtapp.AxisDir.XNeg, 50, 1, "WaveForSweepWithClear", False
256+
)
257+
setup = self.aedtapp.create_setup(setupname="MySetupClearSweep")
258+
sweep = setup.add_sweep()
259+
assert sweep.add_subrange("LinearCount", 1.1, 3.6, 10, "GHz", clear=True)
260+
assert sweep.props["RangeType"] == "LinearCount"
261+
assert sweep.props["RangeStart"] == "1.1GHz"
262+
assert sweep.props["RangeEnd"] == "3.6GHz"
263+
assert sweep.props["RangeCount"] == 10
264+
assert sweep.add_subrange("LinearCount", 2, 5, 10, "GHz")
265+
setup.update()
266+
sweep.update()
267+
assert sweep.add_subrange("LinearCount", 3, 8, 10, "GHz", clear=True)
268+
assert sweep.props["RangeType"] == "LinearCount"
269+
assert sweep.props["RangeStart"] == "3GHz"
270+
assert sweep.props["RangeEnd"] == "8GHz"
271+
assert sweep.props["RangeCount"] == 10
272+
assert sweep.add_subrange("LinearStep", 1.1, 2.1, 0.4, "GHz", clear=True)
273+
assert sweep.props["RangeType"] == "LinearStep"
274+
assert sweep.props["RangeStart"] == "1.1GHz"
275+
assert sweep.props["RangeEnd"] == "2.1GHz"
276+
assert sweep.props["RangeStep"] == "0.4GHz"
277+
assert sweep.add_subrange("LogScale", 1, 3, 10, clear=True)
278+
assert sweep.props["RangeType"] == "LogScale"
279+
assert sweep.props["RangeStart"] == "1GHz"
280+
assert sweep.props["RangeEnd"] == "3GHz"
281+
assert sweep.props["RangeSamples"] == 10
282+
sweep.props["Type"] = "Discrete"
283+
sweep.update()
284+
assert sweep.add_subrange("SinglePoints", 23, clear=True)
285+
assert sweep.props["RangeType"] == "SinglePoints"
286+
assert sweep.props["RangeStart"] == "23GHz"
287+
assert sweep.props["RangeEnd"] == "23GHz"
288+
assert sweep.props["SaveSingleField"] == False
289+
237290
def test_06z_validate_setup(self):
238-
list, ok = self.aedtapp.validate_full_design(ports=5)
291+
list, ok = self.aedtapp.validate_full_design(ports=7)
239292
assert ok
240293

241294
def test_07_set_power(self):

pyaedt/modules/SetupTemplates.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,7 +1241,7 @@ def __init__(self, oanalysis, setupname, sweepname, sweeptype="Interpolating", p
12411241
self.props["SweepRanges"] = {"Subrange": []}
12421242

12431243
@aedt_exception_handler
1244-
def add_subrange(self, rangetype, start, end=None, count=None, unit="GHz", save_single_fields=False):
1244+
def add_subrange(self, rangetype, start, end=None, count=None, unit="GHz", save_single_fields=False, clear=False):
12451245
"""Add a subrange to the sweep.
12461246
12471247
Parameters
@@ -1260,6 +1260,9 @@ def add_subrange(self, rangetype, start, end=None, count=None, unit="GHz", save_
12601260
save_single_fields : bool, optional
12611261
Whether to save the fields of the single point. The default is ``False``.
12621262
Used only for ``rangetype="SinglePoints"``.
1263+
clear : boolean, optional
1264+
If set to ``True``, all other subranges will be suppressed except the current one under creation.
1265+
Default value is ``False``.
12631266
12641267
Returns
12651268
-------
@@ -1281,6 +1284,25 @@ def add_subrange(self, rangetype, start, end=None, count=None, unit="GHz", save_
12811284
if rangetype == "LinearCount" or rangetype == "LinearStep" or rangetype == "LogScale":
12821285
if not end or not count:
12831286
raise AttributeError("Parameters 'end' and 'count' must be present.")
1287+
1288+
if clear:
1289+
self.props["RangeType"] = rangetype
1290+
self.props["RangeStart"] = str(start) + unit
1291+
if rangetype == "LinearCount":
1292+
self.props["RangeEnd"] = str(end) + unit
1293+
self.props["RangeCount"] = count
1294+
elif rangetype == "LinearStep":
1295+
self.props["RangeEnd"] = str(end) + unit
1296+
self.props["RangeStep"] = str(count) + unit
1297+
elif rangetype == "LogScale":
1298+
self.props["RangeEnd"] = str(end) + unit
1299+
self.props["RangeSamples"] = count
1300+
elif rangetype == "SinglePoints":
1301+
self.props["RangeEnd"] = str(start) + unit
1302+
self.props["SaveSingleField"] = save_single_fields
1303+
self.props["SweepRanges"] = {"Subrange": []}
1304+
return self.update()
1305+
12841306
range = {}
12851307
range["RangeType"] = rangetype
12861308
range["RangeStart"] = str(start) + unit
@@ -1298,7 +1320,8 @@ def add_subrange(self, rangetype, start, end=None, count=None, unit="GHz", save_
12981320
range["RangeEnd"] = str(start) + unit
12991321
range["SaveSingleField"] = save_single_fields
13001322
self.props["SweepRanges"]["Subrange"].append(range)
1301-
return True
1323+
1324+
return self.update()
13021325

13031326
@aedt_exception_handler
13041327
def create(self):

0 commit comments

Comments
 (0)