pyedb 0.9.0__py3-none-any.whl → 0.10.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyedb might be problematic. Click here for more details.

@@ -22,29 +22,126 @@
22
22
 
23
23
  from __future__ import absolute_import
24
24
 
25
- import re
26
-
27
25
  from pyedb.generic.general_methods import pyedb_function_handler
28
26
 
29
27
 
30
28
  class LayerEdbClass(object):
31
29
  """Manages Edb Layers. Replaces EDBLayer."""
32
30
 
33
- def __init__(self, pclass, name):
34
- self._pclass = pclass
31
+ def __init__(self, pedb, edb_object=None, name="", layer_type="undefined", **kwargs):
32
+ self._pedb = pedb
35
33
  self._name = name
36
34
  self._color = ()
37
35
  self._type = ""
38
36
 
37
+ if edb_object:
38
+ self._edb_object = edb_object.Clone()
39
+ else:
40
+ self._create(layer_type)
41
+ self.update(**kwargs)
42
+
43
+ @pyedb_function_handler
44
+ def _create(self, layer_type):
45
+ layer_type = self._layer_name_mapping[layer_type]
46
+ layer_type = self._doc_layer_mapping[layer_type]
47
+
48
+ self._edb_object = self._pedb.edb_api.cell._cell.Layer(
49
+ self._name,
50
+ layer_type,
51
+ )
52
+
53
+ @pyedb_function_handler
54
+ def update(self, **kwargs):
55
+ for k, v in kwargs.items():
56
+ if k in dir(self):
57
+ self.__setattr__(k, v)
58
+ else:
59
+ self._pedb.logger.error(f"{k} is not a valid layer attribute")
60
+
61
+ @property
62
+ def id(self):
63
+ return self._edb_object.GetLayerId()
64
+
65
+ @property
66
+ def fill_material(self):
67
+ """The layer's fill material."""
68
+ return self._edb_object.GetFillMaterial(True)
69
+
70
+ @fill_material.setter
71
+ def fill_material(self, value):
72
+ self._edb_object.SetFillMaterial(value)
73
+
74
+ @property
75
+ def _stackup_layer_mapping(self):
76
+ return {
77
+ "SignalLayer": self._edb.cell.layer_type.SignalLayer,
78
+ "DielectricLayer": self._edb.cell.layer_type.DielectricLayer,
79
+ }
80
+
81
+ @property
82
+ def _doc_layer_mapping(self):
83
+ return {
84
+ "ConductingLayer": self._edb.cell.layer_type.ConductingLayer,
85
+ "AirlinesLayer": self._edb.cell.layer_type.AirlinesLayer,
86
+ "ErrorsLayer": self._edb.cell.layer_type.ErrorsLayer,
87
+ "SymbolLayer": self._edb.cell.layer_type.SymbolLayer,
88
+ "MeasureLayer": self._edb.cell.layer_type.MeasureLayer,
89
+ "AssemblyLayer": self._edb.cell.layer_type.AssemblyLayer,
90
+ "SilkscreenLayer": self._edb.cell.layer_type.SilkscreenLayer,
91
+ "SolderMaskLayer": self._edb.cell.layer_type.SolderMaskLayer,
92
+ "SolderPasteLayer": self._edb.cell.layer_type.SolderPasteLayer,
93
+ "GlueLayer": self._edb.cell.layer_type.GlueLayer,
94
+ "WirebondLayer": self._edb.cell.layer_type.WirebondLayer,
95
+ "UserLayer": self._edb.cell.layer_type.UserLayer,
96
+ "SIwaveHFSSSolverRegions": self._edb.cell.layer_type.SIwaveHFSSSolverRegions,
97
+ "PostprocessingLayer": self._edb.cell.layer_type.PostprocessingLayer,
98
+ "OutlineLayer": self._edb.cell.layer_type.OutlineLayer,
99
+ "LayerTypesCount": self._edb.cell.layer_type.LayerTypesCount,
100
+ "UndefinedLayerType": self._edb.cell.layer_type.UndefinedLayerType,
101
+ }
102
+
103
+ @property
104
+ def _layer_type_mapping(self):
105
+ mapping = {}
106
+ mapping.update(self._stackup_layer_mapping)
107
+ mapping.update(self._doc_layer_mapping)
108
+ return mapping
109
+
110
+ @property
111
+ def _layer_name_mapping(self):
112
+ return {
113
+ "signal": "SignalLayer",
114
+ "dielectric": "DielectricLayer",
115
+ "conducting": "ConductingLayer",
116
+ "airlines": "AirlinesLayer",
117
+ "errors": "ErrorsLayer",
118
+ "symbol": "SymbolLayer",
119
+ "measure": "MeasureLayer",
120
+ "assembly": "AssemblyLayer",
121
+ "silkscreen": "SilkscreenLayer",
122
+ "soldermask": "SolderMaskLayer",
123
+ "solderpaste": "SolderPasteLayer",
124
+ "glue": "GlueLayer",
125
+ "wirebound": "WirebondLayer",
126
+ "user": "UserLayer",
127
+ "siwavehfsssolverregions": "SIwaveHFSSSolverRegions",
128
+ "postprocessing": "PostprocessingLayer",
129
+ "outline": "OutlineLayer",
130
+ "layertypescount": "LayerTypesCount",
131
+ "undefined": "UndefinedLayerType",
132
+ }
133
+
134
+ @property
135
+ def _layer_name_mapping_reversed(self):
136
+ return {j: i for i, j in self._layer_name_mapping.items()}
137
+
39
138
  @property
40
139
  def _edb(self):
41
- return self._pclass._pedb.edb_api
140
+ return self._pedb.edb_api
42
141
 
43
142
  @property
44
143
  def _edb_layer(self):
45
- for l in self._pclass._edb_layer_list:
46
- if l.GetName() == self._name:
47
- return l.Clone()
144
+ return self._edb_object
48
145
 
49
146
  @property
50
147
  def is_stackup_layer(self):
@@ -84,7 +181,7 @@ class LayerEdbClass(object):
84
181
  def color(self, rgb):
85
182
  layer_clone = self._edb_layer
86
183
  layer_clone.SetColor(*rgb)
87
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
184
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
88
185
  self._color = rgb
89
186
 
90
187
  @property
@@ -102,7 +199,7 @@ class LayerEdbClass(object):
102
199
  def transparency(self, trans):
103
200
  layer_clone = self._edb_layer
104
201
  layer_clone.SetTransparency(trans)
105
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
202
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
106
203
 
107
204
  @property
108
205
  def name(self):
@@ -119,35 +216,28 @@ class LayerEdbClass(object):
119
216
  layer_clone = self._edb_layer
120
217
  old_name = layer_clone.GetName()
121
218
  layer_clone.SetName(name)
122
- self._pclass._set_layout_stackup(layer_clone, "change_name", self._name)
219
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_name", self._name)
123
220
  self._name = name
124
- for padstack_def in list(self._pclass._pedb.padstacks.definitions.values()):
221
+ for padstack_def in list(self._pedb.padstacks.definitions.values()):
125
222
  padstack_def._update_layer_names(old_name=old_name, updated_name=name)
126
223
 
127
224
  @property
128
225
  def type(self):
129
226
  """Retrieve type of the layer."""
130
- return re.sub(r"Layer$", "", self._edb_layer.GetLayerType().ToString()).lower()
227
+ return self._layer_name_mapping_reversed[self._edb_layer.GetLayerType().ToString()]
131
228
 
132
229
  @type.setter
133
- def type(self, new_type):
134
- if new_type == self.type:
135
- return
230
+ def type(self, value):
231
+ value = self._layer_name_mapping[value]
136
232
  layer_clone = self._edb_layer
137
- if new_type == "signal":
138
- layer_clone.SetLayerType(self._edb.cell.layer_type.SignalLayer)
139
- self._type = new_type
140
- elif new_type == "dielectric":
141
- layer_clone.SetLayerType(self._edb.cell.layer_type.DielectricLayer)
142
- self._type = new_type
143
- else:
144
- return
145
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
233
+ layer_clone.SetLayerType(self._layer_type_mapping[value])
234
+ self._type = value
235
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
146
236
 
147
237
 
148
238
  class StackupLayerEdbClass(LayerEdbClass):
149
- def __init__(self, pclass, name):
150
- super().__init__(pclass, name)
239
+ def __init__(self, pedb, edb_object=None, name="", layer_type="signal", **kwargs):
240
+ super().__init__(pedb, edb_object, name=name, layer_type=layer_type, **kwargs)
151
241
  self._material = ""
152
242
  self._conductivity = 0.0
153
243
  self._permittivity = 0.0
@@ -166,6 +256,17 @@ class StackupLayerEdbClass(LayerEdbClass):
166
256
  self._upper_elevation = 0.0
167
257
  self._lower_elevation = 0.0
168
258
 
259
+ def _create(self, layer_type):
260
+ layer_type = self._layer_name_mapping[layer_type]
261
+ layer_type = self._layer_type_mapping[layer_type]
262
+ self._edb_object = self._pedb.edb_api.cell._cell.StackupLayer(
263
+ self._name,
264
+ layer_type,
265
+ self._pedb.edb_value(0),
266
+ self._pedb.edb_value(0),
267
+ "copper",
268
+ )
269
+
169
270
  @property
170
271
  def lower_elevation(self):
171
272
  """Lower elevation.
@@ -180,10 +281,10 @@ class StackupLayerEdbClass(LayerEdbClass):
180
281
 
181
282
  @lower_elevation.setter
182
283
  def lower_elevation(self, value):
183
- if self._pclass.mode == "Overlapping":
284
+ if self._pedb.stackup.mode == "Overlapping":
184
285
  layer_clone = self._edb_layer
185
- layer_clone.SetLowerElevation(self._pclass._edb_value(value))
186
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
286
+ layer_clone.SetLowerElevation(self._pedb.stackup._edb_value(value))
287
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
187
288
 
188
289
  @property
189
290
  def upper_elevation(self):
@@ -212,7 +313,7 @@ class StackupLayerEdbClass(LayerEdbClass):
212
313
  def is_negative(self, value):
213
314
  layer_clone = self._edb_layer
214
315
  layer_clone.SetNegative(value)
215
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
316
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
216
317
 
217
318
  @property
218
319
  def material(self):
@@ -228,7 +329,7 @@ class StackupLayerEdbClass(LayerEdbClass):
228
329
  def material(self, name):
229
330
  layer_clone = self._edb_layer
230
331
  layer_clone.SetMaterial(name)
231
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
332
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
232
333
  self._material = name
233
334
 
234
335
  @property
@@ -239,8 +340,8 @@ class StackupLayerEdbClass(LayerEdbClass):
239
340
  -------
240
341
  float
241
342
  """
242
- if self.material in self._pclass._pedb.materials.materials:
243
- self._conductivity = self._pclass._pedb.materials[self.material].conductivity
343
+ if self.material in self._pedb.materials.materials:
344
+ self._conductivity = self._pedb.materials[self.material].conductivity
244
345
  return self._conductivity
245
346
 
246
347
  return None
@@ -253,8 +354,8 @@ class StackupLayerEdbClass(LayerEdbClass):
253
354
  -------
254
355
  float
255
356
  """
256
- if self.material in self._pclass._pedb.materials.materials:
257
- self._permittivity = self._pclass._pedb.materials[self.material].permittivity
357
+ if self.material in self._pedb.materials.materials:
358
+ self._permittivity = self._pedb.materials[self.material].permittivity
258
359
  return self._permittivity
259
360
  return None
260
361
 
@@ -266,8 +367,8 @@ class StackupLayerEdbClass(LayerEdbClass):
266
367
  -------
267
368
  float
268
369
  """
269
- if self.material in self._pclass._pedb.materials.materials:
270
- self._loss_tangent = self._pclass._pedb.materials[self.material].loss_tangent
370
+ if self.material in self._pedb.materials.materials:
371
+ self._loss_tangent = self._pedb.materials[self.material].loss_tangent
271
372
  return self._loss_tangent
272
373
  return None
273
374
 
@@ -282,10 +383,11 @@ class StackupLayerEdbClass(LayerEdbClass):
282
383
 
283
384
  @dielectric_fill.setter
284
385
  def dielectric_fill(self, name):
386
+ name = name.lower()
285
387
  if self.type == "signal":
286
388
  layer_clone = self._edb_layer
287
389
  layer_clone.SetFillMaterial(name)
288
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
390
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
289
391
  self._dielectric_fill = name
290
392
  else:
291
393
  pass
@@ -308,8 +410,8 @@ class StackupLayerEdbClass(LayerEdbClass):
308
410
  if not self.is_stackup_layer: # pragma: no cover
309
411
  return
310
412
  layer_clone = self._edb_layer
311
- layer_clone.SetThickness(self._pclass._edb_value(value))
312
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
413
+ layer_clone.SetThickness(self._pedb.stackup._edb_value(value))
414
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
313
415
  self._thickness = value
314
416
 
315
417
  @property
@@ -333,8 +435,8 @@ class StackupLayerEdbClass(LayerEdbClass):
333
435
  else:
334
436
  layer_clone = self._edb_layer
335
437
  layer_clone.SetEtchFactorEnabled(True)
336
- layer_clone.SetEtchFactor(self._pclass._edb_value(value))
337
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
438
+ layer_clone.SetEtchFactor(self._pedb.stackup._edb_value(value))
439
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
338
440
  self._etch_factor = value
339
441
 
340
442
  @property
@@ -358,12 +460,12 @@ class StackupLayerEdbClass(LayerEdbClass):
358
460
  if set_enable:
359
461
  layer_clone = self._edb_layer
360
462
  layer_clone.SetRoughnessEnabled(True)
361
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
463
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
362
464
  self.assign_roughness_model()
363
465
  else:
364
466
  layer_clone = self._edb_layer
365
467
  layer_clone.SetRoughnessEnabled(False)
366
- self._pclass._set_layout_stackup(layer_clone, "change_attribute")
468
+ self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
367
469
 
368
470
  @property
369
471
  def top_hallhuray_nodule_radius(self):
@@ -454,11 +556,11 @@ class StackupLayerEdbClass(LayerEdbClass):
454
556
  if not self.is_stackup_layer: # pragma: no cover
455
557
  return
456
558
  if surface == "top":
457
- return self._edb_layer.GetRoughnessModel(self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Top)
559
+ return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Top)
458
560
  elif surface == "bottom":
459
- return self._edb_layer.GetRoughnessModel(self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Bottom)
561
+ return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom)
460
562
  elif surface == "side":
461
- return self._edb_layer.GetRoughnessModel(self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Side)
563
+ return self._edb_layer.GetRoughnessModel(self._pedb.edb_api.Cell.RoughnessModel.Region.Side)
462
564
 
463
565
  @pyedb_function_handler()
464
566
  def assign_roughness_model(
@@ -492,38 +594,38 @@ class StackupLayerEdbClass(LayerEdbClass):
492
594
  if not self.is_stackup_layer: # pragma: no cover
493
595
  return
494
596
 
495
- radius = self._pclass._edb_value(huray_radius)
597
+ radius = self._pedb.stackup._edb_value(huray_radius)
496
598
  self._hurray_nodule_radius = huray_radius
497
- surface_ratio = self._pclass._edb_value(huray_surface_ratio)
599
+ surface_ratio = self._pedb.stackup._edb_value(huray_surface_ratio)
498
600
  self._hurray_surface_ratio = huray_surface_ratio
499
- groisse_roughness = self._pclass._edb_value(groisse_roughness)
601
+ groisse_roughness = self._pedb.stackup._edb_value(groisse_roughness)
500
602
  regions = []
501
603
  if apply_on_surface == "all":
502
604
  self._side_roughness = "all"
503
605
  regions = [
504
- self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Top,
505
- self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Side,
506
- self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Bottom,
606
+ self._pedb.edb_api.Cell.RoughnessModel.Region.Top,
607
+ self._pedb.edb_api.Cell.RoughnessModel.Region.Side,
608
+ self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom,
507
609
  ]
508
610
  elif apply_on_surface == "top":
509
611
  self._side_roughness = "top"
510
- regions = [self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Top]
612
+ regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Top]
511
613
  elif apply_on_surface == "bottom":
512
614
  self._side_roughness = "bottom"
513
- regions = [self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Bottom]
615
+ regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Bottom]
514
616
  elif apply_on_surface == "side":
515
617
  self._side_roughness = "side"
516
- regions = [self._pclass._pedb.edb_api.Cell.RoughnessModel.Region.Side]
618
+ regions = [self._pedb.edb_api.Cell.RoughnessModel.Region.Side]
517
619
 
518
620
  layer_clone = self._edb_layer
519
621
  layer_clone.SetRoughnessEnabled(True)
520
622
  for r in regions:
521
623
  if model_type == "huray":
522
- model = self._pclass._pedb.edb_api.Cell.HurrayRoughnessModel(radius, surface_ratio)
624
+ model = self._pedb.edb_api.Cell.HurrayRoughnessModel(radius, surface_ratio)
523
625
  else:
524
- model = self._pclass._pedb.edb_api.Cell.GroisseRoughnessModel(groisse_roughness)
626
+ model = self._pedb.edb_api.Cell.GroisseRoughnessModel(groisse_roughness)
525
627
  layer_clone.SetRoughnessModel(r, model)
526
- return self._pclass._set_layout_stackup(layer_clone, "change_attribute")
628
+ return self._pedb.stackup._set_layout_stackup(layer_clone, "change_attribute")
527
629
 
528
630
  @pyedb_function_handler()
529
631
  def _json_format(self):
@@ -564,7 +666,7 @@ class StackupLayerEdbClass(LayerEdbClass):
564
666
  material_data = layer["material"]
565
667
  if material_data is not None:
566
668
  material_name = layer["material"]["name"]
567
- self._pclass._pedb.materials.add_material(material_name, **material_data)
669
+ self._pedb.materials.add_material(material_name, **material_data)
568
670
  self.material = material_name
569
671
  if layer["dielectric_fill"]:
570
672
  if isinstance(layer["dielectric_fill"], str):
@@ -572,7 +674,7 @@ class StackupLayerEdbClass(LayerEdbClass):
572
674
  else:
573
675
  dielectric_data = layer["dielectric_fill"]
574
676
  if dielectric_data is not None:
575
- self._pclass._pedb.materials.add_material(**dielectric_data)
677
+ self._pedb.materials.add_material(**dielectric_data)
576
678
  self.dielectric_fill = layer["dielectric_fill"]["name"]
577
679
  self.thickness = layer["thickness"]
578
680
  self.etch_factor = layer["etch_factor"]
@@ -25,6 +25,7 @@ import json
25
25
  import os
26
26
 
27
27
  from pyedb.dotnet.clr_module import Dictionary
28
+ from pyedb.dotnet.edb_core.edb_data.hfss_simulation_setup_data import AdaptiveType
28
29
  from pyedb.dotnet.edb_core.edb_data.sources import Source, SourceType
29
30
  from pyedb.generic.constants import (
30
31
  BasisOrder,
@@ -1249,6 +1250,9 @@ class SimulationConfigurationAc(object):
1249
1250
  self._snap_length_threshold = "2.5um"
1250
1251
  self._min_plane_area_to_mesh = "4mil2" # Newly Added
1251
1252
  self._mesh_sizefactor = 0.0
1253
+ self._adaptive_type = AdaptiveType.SingleFrequency
1254
+ self._adaptive_low_freq = "0GHz"
1255
+ self._adaptive_high_freq = "20GHz"
1252
1256
 
1253
1257
  @property
1254
1258
  def sweep_interpolating(self): # pragma: no cover
@@ -1902,6 +1906,51 @@ class SimulationConfigurationAc(object):
1902
1906
  if value > 0.0:
1903
1907
  self._do_lambda_refinement = False
1904
1908
 
1909
+ @property
1910
+ def adaptive_type(self):
1911
+ """HFSS adaptive type.
1912
+
1913
+ Returns
1914
+ -------
1915
+ class: pyedb.dotnet.edb_core.edb_data.hfss_simulation_setup_data.AdaptiveType
1916
+ """
1917
+ return self._adaptive_type
1918
+
1919
+ @adaptive_type.setter
1920
+ def adaptive_type(self, value):
1921
+ if isinstance(value, int) and value in range(3):
1922
+ self._adaptive_type = value
1923
+
1924
+ @property
1925
+ def adaptive_low_freq(self):
1926
+ """HFSS broadband low frequency adaptive meshing.
1927
+
1928
+ Returns
1929
+ -------
1930
+ str
1931
+ """
1932
+ return self._adaptive_low_freq
1933
+
1934
+ @adaptive_low_freq.setter
1935
+ def adaptive_low_freq(self, value):
1936
+ if isinstance(value, str):
1937
+ self._adaptive_low_freq = value
1938
+
1939
+ @property
1940
+ def adaptive_high_freq(self):
1941
+ """HFSS broadband high frequency adaptive meshing.
1942
+
1943
+ Returns
1944
+ -------
1945
+ str
1946
+ """
1947
+ return self._adaptive_high_freq
1948
+
1949
+ @adaptive_high_freq.setter
1950
+ def adaptive_high_freq(self, value):
1951
+ if isinstance(value, str):
1952
+ self._adaptive_high_freq = value
1953
+
1905
1954
 
1906
1955
  class SimulationConfiguration(object):
1907
1956
  """Provides an ASCII simulation configuration file parser.
@@ -1276,25 +1276,43 @@ class EdbHfss(object):
1276
1276
  as argument"
1277
1277
  )
1278
1278
  return False
1279
- adapt = self._pedb.simsetupdata.AdaptiveFrequencyData()
1280
- adapt.AdaptiveFrequency = simulation_setup.mesh_freq
1281
- adapt.MaxPasses = int(simulation_setup.max_num_passes)
1282
- adapt.MaxDelta = str(simulation_setup.max_mag_delta_s)
1283
1279
  simsetup_info = self._pedb.simsetupdata.SimSetupInfo[self._pedb.simsetupdata.HFSSSimulationSettings]()
1284
1280
  simsetup_info.Name = simulation_setup.setup_name
1285
1281
 
1282
+ if simulation_setup.ac_settings.adaptive_type == 0:
1283
+ adapt = self._pedb.simsetupdata.AdaptiveFrequencyData()
1284
+ adapt.AdaptiveFrequency = simulation_setup.mesh_freq
1285
+ adapt.MaxPasses = int(simulation_setup.max_num_passes)
1286
+ adapt.MaxDelta = str(simulation_setup.max_mag_delta_s)
1287
+ if is_ironpython:
1288
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Clear()
1289
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Add(adapt)
1290
+ else:
1291
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList = (
1292
+ convert_py_list_to_net_list([adapt])
1293
+ )
1294
+ elif simulation_setup.ac_settings.adaptive_type == 2:
1295
+ low_freq_adapt_data = self._pedb.simsetupdata.AdaptiveFrequencyData()
1296
+ low_freq_adapt_data.MaxDelta = str(simulation_setup.max_mag_delta_s)
1297
+ low_freq_adapt_data.MaxPasses = int(simulation_setup.max_num_passes)
1298
+ low_freq_adapt_data.AdaptiveFrequency = simulation_setup.ac_settings.adaptive_low_freq
1299
+ high_freq_adapt_data = self._pedb.simsetupdata.AdaptiveFrequencyData()
1300
+ high_freq_adapt_data.MaxDelta = str(simulation_setup.max_mag_delta_s)
1301
+ high_freq_adapt_data.MaxPasses = int(simulation_setup.max_num_passes)
1302
+ high_freq_adapt_data.AdaptiveFrequency = simulation_setup.ac_settings.adaptive_high_freq
1303
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptType = (
1304
+ self._pedb.simsetupdata.AdaptiveSettings.TAdaptType.kBroadband
1305
+ )
1306
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Clear()
1307
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Add(low_freq_adapt_data)
1308
+ simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Add(high_freq_adapt_data)
1309
+
1286
1310
  simsetup_info.SimulationSettings.CurveApproxSettings.ArcAngle = simulation_setup.arc_angle
1287
1311
  simsetup_info.SimulationSettings.CurveApproxSettings.UseArcToChordError = (
1288
1312
  simulation_setup.use_arc_to_chord_error
1289
1313
  )
1290
1314
  simsetup_info.SimulationSettings.CurveApproxSettings.ArcToChordError = simulation_setup.arc_to_chord_error
1291
- if is_ironpython:
1292
- simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Clear()
1293
- simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList.Add(adapt)
1294
- else:
1295
- simsetup_info.SimulationSettings.AdaptiveSettings.AdaptiveFrequencyDataList = convert_py_list_to_net_list(
1296
- [adapt]
1297
- )
1315
+
1298
1316
  simsetup_info.SimulationSettings.InitialMeshSettings.LambdaRefine = simulation_setup.do_lambda_refinement
1299
1317
  if simulation_setup.mesh_sizefactor > 0.0:
1300
1318
  simsetup_info.SimulationSettings.InitialMeshSettings.MeshSizefactor = simulation_setup.mesh_sizefactor