From 16a0170a9b529dfa7d13136bf54acbef25ff8432 Mon Sep 17 00:00:00 2001 From: Franz Date: Fri, 13 Oct 2023 10:59:46 +0200 Subject: [PATCH 01/78] Bump Pythonnet to allow usage with python3.12 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7b6b96ad7d4..d1de2c09d46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "cffi == 1.15.1;platform_system=='Linux' and python_version == '3.7'", "cffi == 1.16.0;platform_system=='Linux' and python_version > '3.7'", "pywin32 >= 303;platform_system=='Windows'", - "pythonnet == 3.0.2", + "pythonnet == 3.0.3", "rpyc==5.3.1", "psutil", "dotnetcore2 ==3.1.23;platform_system=='Linux'", From 86fc40123f1506329649554b6ce1dc817f4558fd Mon Sep 17 00:00:00 2001 From: Franz Date: Sun, 22 Oct 2023 14:14:59 +0200 Subject: [PATCH 02/78] Use ansys fork of pyaedt --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d1de2c09d46..6dd1d721071 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "cffi == 1.15.1;platform_system=='Linux' and python_version == '3.7'", "cffi == 1.16.0;platform_system=='Linux' and python_version > '3.7'", "pywin32 >= 303;platform_system=='Windows'", - "pythonnet == 3.0.3", + "ansys-pythonnet == 3.1.0", "rpyc==5.3.1", "psutil", "dotnetcore2 ==3.1.23;platform_system=='Linux'", From ad12662e1f07611330ff41d45d08fe5d3450d738 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:09:33 +0200 Subject: [PATCH 03/78] add check design type (#3746) Co-authored-by: Tiziana Bertoncelli <88496115+tizianrot@users.noreply.github.com> --- pyaedt/modeler/cad/Primitives2D.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyaedt/modeler/cad/Primitives2D.py b/pyaedt/modeler/cad/Primitives2D.py index aa1365bfb8e..9c6a05428d6 100644 --- a/pyaedt/modeler/cad/Primitives2D.py +++ b/pyaedt/modeler/cad/Primitives2D.py @@ -283,13 +283,13 @@ def create_region(self, pad_percent=300, is_percentage=True): >>> oEditor.CreateRegion """ if not isinstance(pad_percent, list): - if self._app.xy_plane: + if self._app.design_type == "2D Extractor" or self._app.xy_plane: pad_percent = [pad_percent, pad_percent, 0, pad_percent, pad_percent, 0] else: pad_percent = [pad_percent, 0, pad_percent, pad_percent, 0, pad_percent] else: - if self._app.xy_plane: + if self._app.design_type == "2D Extractor" or self._app.xy_plane: pad_percent = [pad_percent[0], pad_percent[1], 0, pad_percent[2], pad_percent[3], 0] else: From 0a3754983a48d234382f63bbdb153dd5a9411140 Mon Sep 17 00:00:00 2001 From: Franz Date: Mon, 23 Oct 2023 11:09:49 +0200 Subject: [PATCH 04/78] Bump to ansys-pythonnet 3.1.0rc3 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6dd1d721071..1bdb802b20a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "cffi == 1.15.1;platform_system=='Linux' and python_version == '3.7'", "cffi == 1.16.0;platform_system=='Linux' and python_version > '3.7'", "pywin32 >= 303;platform_system=='Windows'", - "ansys-pythonnet == 3.1.0", + "ansys-pythonnet>=3.1.0rc3", "rpyc==5.3.1", "psutil", "dotnetcore2 ==3.1.23;platform_system=='Linux'", From 54efbabdeabe546de506c809806cc3535421ee89 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:13:12 +0200 Subject: [PATCH 05/78] Add component name (#3781) --- pyaedt/modeler/circuits/PrimitivesMaxwellCircuit.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyaedt/modeler/circuits/PrimitivesMaxwellCircuit.py b/pyaedt/modeler/circuits/PrimitivesMaxwellCircuit.py index 155d5bc985d..637c97f2299 100644 --- a/pyaedt/modeler/circuits/PrimitivesMaxwellCircuit.py +++ b/pyaedt/modeler/circuits/PrimitivesMaxwellCircuit.py @@ -95,7 +95,7 @@ def create_resistor(self, compname=None, value=50, location=None, angle=0, use_i ) id.set_property("R", value) - + id.set_property("Name", compname) return id @pyaedt_function_handler() @@ -138,6 +138,7 @@ def create_inductor(self, compname=None, value=50, location=None, angle=0, use_i ) id.set_property("L", value) + id.set_property("Name", compname) return id @pyaedt_function_handler() @@ -177,6 +178,7 @@ def create_capacitor(self, compname=None, value=50, location=[], angle=0, use_in ) id.set_property("C", value) + id.set_property("Name", compname) return id @pyaedt_function_handler() @@ -215,6 +217,8 @@ def create_diode(self, compname=None, location=None, angle=0, use_instance_id_ne angle=angle, use_instance_id_netlist=use_instance_id_netlist, ) + + id.set_property("Name", compname) return id @pyaedt_function_handler() @@ -250,4 +254,5 @@ def create_winding(self, compname=None, location=[], angle=0, use_instance_id_ne angle=angle, use_instance_id_netlist=use_instance_id_netlist, ) + id.set_property("Name", compname) return id From 44d83dfe97df571d58afeb0b041936d631299416 Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Mon, 23 Oct 2023 12:15:44 +0200 Subject: [PATCH 06/78] Fix/issue 3260 (#3782) * fix export_summary, add filename and enhance variable naming * improve export_summary test * Deprecation warning --- _unittest_solvers/test_00_analyze.py | 16 +++++- pyaedt/icepak.py | 77 ++++++++++++++++++---------- 2 files changed, 64 insertions(+), 29 deletions(-) diff --git a/_unittest_solvers/test_00_analyze.py b/_unittest_solvers/test_00_analyze.py index 6d0543da15a..f35a5fb6334 100644 --- a/_unittest_solvers/test_00_analyze.py +++ b/_unittest_solvers/test_00_analyze.py @@ -1,3 +1,4 @@ +import csv import os import sys import time @@ -191,7 +192,20 @@ def test_03a_icepak_analyze_and_export_summary(self): ) self.icepak_app.analyze("SetupIPK", num_cores=6) self.icepak_app.save_project() - self.icepak_app.export_summary(self.icepak_app.working_directory) + + assert self.icepak_app.export_summary(self.icepak_app.working_directory, geometryType="Surface", variationlist=[], filename="A") # check usage of deprecated arguments + assert self.icepak_app.export_summary(self.icepak_app.working_directory, geometry_type="Surface", variation_list=[], filename="B") + assert self.icepak_app.export_summary(self.icepak_app.working_directory, geometry_type="Volume", type="Boundary", filename="C") + for file_name, entities in [("A_Temperature.csv", ["box", "Region"]), ("B_Temperature.csv", ["box", "Region"]), ("C_Temperature.csv", ["box"])]: + with open(os.path.join(self.icepak_app.working_directory, file_name), 'r', newline='') as csv_file: + csv_reader = csv.reader(csv_file) + for _ in range(4): + _ = next(csv_reader) + header = next(csv_reader) + entity_index = header.index("Entity") + csv_entities=[row[entity_index] for row in csv_reader] + assert all(e in csv_entities for e in entities) + box = [i.id for i in self.icepak_app.modeler["box"].faces] assert os.path.exists( self.icepak_app.eval_surface_quantity_from_field_summary(box, savedir=self.icepak_app.working_directory) diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index c7ccc225e07..e4ec698f3da 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -1771,14 +1771,16 @@ def eval_volume_quantity_from_field_summary( return filename def export_summary( - self, - output_dir=None, - solution_name=None, - type="Object", - geometryType="Volume", - quantity="Temperature", - variation="", - variationlist=None, + self, + output_dir=None, + solution_name=None, + type="Object", + geometry_type="Volume", + quantity="Temperature", + variation="", + variation_list=None, + filename="IPKsummaryReport", + **kwargs ): """Export a fields summary of all objects. @@ -1790,17 +1792,19 @@ def export_summary( is exported to the working directory. solution_name : str, optional Name of the solution. The default is ``None``, in which case the - the default name is used. + default solution is used. type : string, optional - The default is ``"Object"``. - geometryType : str, optional - Type of the geometry. The default is ``"Volume"``. + Entity type, ``"Boundary"`` or ``"Object"``. The default is ``"Object"``. + geometry_type : str, optional + Geometry type, ``"Volume"`` or ``"Surface"``. The default is ``"Volume"``. quantity : str, optional The default is ``"Temperature"``. variation : str, optional The default is ``""``. - variationlist : list, optional + variation_list : list, optional The default is ``None``. + filename : str, optional + The default is ``"IPKsummaryReport"``. Returns ------- @@ -1813,24 +1817,41 @@ def export_summary( >>> oModule.EditFieldsSummarySetting >>> oModule.ExportFieldsSummary """ - if variationlist == None: - variationlist = [] - - all_objs = list(self.modeler.oeditor.GetObjectsInGroup("Solids")) - all_objs_NonModeled = list(self.modeler.oeditor.GetObjectsInGroup("Non Model")) - all_objs_model = [item for item in all_objs if item not in all_objs_NonModeled] + if 'geometryType' in kwargs: + warnings.warn("The 'geometryType' argument is deprecated. Use 'geometry_type' instead.", + DeprecationWarning) + + if 'variationlist' in kwargs: + warnings.warn("The 'variationlist' argument is deprecated. Use 'variation_list' instead.", + DeprecationWarning) + + geometry_type = kwargs.get('geometryType', geometry_type) + variation_list = kwargs.get('variationlist', variation_list) + + if variation_list is None: + variation_list = [] + + if type == "Object": + all_objs = list(self.modeler.oeditor.GetObjectsInGroup("Solids")) + all_objs_non_modeled = list(self.modeler.oeditor.GetObjectsInGroup("Non Model")) + all_elements = [item for item in all_objs if item not in all_objs_non_modeled] + self.logger.info("Objects lists " + str(all_elements)) + elif type == "Boundary": + all_elements = [b.name for b in self.boundaries] + self.logger.info("Boundary lists " + str(all_elements)) + else: + self.logger.error("Entity type " + type + " not supported.") + return False arg = [] - self.logger.info("Objects lists " + str(all_objs_model)) - for el in all_objs_model: + for el in all_elements: try: self.osolution.EditFieldsSummarySetting( - ["Calculation:=", [type, geometryType, el, quantity, "", "Default"]] + ["Calculation:=", [type, geometry_type, el, quantity, "", "Default"]] ) arg.append("Calculation:=") - arg.append([type, geometryType, el, quantity, "", "Default"]) + arg.append([type, geometry_type, el, quantity, "", "Default"]) except Exception as e: - self.logger.error("Object " + el + " not added.") - self.logger.error(str(e)) + self.logger.warning("Object " + el + " not added.") if not output_dir: output_dir = self.working_directory self.osolution.EditFieldsSummarySetting(arg) @@ -1839,7 +1860,7 @@ def export_summary( if not solution_name: solution_name = self.nominal_sweep if variation: - for l in variationlist: + for l in variation_list: self.osolution.ExportFieldsSummary( [ "SolutionName:=", @@ -1847,7 +1868,7 @@ def export_summary( "DesignVariationKey:=", variation + "='" + str(l) + "'", "ExportFileName:=", - os.path.join(output_dir, "IPKsummaryReport" + quantity + "_" + str(l) + ".csv"), + os.path.join(output_dir, filename + "_" + quantity + "_" + str(l) + ".csv"), ] ) else: @@ -1858,7 +1879,7 @@ def export_summary( "DesignVariationKey:=", "", "ExportFileName:=", - os.path.join(output_dir, "IPKsummaryReport" + quantity + ".csv"), + os.path.join(output_dir, filename + "_" + quantity + ".csv"), ] ) return True From 99fb555b978b8701e7ebbaa5cd3e973265dc6909 Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Mon, 23 Oct 2023 13:58:58 +0200 Subject: [PATCH 07/78] Add docstring for MeshRegion class. (#3785) --- pyaedt/modules/MeshIcepak.py | 95 +++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/pyaedt/modules/MeshIcepak.py b/pyaedt/modules/MeshIcepak.py index 9773f3bbed6..fd6510e54e5 100644 --- a/pyaedt/modules/MeshIcepak.py +++ b/pyaedt/modules/MeshIcepak.py @@ -63,7 +63,100 @@ def omeshmodule(self): return self._app.omeshmodule class MeshRegion(object): - """Manages Icepak mesh region settings.""" + """ + Manages Icepak mesh region settings. + + Attributes: + name : str + Name of the mesh region. + UserSpecifiedSettings : bool + Whether to use manual settings. Default is ``False``. + ComputeGap : bool + Whether to enable minimum gap override. Default is ``True``. + Level : int + Automatic mesh detail level. Default is 3. + MaxElementSizeX : str + Maximum element size along the X-axis. Default is 1/20 of the region + X-dimension. + MaxElementSizeY : str + Maximum element size along the Y-axis. Default is 1/20 of the region + Y-dimension. + MaxElementSizeZ : str + Maximum element size along the Z-axis. Default is 1/20 of the region + Z-dimension. + MinElementsInGap : str + Minimum number of elements in gaps between adjacent objects. Default is "3". + MinElementsOnEdge : str + Minimum number of elements on each edge of each object. Default is "2". + MaxSizeRatio : str + Maximum ratio of the sizes of adjacent elements. Default is "2". + NoOGrids : bool + Whether objects will have O-grids around them. Default is ``False``. + EnableMLM : bool + Enable Multi-Level Mesh (MLM). Default is ``True``. + EnforceMLMType : str + Type of MLM to use, ``"2D"`` or ``"3D"``. Default is ``"3D"``. + MaxLevels : str + Maximum number of refinement level for Multi-Level Mesh. Default is ``"0"``. + BufferLayers : str + Number of buffer layers between refinement level. Default is ``"0"``. + UniformMeshParametersType : str + Whether to create a creates a uniform mesh with the same mesh size in all + coordinate directions (``"Average"``) or different spacing in each + direction (``"XYZ Max Sizes"``). Default is ``"Average"``. + StairStepMeshing : bool + Whether to disable vertices projection step used to obtain conformal mesh. + Default is ``False``. + DMLMType : str + If ``EnforceMLMType`` is ``"2D"``, in which 2D plane mesh refinement is + constrained. Available options are ``"2DMLM_None"``, ``"2DMLM_YZ"``, + ``"2DMLM_XZ"`` or ``"2DMLM_XY"``. Default is ``"2DMLM_None"`` + which means ``Auto``. + MinGapX : str + Minimum gap size along the X-axis. Default is ``"1"``. + MinGapY : str + Minimum gap size along the Y-axis. Default is ``"1"``. + MinGapZ : str + Minimum gap size along the Z-axis. Default is ``"1"``. + Objects : list + Objects to which meshing settings are applied. + SubModels : bool + SubModels to which meshing settings are applied. + Default is ``False``, so ``Objects`` attribute will be used. + Enable : bool + Enable mesh region. Default is ``True``. + ProximitySizeFunction : bool + Whether to use proximity-based size function. Default is ``True``. + CurvatureSizeFunction : bool + Whether to use curvature-based size function. Default is ``True``. + EnableTransition : bool + Whether to enable mesh transition. Default is ``False``. + OptimizePCBMesh : bool + Whether to optimize PCB mesh. Default is ``True``. + Enable2DCutCell : bool + Whether to enable 2D cut cell meshing. Default is ``False``. + EnforceCutCellMeshing : bool + Whether to enforce cut cell meshing. Default is ``False``. + Enforce2dot5DCutCell : bool + Whether to enforce 2.5D cut cell meshing. Default is ``False``. + SlackMinX : str + Slack along the negative X-axis. Default is ``"0mm"``. + SlackMinY : str + Slack along the negative Y-axis. Default is ``"0mm"``. + SlackMinZ : str + Slack along the negative Z-axis. Default is ``"0mm"``. + SlackMaxX : str + Slack along the positive X-axis. Default is ``"0mm"``. + SlackMaxY : str + Slack along the positive Y-axis. Default is ``"0mm"``. + SlackMaxZ : str + Slack along the positive Z-axis. Default is ``"0mm"``. + CoordCS : str + Coordinate system of the mesh region. Default is ``"Global"``. + virtual_region: bool + Whether to use virtual region. In order to use it, Icepak version must be 22R2 or + newer and the corresponding beta feature must be enabled. + """ def __init__(self, meshmodule, dimension, units, app, name=None): if name is None: From 03ec960a85fc623a1e40f8d41ba0513cbc98bddd Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Mon, 23 Oct 2023 14:58:13 +0200 Subject: [PATCH 08/78] clean create_reion method (#3783) --- pyaedt/modeler/cad/Primitives2D.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/pyaedt/modeler/cad/Primitives2D.py b/pyaedt/modeler/cad/Primitives2D.py index 9c6a05428d6..a3c39c618af 100644 --- a/pyaedt/modeler/cad/Primitives2D.py +++ b/pyaedt/modeler/cad/Primitives2D.py @@ -283,16 +283,10 @@ def create_region(self, pad_percent=300, is_percentage=True): >>> oEditor.CreateRegion """ if not isinstance(pad_percent, list): - if self._app.design_type == "2D Extractor" or self._app.xy_plane: + if self._app.design_type == "2D Extractor" or self._app.design_type == "Maxwell 2D": pad_percent = [pad_percent, pad_percent, 0, pad_percent, pad_percent, 0] - else: - pad_percent = [pad_percent, 0, pad_percent, pad_percent, 0, pad_percent] - else: - if self._app.design_type == "2D Extractor" or self._app.xy_plane: + if self._app.design_type == "2D Extractor" or self._app.design_type == "Maxwell 2D": pad_percent = [pad_percent[0], pad_percent[1], 0, pad_percent[2], pad_percent[3], 0] - else: - pad_percent = [pad_percent[0], 0, pad_percent[1], pad_percent[2], 0, pad_percent[3]] - return Primitives.create_region(self, pad_percent, is_percentage) From 3f4e9a51423c8a0744efa95ca50f7fa7c8bfaef1 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:10:55 +0200 Subject: [PATCH 09/78] Improve hfss example (#3786) * improve HFSS Spiral example * improve hfss example --- examples/02-HFSS/HFSS_Spiral.py | 44 ++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/examples/02-HFSS/HFSS_Spiral.py b/examples/02-HFSS/HFSS_Spiral.py index beda948c8cc..5b5dc42099c 100644 --- a/examples/02-HFSS/HFSS_Spiral.py +++ b/examples/02-HFSS/HFSS_Spiral.py @@ -45,8 +45,7 @@ Np = 8 Nr = 10 gap = 3 -Tsub = 6 - +hfss["Tsub"] = "6" + hfss.modeler.model_units ############################################################# # Standardize polyline @@ -84,7 +83,9 @@ def create_line(pts): x0, y0, z0 = ind.points[0] x1, y1, z1 = ind.points[-1] create_line([(x0 - width / 2, y0, -gap), (abs(x1) + 5, y0, -gap)]) -p.create_box((x0 - width / 2, y0 - width / 2, -gap - thickness / 2), (width, width, gap + thickness), matname="copper") +p.create_box([x0 - width / 2, y0 - width / 2, -gap - thickness / 2], + [width, width, gap + thickness], + matname="copper") ################################################################ # Create port 1 @@ -92,8 +93,8 @@ def create_line(pts): # Create port 1. p.create_rectangle(csPlane=pyaedt.constants.PLANE.YZ, - position=(abs(x1) + 5, y0 - width / 2, -gap - thickness / 2), - dimension_list=(width, -Tsub + gap), + position=[abs(x1) + 5, y0 - width / 2, -gap - thickness / 2], + dimension_list=[width, "Tsub+{}{}".format(gap, hfss.modeler.model_units)], name="port1" ) hfss.lumped_port(signal="port1", integration_line=pyaedt.constants.AXIS.Z) @@ -104,7 +105,9 @@ def create_line(pts): # Create port 2. create_line([(x1 + width / 2, y1, 0), (x1 - 5, y1, 0)]) -p.create_rectangle(pyaedt.constants.PLANE.YZ, (x1 - 5, y1 - width / 2, -thickness / 2), (width, -Tsub), name="port2") +p.create_rectangle(pyaedt.constants.PLANE.YZ, [x1 - 5, y1 - width / 2, -thickness / 2], + [width, "-Tsub"], + name="port2") hfss.lumped_port(signal="port2", integration_line=pyaedt.constants.AXIS.Z) ################################################################ @@ -112,9 +115,13 @@ def create_line(pts): # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Create the silicon substrate and the ground plane. -p.create_box([x1 - 20, x1 - 20, -Tsub - thickness / 2], [-2 * x1 + 40, -2 * x1 + 40, Tsub], matname="silicon") +p.create_box([x1 - 20, x1 - 20, "-Tsub-{}{}/2".format(thickness, hfss.modeler.model_units)], + [-2 * x1 + 40, -2 * x1 + 40, "Tsub"], + matname="silicon") -p.create_box([x1 - 20, x1 - 20, -Tsub - thickness / 2], [-2 * x1 + 40, -2 * x1 + 40, -0.1], matname="PEC") +p.create_box([x1 - 20, x1 - 20, "-Tsub-{}{}/2".format(thickness, hfss.modeler.model_units)], + [-2 * x1 + 40, -2 * x1 + 40, -0.1], + matname="PEC") ################################################################ # Assign airbox and radiation @@ -122,7 +129,10 @@ def create_line(pts): # Assign the airbox and the radiation. box = p.create_box( - [x1 - 20, x1 - 20, -Tsub - thickness / 2 - 0.1], [-2 * x1 + 40, -2 * x1 + 40, 100], name="airbox", matname="air" + [x1 - 20, x1 - 20, "-Tsub-{}{}/2 - 0.1{}".format(thickness, hfss.modeler.model_units, hfss.modeler.model_units)], + [-2 * x1 + 40, -2 * x1 + 40, 100], + name="airbox", + matname="air" ) hfss.assign_radiation_boundary_to_objects("airbox") @@ -163,13 +173,25 @@ def create_line(pts): L_formula = "1e9*im(1/Y(1,1))/(2*pi*freq)" Q_formula = "im(Y(1,1))/re(Y(1,1))" +################################################################ +# Create output variable +# ~~~~~~~~~~~~~~~~~~~~~~ +# Create output variable +hfss.create_output_variable("L", L_formula, solution="setup1 : LastAdaptive") + ################################################################ # Plot calculated values in Matplotlib # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Plot the calculated values in Matplotlib. -x = hfss.post.get_solution_data([L_formula, Q_formula]) -x.plot(curves=[L_formula, Q_formula], math_formula="re", xlabel="Freq", ylabel="L and Q") +data = hfss.post.get_solution_data([L_formula, Q_formula]) +data.plot(curves=[L_formula, Q_formula], math_formula="re", xlabel="Freq", ylabel="L and Q") + +################################################################ +# Export results to csv file +# ~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Export results to csv file +data.export_data_to_csv(os.path.join(hfss.toolkit_directory,"output.csv")) ################################################################ # Save project and close AEDT From d7f75fd49e654cbbd4fd176a9baa2848fc9c8310 Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:47:34 +0200 Subject: [PATCH 10/78] Add radiation option to create_pcb_from_3dlayout (#3788) --- pyaedt/icepak.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index e4ec698f3da..474ba02677e 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -2278,6 +2278,7 @@ def create_pcb_from_3dlayout( custom_x_resolution=None, custom_y_resolution=None, power_in=0, + rad="Nothing", **kwargs # fmt: skip ): """Create a PCB component in Icepak that is linked to an HFSS 3DLayout object linking only to the geometry file. @@ -2307,7 +2308,16 @@ def create_pcb_from_3dlayout( custom_y_resolution : int, optional The default is ``None``. power_in : float, optional - Power in in Watt. + Power in Watt. + rad : str, optional + Radiating faces. Options are: + + * ``"Nothing"`` + * ``"Low"`` + * ``"High"`` + * ``"Both"`` + + The default is ``"Nothing"``. Returns ------- From 9cebd6c05f136d3762b66bbbb812759e1602169b Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Mon, 23 Oct 2023 17:44:27 +0200 Subject: [PATCH 11/78] solder ball height bug fix (#3776) * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- _unittest/test_00_EDB.py | 6 +- pyaedt/edb_core/components.py | 100 +++++++++++++++++++--------------- 2 files changed, 62 insertions(+), 44 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 66fd114c5ad..83ee20bb97d 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -953,7 +953,11 @@ def test_075_flatten_planes(self): assert self.edbapp.modeler.unite_polygons_on_layer("1_Top") def test_076_create_solder_ball_on_component(self): - assert self.edbapp.components.set_solder_ball("U1") + assert self.edbapp.components.set_solder_ball("U1", shape="Spheroid") + assert self.edbapp.components.set_solder_ball("U6", sball_height=None) + assert self.edbapp.components.set_solder_ball( + "U6", sball_height="100um", auto_reference_size=False, chip_orientation="chip_up" + ) def test_077_add_void(self): plane_shape = self.edbapp.modeler.Shape("rectangle", pointA=["-5mm", "-5mm"], pointB=["5mm", "5mm"]) diff --git a/pyaedt/edb_core/components.py b/pyaedt/edb_core/components.py index d5d21b2f7ef..2bb82399012 100644 --- a/pyaedt/edb_core/components.py +++ b/pyaedt/edb_core/components.py @@ -1775,11 +1775,15 @@ def disable_rlc_component(self, component_name): def set_solder_ball( self, component="", - sball_diam="100um", - sball_height="150um", + sball_diam=None, + sball_height=None, shape="Cylinder", sball_mid_diam=None, chip_orientation="chip_down", + auto_reference_size=True, + reference_size_x=0, + reference_size_y=0, + reference_height=0, ): """Set cylindrical solder balls on a given component. @@ -1799,7 +1803,14 @@ def set_solder_ball( chip_orientation : str, optional Give the chip orientation, ``"chip_down"`` or ``"chip_up"``. Default is ``"chip_down"``. Only applicable on IC model. - + auto_reference_size : bool, optional + Whether to automatically set reference size. + reference_size_x : int, str, float, optional + X size of the reference. Applicable when auto_reference_size is False. + reference_size_y : int, str, float, optional + Y size of the reference. Applicable when auto_reference_size is False. + reference_height : int, str, float, optional + Height of the reference. Applicable when auto_reference_size is False. Returns ------- bool @@ -1816,52 +1827,55 @@ def set_solder_ball( if not isinstance(component, self._pedb.edb_api.cell.hierarchy.component): edb_cmp = self.get_component_by_name(component) cmp = self.instances[component] - else: + else: # pragma: no cover edb_cmp = component cmp = self.instances[edb_cmp.GetName()] - if edb_cmp: - cmp_type = edb_cmp.GetComponentType() - if not sball_diam: - pin1 = list(cmp.pins.values())[0].pin - pin_layers = pin1.GetPadstackDef().GetData().GetLayerNames() - pad_params = self._padstack.get_pad_parameters(pin=pin1, layername=pin_layers[0], pad_type=0) - _sb_diam = min([self._get_edb_value(val).ToDouble() for val in pad_params[1]]) - sball_diam = _sb_diam - sball_height = round(self._edb.utility.Value(sball_diam).ToDouble(), 9) / 2 - if not sball_mid_diam: - sball_mid_diam = sball_diam - - if shape == "Cylinder": - sball_shape = self._edb.definition.SolderballShape.Cylinder - else: - sball_shape = self._edb.definition.SolderballShape.Spheroid - - cmp_property = edb_cmp.GetComponentProperty().Clone() - if cmp_type == self._edb.definition.ComponentType.IC: - ic_die_prop = cmp_property.GetDieProperty().Clone() - ic_die_prop.SetType(self._edb.definition.DieType.FlipChip) - if chip_orientation.lower() == "chip_down": - ic_die_prop.SetOrientation(self._edb.definition.DieOrientation.ChipDown) - if chip_orientation.lower() == "chip_up": - ic_die_prop.SetOrientation(self._edb.definition.DieOrientation.ChipUp) - else: - ic_die_prop.SetOrientation(self._edb.definition.DieOrientation.ChipDown) - cmp_property.SetDieProperty(ic_die_prop) - solder_ball_prop = cmp_property.GetSolderBallProperty().Clone() - solder_ball_prop.SetDiameter(self._get_edb_value(sball_diam), self._get_edb_value(sball_mid_diam)) - solder_ball_prop.SetHeight(self._get_edb_value(sball_height)) + cmp_type = edb_cmp.GetComponentType() + if not sball_diam: + pin1 = list(cmp.pins.values())[0].pin + pin_layers = pin1.GetPadstackDef().GetData().GetLayerNames() + pad_params = self._padstack.get_pad_parameters(pin=pin1, layername=pin_layers[0], pad_type=0) + _sb_diam = min([self._get_edb_value(val).ToDouble() for val in pad_params[1]]) + sball_diam = _sb_diam + if sball_height: + sball_height = round(self._edb.utility.Value(sball_height).ToDouble(), 9) + else: + sball_height = round(self._edb.utility.Value(sball_diam).ToDouble(), 9) / 2 - solder_ball_prop.SetShape(sball_shape) - cmp_property.SetSolderBallProperty(solder_ball_prop) + if not sball_mid_diam: + sball_mid_diam = sball_diam - port_prop = cmp_property.GetPortProperty().Clone() - port_prop.SetReferenceSizeAuto(True) - cmp_property.SetPortProperty(port_prop) - edb_cmp.SetComponentProperty(cmp_property) - return True + if shape == "Cylinder": + sball_shape = self._edb.definition.SolderballShape.Cylinder else: - return False + sball_shape = self._edb.definition.SolderballShape.Spheroid + + cmp_property = edb_cmp.GetComponentProperty().Clone() + if cmp_type == self._edb.definition.ComponentType.IC: + ic_die_prop = cmp_property.GetDieProperty().Clone() + ic_die_prop.SetType(self._edb.definition.DieType.FlipChip) + if chip_orientation.lower() == "chip_up": + ic_die_prop.SetOrientation(self._edb.definition.DieOrientation.ChipUp) + else: + ic_die_prop.SetOrientation(self._edb.definition.DieOrientation.ChipDown) + cmp_property.SetDieProperty(ic_die_prop) + + solder_ball_prop = cmp_property.GetSolderBallProperty().Clone() + solder_ball_prop.SetDiameter(self._get_edb_value(sball_diam), self._get_edb_value(sball_mid_diam)) + solder_ball_prop.SetHeight(self._get_edb_value(sball_height)) + + solder_ball_prop.SetShape(sball_shape) + cmp_property.SetSolderBallProperty(solder_ball_prop) + + port_prop = cmp_property.GetPortProperty().Clone() + port_prop.SetReferenceSizeAuto(auto_reference_size) + if not auto_reference_size: + port_prop.SetReferenceSize(self._pedb.edb_value(reference_size_x), self._pedb.edb_value(reference_size_y)) + port_prop.SetReferenceHeight(self._pedb.edb_value(reference_height)) + cmp_property.SetPortProperty(port_prop) + edb_cmp.SetComponentProperty(cmp_property) + return True @pyaedt_function_handler() def set_component_rlc( From d20f7bc712213743c191c206d4b989fb13f814e6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 06:37:58 +0000 Subject: [PATCH 12/78] [pre-commit.ci] pre-commit autoupdate (#3789) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/psf/black: 23.9.1 → 23.10.1](https://github.com/psf/black/compare/23.9.1...23.10.1) * Update .pre-commit-config.yaml Update blacken-docs * Update .pre-commit-config.yaml --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 36e15bcaf00..b7e229b5eeb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ exclude: | repos: - repo: https://github.com/psf/black - rev: 23.9.1 # IF VERSION CHANGES --> MODIFY "blacken-docs" MANUALLY AS WELL!! + rev: 23.10.1 # IF VERSION CHANGES --> MODIFY "blacken-docs" MANUALLY AS WELL!! hooks: - id: black args: @@ -61,7 +61,7 @@ repos: rev: 1.16.0 hooks: - id: blacken-docs - additional_dependencies: [black==23.9.1] + additional_dependencies: [black==23.10.1] # - repo: https://github.com/numpy/numpydoc From 72c2ddb2e6dde43a65bef00c826760290e3201e4 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 24 Oct 2023 08:40:55 +0200 Subject: [PATCH 13/78] Fix/issue 3689 (#3787) * Refresh IDs to get port information * Fix vale * Fix vale * Fix vale * Fix vale * Fix vale * Update doc/source/Getting_started/Troubleshooting.rst Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update doc/source/Getting_started/Troubleshooting.rst Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --------- Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --- doc/source/Getting_started/Quickcode.rst | 2 +- .../Getting_started/Troubleshooting.rst | 8 ++++---- doc/styles/Vocab/ANSYS/accept.txt | 20 ++++++++++++++++++- pyaedt/modeler/circuits/PrimitivesCircuit.py | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/doc/source/Getting_started/Quickcode.rst b/doc/source/Getting_started/Quickcode.rst index 7c484435191..1475ae608b4 100644 --- a/doc/source/Getting_started/Quickcode.rst +++ b/doc/source/Getting_started/Quickcode.rst @@ -1,4 +1,4 @@ -Quick Code +Quick code ========== Documentation and issues diff --git a/doc/source/Getting_started/Troubleshooting.rst b/doc/source/Getting_started/Troubleshooting.rst index c1973f45c27..e50ad5b5598 100644 --- a/doc/source/Getting_started/Troubleshooting.rst +++ b/doc/source/Getting_started/Troubleshooting.rst @@ -59,10 +59,10 @@ Run this script directly from AEDT and pass the wheelhouse file name as an argum Run PyAEDT ~~~~~~~~~~ -COM vs gRPC ------------ -Prior to the 2022R2 release CPython automation in AEDT used -`COM `_ which +COM and gRPC +------------ +Prior to the 2022 R2 release, CPython automation in AEDT used +`COM `_ , which requires all interfaces to be registered in the Windows Registry. Communication between Python and the AEDT API were translated through an intermediate layer using `pywin32 `_ and `PythonNET `_. diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index 16e7708252b..05c0ccba44d 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -2,6 +2,9 @@ ANSYS Ansys ansys AEDB +API +AEDT +AEDT API 2D Extractor airbox airgap @@ -11,6 +14,11 @@ busbars Bz circuit Circuit +com +COM +COM interface +Components +components CPython DesignXploration docstring @@ -18,15 +26,21 @@ Docstrings docstrings doppler EDB +EDB API efields EMIT getters globals +gRPC +GRPC +HFSS HFSS 3D Layout Huray Icepak IronPython limitilines +Layout +layout matplotlib Maxwell 2D Maxwell 3D @@ -51,11 +65,13 @@ Postprocessing PMs pyaedt PyAEDT +PyAnsys PyPI Python pyvista Q2D Extractor Q3D Extractor +Q3D RC RF RMXprt @@ -83,4 +99,6 @@ Slurm Python.NET Toolkits toolkits - +3D modeler +2D modeler +Stackup 3D diff --git a/pyaedt/modeler/circuits/PrimitivesCircuit.py b/pyaedt/modeler/circuits/PrimitivesCircuit.py index 99efa8e5d41..30248420644 100644 --- a/pyaedt/modeler/circuits/PrimitivesCircuit.py +++ b/pyaedt/modeler/circuits/PrimitivesCircuit.py @@ -230,7 +230,7 @@ def add_pin_iports(self, name, id_num): comp_id = "CompInst@" + name + ";" + str(id_num) + ";395" arg1 = ["Name:Selections", "Selections:=", [comp_id]] self.oeditor.AddPinIPorts(arg1) - + self.refresh_all_ids() return True @pyaedt_function_handler() From 78eabf9908afdddf8bf3d711b646105fdd27e1bc Mon Sep 17 00:00:00 2001 From: Schwalbe262 <41924534+Schwalbe262@users.noreply.github.com> Date: Tue, 24 Oct 2023 23:36:56 +0900 Subject: [PATCH 14/78] ADD Maxwell assign radiation (#3765) * ADD Maxwell assign radiation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add UT and docstring Move to Maxwell because it is working in 2D and 3D * Update _unittest/test_28_Maxwell3D.py * Fix UT --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Samuel Lopez Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- _unittest/test_28_Maxwell3D.py | 16 ++++++++++ pyaedt/maxwell.py | 55 ++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/_unittest/test_28_Maxwell3D.py b/_unittest/test_28_Maxwell3D.py index cba49759cfc..03ba51bbbb6 100644 --- a/_unittest/test_28_Maxwell3D.py +++ b/_unittest/test_28_Maxwell3D.py @@ -916,3 +916,19 @@ def test_56_zero_tangential_h_field(self, add_app): assert m3d.assign_zero_tangential_h_field( box.top_face_z, ) + + def test_57_radiation(self): + self.aedtapp.insert_design("Radiation") + self.aedtapp.solution_type = SOLUTIONS.Maxwell3d.EddyCurrent + rect = self.aedtapp.modeler.create_rectangle(0, [0, 0, 0], [5, 5], matname="aluminum") + rect2 = self.aedtapp.modeler.create_rectangle(0, [15, 20, 0], [5, 5], matname="aluminum") + box = self.aedtapp.modeler.create_box([15, 20, 0], [5, 5, 5], matname="aluminum") + box2 = self.aedtapp.modeler.create_box([150, 20, 0], [50, 5, 10], matname="aluminum") + bound = self.aedtapp.assign_radiation([rect, rect2, box, box2.faces[0]]) + assert bound + bound2 = self.aedtapp.assign_radiation([rect, rect2, box, box2.faces[0]], "my_rad") + assert bound2 + bound3 = self.aedtapp.assign_radiation([rect, rect2, box, box2.faces[0]], "my_rad") + assert bound2.name != bound3.name + self.aedtapp.solution_type = SOLUTIONS.Maxwell3d.Transient + assert not self.aedtapp.assign_radiation([rect, rect2, box, box2.faces[0]]) diff --git a/pyaedt/maxwell.py b/pyaedt/maxwell.py index 67acc669ebe..499cae7b0bc 100644 --- a/pyaedt/maxwell.py +++ b/pyaedt/maxwell.py @@ -1624,6 +1624,61 @@ def assign_current_density( self.logger.error("Current density can only be applied to Eddy current or magnetostatic solution types.") return False + @pyaedt_function_handler() + def assign_radiation(self, input_object, radiation_name=None): + """Assign radiation boundary to one or more objects. + + Radiation assignment can be calculated based upon the solver type. + Available solution type is: ``Eddy Current``. + + Parameters + ---------- + input_object : str, list + One or more objects to assign the radiation to. + radiation_name : str, optional + Name of the force. The default is ``None``, in which case the default + name is used. + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Radiation objects. If the method fails to execute it returns ``False``. + + References + ---------- + + >>> oModule.Radiation + + Examples + -------- + + Assign radiation boundary to one box and one face: + + >>> box1 = m3d.modeler.create_box([0, 0, 0], [2, 10, 10]) + >>> box2 = m3d.modeler.create_box([10, 0, 0], [2, 10, 10]) + >>> m3d.assign_radiation([box1, box2.faces[0]], force_name="radiation_boundary") + """ + + if self.solution_type in ["EddyCurrent"]: + if not radiation_name: + radiation_name = generate_unique_name("Radiation") + elif radiation_name in self.modeler.get_boundaries_name(): + radiation_name = generate_unique_name(radiation_name) + + listobj = self.modeler.convert_to_selections(input_object, True) + props = {"Objects": [], "Faces": []} + for sel in listobj: + if isinstance(sel, str): + props["Objects"].append(sel) + elif isinstance(sel, int): + props["Faces"].append(sel) + bound = BoundaryObject(self, radiation_name, props, "Radiation") + if bound.create(): + self._boundaries[bound.name] = bound + return bound + self.logger.error("Excitation applicable only to Eddy current.") + return False + @pyaedt_function_handler() def enable_harmonic_force( self, From ecf3eba458f9c1a84deb9c9a0aefb5ea0c550ae3 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Wed, 25 Oct 2023 11:24:15 +0200 Subject: [PATCH 15/78] improve nominal variation (#3794) * improve nominal variation * add UT --- _unittest/test_01_Design.py | 3 +++ pyaedt/application/Analysis.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/_unittest/test_01_Design.py b/_unittest/test_01_Design.py index de6f9c5793d..1dc5fc7c31f 100644 --- a/_unittest/test_01_Design.py +++ b/_unittest/test_01_Design.py @@ -129,6 +129,9 @@ def test_13_designs(self): def test_14_get_nominal_variation(self): assert self.aedtapp.get_nominal_variation() != [] or self.aedtapp.get_nominal_variation() is not None + assert isinstance(self.aedtapp.get_nominal_variation(), list) + assert isinstance(self.aedtapp.get_nominal_variation(with_values=True), list) + assert self.aedtapp.get_nominal_variation(with_values=True) != [] def test_15a_duplicate_design(self): self.aedtapp.duplicate_design("non_valid1", False) diff --git a/pyaedt/application/Analysis.py b/pyaedt/application/Analysis.py index 23d37b3ebf0..7c490d965fa 100644 --- a/pyaedt/application/Analysis.py +++ b/pyaedt/application/Analysis.py @@ -1091,15 +1091,24 @@ def get_setups(self): return list(setups) @pyaedt_function_handler() - def get_nominal_variation(self): + def get_nominal_variation(self, with_values=False): """Retrieve the nominal variation. + Parameters + ---------- + with_values : bool + Whether to return nominal variation or nominal variation with values. + The default is ``False``. + Returns ------- list of str List of nominal variations. """ - return self.available_variations.nominal + if not with_values: + return self.available_variations.nominal + else: + return self.available_variations.nominal_w_values @pyaedt_function_handler() def get_sweeps(self, name): From 723c2209a5bcaf127817e67879e923cfc179a956 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:51:20 +0200 Subject: [PATCH 16/78] fix object cs duplicate (#3791) * fix object cs duplicate * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- pyaedt/modeler/cad/Modeler.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/pyaedt/modeler/cad/Modeler.py b/pyaedt/modeler/cad/Modeler.py index ab4bfaa1511..44b50ac0ed4 100644 --- a/pyaedt/modeler/cad/Modeler.py +++ b/pyaedt/modeler/cad/Modeler.py @@ -2829,9 +2829,7 @@ def duplicate_coordinate_system_to_global(self, coordinate_system): if name in cs_names: name = cs.name + generate_unique_name("_RefToGlobal") face_cs = FaceCoordinateSystem(self, props=cs.props, name=name, face_id=cs.props["FaceID"]) - obj = [ - obj for obj in self._app.modeler.object_list for face in obj.faces if face.id == face_cs.props["FaceID"] - ][0] + obj = [obj for obj in self.object_list for face in obj.faces if face.id == face_cs.props["FaceID"]][0] face = [face for face in obj.faces if face.id == face_cs.props["FaceID"]][0] if face_cs.props["Origin"]["PositionType"] == "FaceCenter": origin = face @@ -2868,16 +2866,24 @@ def duplicate_coordinate_system_to_global(self, coordinate_system): ) if result: return face_cs - elif isinstance(coordinate_system, ObjectCoordinateSystem): + elif isinstance(cs, ObjectCoordinateSystem): name = cs.name + "_RefToGlobal" if name in cs_names: name = cs.name + generate_unique_name("_RefToGlobal") obj_cs = ObjectCoordinateSystem(self, props=cs.props, name=name, entity_id=cs.entity_id) - obj = self.objects[cs.entity_id] + objs_by_name_list = [obj for obj in self.object_list if obj.part_coordinate_system == cs.name] + objs_by_id_list = [o for o in self.object_list if o.id == cs.entity_id] + if objs_by_name_list: + obj = objs_by_name_list[0] + elif objs_by_id_list: + obj = [o for o in self.object_list if o.id == cs.entity_id][0] if cs.props["Origin"]["PositionType"] != "AbsolutePosition": if cs.props["Origin"]["PositionType"] == "FaceCenter": origin = [f for f in obj.faces if f.id == cs.props["Origin"]["EntityID"]][0] - elif cs.props["Origin"]["PositionType"] == "EdgeCenter": + elif ( + cs.props["Origin"]["PositionType"] == "EdgeCenter" + or cs.props["Origin"]["PositionType"] == "ArcCenter" + ): origin = [e for e in obj.edges if e.id == cs.props["Origin"]["EntityID"]][0] elif cs.props["Origin"]["PositionType"] == "OnVertex": origin = [v for v in obj.vertices if v.id == cs.props["Origin"]["EntityID"]][0] @@ -2890,7 +2896,10 @@ def duplicate_coordinate_system_to_global(self, coordinate_system): if "xAxisPos" in cs.props: if cs.props["xAxisPos"]["PositionType"] == "FaceCenter": x_axis = [f for f in obj.faces if f.id == cs.props["xAxisPos"]["EntityID"]][0] - elif cs.props["xAxisPos"]["PositionType"] == "EdgeCenter": + elif ( + cs.props["xAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["xAxisPos"]["PositionType"] == "ArcCenter" + ): x_axis = [e for e in obj.edges if e.id == cs.props["xAxisPos"]["EntityID"]][0] elif cs.props["xAxisPos"]["PositionType"] == "OnVertex": x_axis = [v for v in obj.vertices if v.id == cs.props["xAxisPos"]["EntityID"]][0] @@ -2903,7 +2912,10 @@ def duplicate_coordinate_system_to_global(self, coordinate_system): if "yAxisPos" in cs.props: if cs.props["yAxisPos"]["PositionType"] == "FaceCenter": y_axis = [f for f in obj.faces if f.id == cs.props["yAxisPos"]["EntityID"]][0] - elif cs.props["yAxisPos"]["PositionType"] == "EdgeCenter": + elif ( + cs.props["yAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["yAxisPos"]["PositionType"] == "ArcCenter" + ): y_axis = [e for e in obj.edges if e.id == cs.props["yAxisPos"]["EntityID"]][0] elif cs.props["yAxisPos"]["PositionType"] == "OnVertex": y_axis = [v for v in obj.vertices if v.id == cs.props["yAxisPos"]["EntityID"]][0] From 93b685915e2620735b89a8aa35a25726db209191 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:42:46 +0200 Subject: [PATCH 17/78] Clear message when GetFaceCenter fails (#3796) --- pyaedt/aedt_logger.py | 3 +++ pyaedt/modeler/cad/elements3d.py | 1 + 2 files changed, 4 insertions(+) diff --git a/pyaedt/aedt_logger.py b/pyaedt/aedt_logger.py index a3a307eb1f8..3a09e5d5694 100644 --- a/pyaedt/aedt_logger.py +++ b/pyaedt/aedt_logger.py @@ -517,6 +517,9 @@ def clear_messages(self, proj_name=None, des_name=None, level=2): >>> hfss.clear_messages(level=3) + Clear all messages. + + >>> hfss.clear_messages(proj_name="", des_name="", level=3) """ if self._log_on_desktop: if proj_name is None: diff --git a/pyaedt/modeler/cad/elements3d.py b/pyaedt/modeler/cad/elements3d.py index 4b3f549022e..07beef5235a 100644 --- a/pyaedt/modeler/cad/elements3d.py +++ b/pyaedt/modeler/cad/elements3d.py @@ -598,6 +598,7 @@ def center(self): try: return [float(i) for i in self.oeditor.GetFaceCenter(self.id)] except: # pragma: no cover + self.logger.clear_messages() vtx = self.vertices[:] if len(vtx) > 1: return GeometryOperators.get_polygon_centroid([pos.position for pos in vtx]) From 96f58b362eb393761c22b11f786d5e3baceb5a50 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Wed, 25 Oct 2023 14:11:54 +0200 Subject: [PATCH 18/78] fix wrong default parameter values in SIWAVE setup (#3793) * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- _unittest/test_00_EDB.py | 16 ++--- pyaedt/edb.py | 2 + .../edb_data/siwave_simulation_setup_data.py | 65 ++++++++++++++++--- 3 files changed, 65 insertions(+), 18 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 83ee20bb97d..716acbb0ca1 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -2277,6 +2277,12 @@ def test_131_siwave_ac_simulation_setup(self): assert sweep.save_rad_fields_only assert sweep.use_q3d_for_dc + setup1.pi_slider_postion = 0 + setup1.pi_slider_postion = 1 + setup1.pi_slider_postion = 2 + setup1.si_slider_postion = 0 + setup1.si_slider_postion = 1 + setup1.si_slider_postion = 2 assert setup1.automatic_mesh assert setup1.enabled assert setup1.dc_settings @@ -2289,16 +2295,14 @@ def test_131_siwave_ac_simulation_setup(self): assert setup1.include_trace_coupling assert not setup1.include_vi_sources assert setup1.infinite_ground_location == "0" - assert setup1.max_coupled_lines == 12 + assert setup1.max_coupled_lines == 40 assert setup1.mesh_frequency == "4GHz" assert setup1.min_pad_area_to_mesh == "1mm2" assert setup1.min_plane_area_to_mesh == "6.25e-6mm2" assert setup1.min_void_area == "2mm2" assert setup1.name == "AC1" assert setup1.perform_erc - assert setup1.pi_slider_postion == 1 - assert setup1.si_slider_postion == 1 - assert not setup1.return_current_distribution + assert setup1.return_current_distribution assert setup1.snap_length_threshold == "2.5um" assert setup1.use_si_settings assert setup1.use_custom_settings @@ -2323,8 +2327,6 @@ def test_131_siwave_ac_simulation_setup(self): setup1.min_void_area = "1mm2" setup1.name = "AC2" setup1.perform_erc = False - setup1.pi_slider_postion = 0 - setup1.si_slider_postion = 2 setup1.return_current_distribution = True setup1.snap_length_threshold = "3.5um" setup1.use_si_settings = False @@ -2349,8 +2351,6 @@ def test_131_siwave_ac_simulation_setup(self): assert setup1.min_void_area == "1mm2" assert setup1.name == "AC2" assert not setup1.perform_erc - assert setup1.pi_slider_postion == 0 - assert setup1.si_slider_postion == 2 assert setup1.return_current_distribution assert setup1.snap_length_threshold == "3.5um" assert not setup1.use_si_settings diff --git a/pyaedt/edb.py b/pyaedt/edb.py index ee9a5b13c4b..667b2ea3104 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -3367,6 +3367,8 @@ def create_siwave_syz_setup(self, name=None): if name in self.setups: return False setup = SiwaveSYZSimulationSetup(self, name) + setup.si_slider_postion = 1 + setup.pi_slider_postion = 1 self._setups[name] = setup return setup diff --git a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py index bcfb82a3fd3..71e10479425 100644 --- a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py @@ -756,29 +756,74 @@ def enabled(self): """Whether the setup is enabled.""" return self._edb_sim_setup_info.SimulationSettings.Enabled - @property - def pi_slider_postion(self): - """PI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.PISliderPos - - @property - def si_slider_postion(self): - """SI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.SISliderPos - @enabled.setter def enabled(self, value): self._edb_sim_setup_info.SimulationSettings.Enabled = value self._update_setup() + @property + def pi_slider_postion(self): + """PI solider position. Values are from ``1`` to ``3``.""" + return self._edb_sim_setup_info.SimulationSettings.PISliderPos + @pi_slider_postion.setter def pi_slider_postion(self, value): + if value == 0: + self.include_coplane_coupling = False + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = False + self.include_fringe_coupling = False + self.include_trace_coupling = False + self.max_coupled_lines = 12 + elif value == 1: + self.include_coplane_coupling = False + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = False + self.include_fringe_coupling = True + self.include_trace_coupling = False + self.max_coupled_lines = 12 + else: + self.include_coplane_coupling = True + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = True + self.include_fringe_coupling = True + self.include_trace_coupling = True + self.max_coupled_lines = 40 self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False self._edb_sim_setup_info.SimulationSettings.PISliderPos = value self._update_setup() + @property + def si_slider_postion(self): + """SI solider position. Values are from ``1`` to ``3``.""" + return self._edb_sim_setup_info.SimulationSettings.SISliderPos + @si_slider_postion.setter def si_slider_postion(self, value): + if value == 0: + self.include_coplane_coupling = False + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = False + self.include_fringe_coupling = False + self.include_trace_coupling = True + self.max_coupled_lines = 12 + self.return_current_distribution = False + elif value == 1: + self.include_coplane_coupling = True + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = True + self.include_fringe_coupling = True + self.include_trace_coupling = True + self.max_coupled_lines = 12 + self.return_current_distribution = False + else: + self.include_coplane_coupling = True + self.include_inter_plane_coupling = False + self.include_split_plane_coupling = True + self.include_fringe_coupling = True + self.include_trace_coupling = True + self.max_coupled_lines = 40 + self.return_current_distribution = True self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False self._edb_sim_setup_info.SimulationSettings.SISliderPos = value self._update_setup() From 8af5e38d8d3fe0cdcdd165be7195e7b60a1433d1 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:06:26 +0200 Subject: [PATCH 19/78] Add GRPC port (#3798) --- pyaedt/misc/Run_PyAEDT_Script.py_build | 5 ++++- pyaedt/misc/Run_PyAEDT_Toolkit_Script.py_build | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pyaedt/misc/Run_PyAEDT_Script.py_build b/pyaedt/misc/Run_PyAEDT_Script.py_build index 152b833b19d..85bfca277d2 100644 --- a/pyaedt/misc/Run_PyAEDT_Script.py_build +++ b/pyaedt/misc/Run_PyAEDT_Script.py_build @@ -48,7 +48,10 @@ def main(): check_file(python_exe) check_file(pyaedt_script) os.environ["PYAEDT_SCRIPT_PROCESS_ID"] = str(oDesktop.GetProcessID()) - os.environ["PYAEDT_SCRIPT_VERSION"] = str(oDesktop.GetVersion()[:6]) + version = str(oDesktop.GetVersion()[:6]) + os.environ["PYAEDT_SCRIPT_VERSION"] = version + if version > "2022.2": + os.environ["PYAEDT_SCRIPT_PORT"] = str(oDesktop.GetGrpcServerPort()) if is_linux: edt_root = os.path.normpath(oDesktop.GetExeDir()) os.environ["ANSYSEM_ROOT{}".format(version)] = edt_root diff --git a/pyaedt/misc/Run_PyAEDT_Toolkit_Script.py_build b/pyaedt/misc/Run_PyAEDT_Toolkit_Script.py_build index aaac748a78b..119e1ecced6 100644 --- a/pyaedt/misc/Run_PyAEDT_Toolkit_Script.py_build +++ b/pyaedt/misc/Run_PyAEDT_Toolkit_Script.py_build @@ -38,7 +38,10 @@ def main(): check_file(python_exe) check_file(pyaedt_script) os.environ["PYAEDT_SCRIPT_PROCESS_ID"] = str(oDesktop.GetProcessID()) - os.environ["PYAEDT_SCRIPT_VERSION"] = str(oDesktop.GetVersion()[:6]) + version = str(oDesktop.GetVersion()[:6]) + os.environ["PYAEDT_SCRIPT_VERSION"] = version + if version > "2022.2": + os.environ["PYAEDT_SCRIPT_PORT"] = str(oDesktop.GetGrpcServerPort()) if is_linux: edt_root = os.path.normpath(oDesktop.GetExeDir()) os.environ["ANSYSEM_ROOT{}".format(version)] = edt_root From 5507831094c9eeecc58864f17ae193b55006a69e Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Wed, 25 Oct 2023 19:23:08 +0200 Subject: [PATCH 20/78] fix (#3797) Co-authored-by: ring630 <@gmail.com> --- _unittest/test_00_EDB.py | 2 ++ pyaedt/edb_core/edb_data/terminals.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 716acbb0ca1..c47d1346d6b 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -1387,6 +1387,8 @@ def test_107_create_edge_ports(self): gap_port.name = "gap_port" assert gap_port.name == "gap_port" assert isinstance(gap_port.renormalize_z0, tuple) + gap_port.is_circuit_port = True + assert gap_port.is_circuit_port edb.close() def test_108_create_dc_simulation(self): diff --git a/pyaedt/edb_core/edb_data/terminals.py b/pyaedt/edb_core/edb_data/terminals.py index 30e551e241e..2a996f08df1 100644 --- a/pyaedt/edb_core/edb_data/terminals.py +++ b/pyaedt/edb_core/edb_data/terminals.py @@ -65,6 +65,10 @@ def is_circuit_port(self): """Whether it is a circuit port.""" return self._edb_object.GetIsCircuitPort() + @is_circuit_port.setter + def is_circuit_port(self, value): + self._edb_object.SetIsCircuitPort(value) + @property def _port_post_processing_prop(self): """Get port post processing properties.""" From bb3830c4119908e50198191187363dddfb6dd20e Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:16:47 +0200 Subject: [PATCH 21/78] Support case files (#3799) * Added support to Case Files, minore fix improvement in the plot field and in animate field with pyvista. Added support to Q3D named expression field plot. * Improved Q3D DC IR Example * Improved Q3D DC IR Example * Add UT and pragma no cover --------- Co-authored-by: maxcapodi78 Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Co-authored-by: Samuel Lopez --- _unittest/test_12_1_PostProcessing.py | 4 + examples/05-Q3D/Q3D_DC_IR.py | 54 ++++++- .../06-Multiphysics/Hfss_Icepak_Coupling.py | 4 +- pyaedt/generic/plot.py | 48 ++++--- pyaedt/modules/AdvancedPostProcessing.py | 30 +++- pyaedt/modules/PostProcessor.py | 77 ++++++++-- pyaedt/modules/solutions.py | 133 ++++++++++-------- 7 files changed, 247 insertions(+), 103 deletions(-) diff --git a/_unittest/test_12_1_PostProcessing.py b/_unittest/test_12_1_PostProcessing.py index 120b5e46be3..2349af9db82 100644 --- a/_unittest/test_12_1_PostProcessing.py +++ b/_unittest/test_12_1_PostProcessing.py @@ -556,6 +556,10 @@ def test_15_export_plot(self): show=False, export_path=os.path.join(self.local_scratch.path, "image.jpg") ) assert os.path.exists(obj.image_file) + obj2 = self.aedtapp.post.plot_model_obj( + show=False, export_path=os.path.join(self.local_scratch.path, "image2.jpg"), plot_as_separate_objects=False + ) + assert os.path.exists(obj2.image_file) @pytest.mark.skipif(is_linux or sys.version_info < (3, 8), reason="Not running in ironpython") def test_16_create_field_plot(self): diff --git a/examples/05-Q3D/Q3D_DC_IR.py b/examples/05-Q3D/Q3D_DC_IR.py index cabbe6c6ea3..91a05e5440b 100644 --- a/examples/05-Q3D/Q3D_DC_IR.py +++ b/examples/05-Q3D/Q3D_DC_IR.py @@ -158,11 +158,11 @@ # Use previously calculated positions to identify faces, # select the net "1_Top" and # assign sources and sinks on nets. - sink_f = q3d.modeler.create_circle(q3d.PLANE.XY, location_u11_scl, 0.1) source_f1 = q3d.modeler.create_circle(q3d.PLANE.XY, location_u9_1_scl, 0.1) source_f2 = q3d.modeler.create_circle(q3d.PLANE.XY, location_u9_2_scl, 0.1) source_f3= q3d.modeler.create_circle(q3d.PLANE.XY, location_u11_r106, 0.1) +sources_objs = [source_f1, source_f2, source_f3] q3d.auto_identify_nets() identified_net = q3d.nets[0] @@ -173,9 +173,11 @@ source2 = q3d.source(source_f2, net_name=identified_net) source3 = q3d.source(source_f3, net_name=identified_net) +sources_bounds = [source1, source2, source3] -q3d.edit_sources(dcrl={"{}:{}".format(source1.props["Net"], source1.name): "1.0A", - "{}:{}".format(source2.props["Net"], source2.name): "1.0A"}) +q3d.edit_sources(dcrl={"{}:{}".format(source1.props["Net"], source1.name): "-1.0A", + "{}:{}".format(source2.props["Net"], source2.name): "-1.0A", + "{}:{}".format(source2.props["Net"], source3.name): "-1.0A"}) ############################################################################### # Create setup @@ -191,13 +193,27 @@ setup.props["DC"]["Cond"]["MaxPass"]=3 setup.analyze() +############################################################################### +# Field Calculator +# ~~~~~~~~~~~~~~~~ +# We will create a named expression using field calculator. + +drop_name = "Vdrop3_3" +fields = q3d.ofieldsreporter +q3d.ofieldsreporter.CalcStack("clear") +q3d.ofieldsreporter.EnterQty("Phidc") +q3d.ofieldsreporter.EnterScalar(3.3) +q3d.ofieldsreporter.CalcOp("+") +q3d.ofieldsreporter.AddNamedExpression(drop_name, "DC R/L Fields") + ############################################################################### # Phi plot # ~~~~~~~~ # Compute ACL solutions and plot them. -plot1 = q3d.post.create_fieldplot_surface(q3d.modeler.get_objects_by_material("copper"), "Phidc", +plot1 = q3d.post.create_fieldplot_surface(q3d.modeler.get_objects_by_material("copper"), quantityName=drop_name, intrinsincDict={"Freq": "1GHz"}) + q3d.post.plot_field_from_fieldplot( plot1.name, project_path=q3d.working_directory, @@ -209,6 +225,36 @@ log_scale=False, ) + +############################################################################### +# Computing Voltage on Source Circles +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Using Field Calculator we can compute the voltage on source circles and get the value +# using get_solution_data method. + +curves = [] +for source_circle, source_bound in zip(sources_objs, sources_bounds): + source_sheet_name = source_circle.name + + curves.append("V{}".format(source_bound.name)) + + q3d.ofieldsreporter.CalcStack("clear") + q3d.ofieldsreporter.CopyNamedExprToStack(drop_name) + q3d.ofieldsreporter.EnterSurf(source_sheet_name) + q3d.ofieldsreporter.CalcOp("Maximum") + q3d.ofieldsreporter.AddNamedExpression("V{}".format(source_bound.name), "DC R/L Fields") + + +data = q3d.post.get_solution_data( + curves, + q3d.nominal_adaptive, + variations={"Freq": "1GHz"}, + report_category="DC R/L Fields", + ) +for curve in curves: + print(data.data_real(curve)) + + ############################################################################### # Close AEDT # ~~~~~~~~~~ diff --git a/examples/06-Multiphysics/Hfss_Icepak_Coupling.py b/examples/06-Multiphysics/Hfss_Icepak_Coupling.py index 393d46ca912..658b0e6186f 100644 --- a/examples/06-Multiphysics/Hfss_Icepak_Coupling.py +++ b/examples/06-Multiphysics/Hfss_Icepak_Coupling.py @@ -287,8 +287,8 @@ log_scale=True, ) animated.gif_file = os.path.join(aedtapp.working_directory, "animate.gif") -animated.camera_position = [0, 0, 300] -animated.focal_point = [0, 0, 0] +# animated.camera_position = [0, 0, 300] +# animated.focal_point = [0, 0, 0] # Set off_screen to False to visualize the animation. # animated.off_screen = False animated.animate() diff --git a/pyaedt/generic/plot.py b/pyaedt/generic/plot.py index 0d68f27f88e..872ac5ade79 100644 --- a/pyaedt/generic/plot.py +++ b/pyaedt/generic/plot.py @@ -1320,7 +1320,12 @@ def _read_mesh_files(self, read_frames=False): obj_to_iterate.append(i) for field in obj_to_iterate: if field.path and not field._cached_polydata: - if ".aedtplt" in field.path: + if ".case" in field.path: + reader = pv.get_reader(os.path.abspath(field.path)).read() + field._cached_polydata = reader[reader.keys()[0]].extract_surface() + field.label = field._cached_polydata.point_data.active_scalars_name + + elif ".aedtplt" in field.path: vertices, faces, scalars, log1 = _parse_aedtplt(field.path) if self.convert_fields_in_db: scalars = [np.multiply(np.log10(i), self.log_multiplier) for i in scalars] @@ -1574,6 +1579,8 @@ def plot(self, export_image_path=None): cmap=field.color_map, opacity=field.opacity, show_edges=field.show_edge, + smooth_shading=True, + split_sharp_edges=True, ) self.pv.set_scale(self.x_scale, self.y_scale, self.z_scale) @@ -1587,9 +1594,9 @@ def plot(self, export_image_path=None): self.pv.show_grid(color=tuple(axes_color), grid=self.show_grid, fmt="%.2e") if self.bounding_box: self.pv.add_bounding_box(color=tuple(axes_color)) - self.pv.set_focus(self.pv.mesh.center) if not self.isometric_view: + self.pv.set_focus(self.pv.mesh.center) if isinstance(self.camera_position, (tuple, list)): self.pv.camera.position = self.camera_position self.pv.camera.focal_point = self.focal_point @@ -1695,19 +1702,7 @@ def animate(self): for m in self.fields: labels.append([m.name, "red"]) self.pv.add_legend(labels=labels, bcolor=None, face="circle", size=[0.15, 0.15]) - if not self.isometric_view: - if isinstance(self.camera_position, (tuple, list)): - self.pv.camera.position = self.camera_position - self.pv.camera.focal_point = self.focal_point - self.pv.camera.up = self.view_up - else: - self.pv.camera_position = self.camera_position - self.pv.camera.azimuth += self.azimuth_angle - self.pv.camera.roll += self.roll_angle - self.pv.camera.elevation += self.elevation_angle - else: - self.pv.isometric_view() - self.pv.zoom = self.zoom + self._animating = True if self.gif_file: @@ -1754,11 +1749,6 @@ def p_callback(): cmap=field.color_map, opacity=field.opacity, ) - # run until q is pressed - if self.pv.mesh: - self.pv.set_focus(self.pv.mesh.center) - - cpos = self.pv.show(interactive=False, auto_close=False, interactive_update=not self.off_screen) if self.range_min is not None and self.range_max is not None: mins = self.range_min @@ -1785,6 +1775,24 @@ def p_callback(): name="FieldPlot", opacity=self.frames[0].opacity, ) + # run until q is pressed + if self.pv.mesh: + self.pv.set_focus(self.pv.mesh.center) + if not self.isometric_view: + if isinstance(self.camera_position, (tuple, list)): + self.pv.camera.position = self.camera_position + self.pv.camera.focal_point = self.focal_point + self.pv.camera.up = self.view_up + else: + self.pv.camera_position = self.camera_position + self.pv.camera.azimuth += self.azimuth_angle + self.pv.camera.roll += self.roll_angle + self.pv.camera.elevation += self.elevation_angle + else: + self.pv.isometric_view() + self.pv.camera.zoom(self.zoom) + cpos = self.pv.show(interactive=False, auto_close=False, interactive_update=not self.off_screen) + start = time.time() try: self.pv.update(1, force_redraw=True) diff --git a/pyaedt/modules/AdvancedPostProcessing.py b/pyaedt/modules/AdvancedPostProcessing.py index b5373a42e15..de3dd31a747 100644 --- a/pyaedt/modules/AdvancedPostProcessing.py +++ b/pyaedt/modules/AdvancedPostProcessing.py @@ -322,6 +322,7 @@ def plot_field_from_fieldplot( show_grid=False, show_bounding=False, show_legend=True, + plot_as_separate_objects=True, ): """Export a field plot to an image file (JPG or PNG) using Python PyVista. @@ -367,6 +368,8 @@ def plot_field_from_fieldplot( Whether to display the axes bounding box or not. The default is ``False``. show_legend : bool, optional Whether to display the legend or not. The default is ``True``. + plot_as_separate_objects : bool, optional + Plot each object separately. It may require more time to export from AEDT. Returns ------- @@ -381,8 +384,12 @@ def plot_field_from_fieldplot( else: self.ofieldsreporter.UpdateQuantityFieldsPlots(plot_folder) - file_to_add = self.export_field_plot(plotname, self._app.working_directory) - model = self.get_model_plotter_geometries(generate_mesh=False, get_objects_from_aedt=plot_cad_objs) + file_to_add = self.export_field_plot(plotname, self._app.working_directory, file_format="case") + model = self.get_model_plotter_geometries( + generate_mesh=False, + get_objects_from_aedt=plot_cad_objs, + plot_as_separate_objects=plot_as_separate_objects, + ) model.show_legend = show_legend model.off_screen = not show if dark_mode: @@ -391,7 +398,10 @@ def plot_field_from_fieldplot( model.show_grid = show_grid if file_to_add: model.add_field_from_file( - file_to_add, coordinate_units=self.modeler.model_units, show_edges=meshplot, log_scale=log_scale + file_to_add, + coordinate_units=self.modeler.model_units, + show_edges=meshplot, + log_scale=log_scale, ) if plot_label: model.fields[0].label = plot_label @@ -427,7 +437,7 @@ def plot_field( scale_min=None, scale_max=None, plot_cad_objs=True, - log_scale=True, + log_scale=False, export_path="", imageformat="jpg", keep_plot_after_generation=False, @@ -436,6 +446,7 @@ def plot_field( show_grid=False, show_legend=True, filter_objects=[], + plot_as_separate_objects=True, ): """Create a field plot using Python PyVista and export to an image file (JPG or PNG). @@ -471,7 +482,7 @@ def plot_field( plot_cad_objs : bool, optional Whether to include objects in the plot. The default is ``True``. log_scale : bool, optional - Whether to plot fields in log scale. The default is ``True``. + Whether to plot fields in log scale. The default is ``False``. export_path : str, optional Image export path. Default is ``None`` to not export the image. imageformat : str, optional @@ -490,6 +501,8 @@ def plot_field( Whether to display the legend or not. The default is ``True``. filter_objects : list, optional Objects list for filtering the ``CutPlane`` plots. + plot_as_separate_objects : bool, optional + Plot each object separately. It may require more time to export from AEDT. Returns ------- @@ -534,6 +547,7 @@ def plot_field( show_grid=show_grid, show_bounding=show_bounding, show_legend=show_legend, + plot_as_separate_objects=plot_as_separate_objects, ) if not keep_plot_after_generation: plotf.delete() @@ -652,7 +666,7 @@ def plot_animated_field( object_list, quantity, setup_name, intrinsics, filter_objects=filter_objects ) if plotf: - file_to_add = self.export_field_plot(plotf.name, export_path, plotf.name + str(v)) + file_to_add = self.export_field_plot(plotf.name, export_path, plotf.name + str(v), file_format="case") if file_to_add: fields_to_add.append(file_to_add) plotf.delete() @@ -761,7 +775,9 @@ def animate_fields_from_aedtplt( ] ) fields_to_add.append( - self.export_field_plot(plotname, project_path, plotname + variation_variable + str(el)) + self.export_field_plot( + plotname, project_path, plotname + variation_variable + str(el), file_format="case" + ) ) model = self.get_model_plotter_geometries(generate_mesh=False) diff --git a/pyaedt/modules/PostProcessor.py b/pyaedt/modules/PostProcessor.py index 286207b85f1..7a79917c1ce 100644 --- a/pyaedt/modules/PostProcessor.py +++ b/pyaedt/modules/PostProcessor.py @@ -2636,7 +2636,15 @@ def export_field_plot(self, plotname, filepath, filename="", file_format="aedtpl if not filename: filename = plotname file_path = os.path.join(filepath, filename + "." + file_format) - self.ofieldsreporter.ExportFieldPlot(plotname, False, file_path) + if ".case" in file_path: + try: + self.ofieldsreporter.ExportFieldPlot(plotname, False, file_path) + except: # pragma: no cover + self.logger.warning("case file is not supported for this plot. Switching to aedtplt") + file_path = os.path.join(filepath, filename + ".aedtplt") + self.ofieldsreporter.ExportFieldPlot(plotname, False, file_path) + else: # pragma: no cover + self.ofieldsreporter.ExportFieldPlot(plotname, False, file_path) if settings.remote_rpc_session_temp_folder: local_path = os.path.join(settings.remote_rpc_session_temp_folder, filename + "." + file_format) file_path = check_and_download_file(local_path, file_path) @@ -2703,7 +2711,7 @@ def change_field_plot_scale(self, plot_name, minimum_value, maximum_value, is_lo @pyaedt_function_handler() def _create_fieldplot( - self, objlist, quantityName, setup_name, intrinsics, listtype, plot_name=None, filter_boxes=[] + self, objlist, quantityName, setup_name, intrinsics, listtype, plot_name=None, filter_boxes=[], field_type=None ): if not listtype.startswith("Layer") and self._app.design_type != "HFSS 3D Layout Design": objlist = self._app.modeler.convert_to_selections(objlist, True) @@ -2765,6 +2773,8 @@ def _create_fieldplot( intrinsincList=intrinsics, layers_plot_type=listtype, ) + if self._app.design_type == "Q3D Extractor": # pragma: no cover + plot.field_type = field_type plot.name = plot_name plot.plotFolder = plot_name plot.filter_boxes = filter_boxes @@ -2787,6 +2797,7 @@ def _create_fieldplot_line_traces( setup_name, intrinsics, plot_name=None, + field_type="", ): if not setup_name: setup_name = self._app.existing_analysis_sweeps[0] @@ -2814,6 +2825,8 @@ def _create_fieldplot_line_traces( intrinsincList=intrinsics, seedingFaces=seeding_faces_ids, ) + if field_type: + plot.field_type = field_type plot.name = plot_name plot.plotFolder = plot_name @@ -2827,7 +2840,9 @@ def _create_fieldplot_line_traces( return False @pyaedt_function_handler() - def create_fieldplot_line(self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None): + def create_fieldplot_line( + self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None, field_type="DC R/L Fields" + ): """Create a field plot of the line. Parameters @@ -2845,6 +2860,8 @@ def create_fieldplot_line(self, objlist, quantityName, setup_name=None, intrinsi is ``{}``. plot_name : str, optional Name of the fieldplot to create. + field_type : str, optional + Field type to plot. Valid only for Q3D Field plots. Returns ------- @@ -2861,7 +2878,9 @@ def create_fieldplot_line(self, objlist, quantityName, setup_name=None, intrinsi if plot_name and plot_name in list(self.field_plots.keys()): self.logger.info("Plot {} exists. returning the object.".format(plot_name)) return self.field_plots[plot_name] - return self._create_fieldplot(objlist, quantityName, setup_name, intrinsincDict, "Line", plot_name) + return self._create_fieldplot( + objlist, quantityName, setup_name, intrinsincDict, "Line", plot_name, field_type=field_type + ) @pyaedt_function_handler() def create_fieldplot_line_traces( @@ -2872,6 +2891,7 @@ def create_fieldplot_line_traces( setup_name=None, intrinsinc_dict=None, plot_name=None, + field_type="DC R/L Fields", ): """ Create a field plot of the line. @@ -2892,6 +2912,8 @@ def create_fieldplot_line_traces( is ``{}``. plot_name : str, optional Name of the field plot to create. The default is ``None``. + field_type : str, optional + Field type to plot. Valid only for Q3D Field plots. Returns ------- @@ -2965,6 +2987,7 @@ def create_fieldplot_line_traces( setup_name, intrinsinc_dict, plot_name, + field_type=field_type, ) @pyaedt_function_handler() @@ -3033,7 +3056,9 @@ def create_fieldplot_layers_nets( return self._create_fieldplot(layers_nets, quantity_name, setup_name, intrinsics, plot_type, plot_name) @pyaedt_function_handler() - def create_fieldplot_surface(self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None): + def create_fieldplot_surface( + self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None, field_type="DC R/L Fields" + ): """Create a field plot of surfaces. Parameters @@ -3051,6 +3076,8 @@ def create_fieldplot_surface(self, objlist, quantityName, setup_name=None, intri is ``{}``. plot_name : str, optional Name of the fieldplot to create. + field_type : str, optional + Field type to plot. Valid only for Q3D Field plots. Returns ------- @@ -3075,11 +3102,20 @@ def create_fieldplot_surface(self, objlist, quantityName, setup_name=None, intri new_obj_list.extend([i.id for i in self._app.modeler[objs].faces]) else: new_obj_list.append(objs) - return self._create_fieldplot(new_obj_list, quantityName, setup_name, intrinsincDict, "FacesList", plot_name) + return self._create_fieldplot( + new_obj_list, quantityName, setup_name, intrinsincDict, "FacesList", plot_name, field_type=field_type + ) @pyaedt_function_handler() def create_fieldplot_cutplane( - self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None, filter_objects=[] + self, + objlist, + quantityName, + setup_name=None, + intrinsincDict=None, + plot_name=None, + filter_objects=[], + field_type="DC R/L Fields", ): """Create a field plot of cut planes. @@ -3100,6 +3136,8 @@ def create_fieldplot_cutplane( Name of the fieldplot to create. filter_objects : list, optional Objects list on which filter the plot. + field_type : str, optional + Field type to plot. Valid only for Q3D Field plots. Returns ------- @@ -3119,11 +3157,26 @@ def create_fieldplot_cutplane( if filter_objects: filter_objects = self._app.modeler.convert_to_selections(filter_objects, True) return self._create_fieldplot( - objlist, quantityName, setup_name, intrinsincDict, "CutPlane", plot_name, filter_boxes=filter_objects + objlist, + quantityName, + setup_name, + intrinsincDict, + "CutPlane", + plot_name, + filter_boxes=filter_objects, + field_type=field_type, ) @pyaedt_function_handler() - def create_fieldplot_volume(self, objlist, quantityName, setup_name=None, intrinsincDict=None, plot_name=None): + def create_fieldplot_volume( + self, + objlist, + quantityName, + setup_name=None, + intrinsincDict=None, + plot_name=None, + field_type="DC R/L Fields", + ): """Create a field plot of volumes. Parameters @@ -3157,7 +3210,9 @@ def create_fieldplot_volume(self, objlist, quantityName, setup_name=None, intrin if plot_name and plot_name in list(self.field_plots.keys()): self.logger.info("Plot {} exists. returning the object.".format(plot_name)) return self.field_plots[plot_name] - return self._create_fieldplot(objlist, quantityName, setup_name, intrinsincDict, "ObjList", plot_name) + return self._create_fieldplot( + objlist, quantityName, setup_name, intrinsincDict, "ObjList", plot_name, field_type=field_type + ) @pyaedt_function_handler() def export_field_jpg( @@ -3514,7 +3569,7 @@ def export_model_obj(self, obj_list=None, export_path=None, export_as_single_obj else: fname = os.path.join(export_path, "Model_AllObjs_AllMats.obj") self._app.modeler.oeditor.ExportModelMeshToFile(fname, obj_list) - return [[fname, "grey", 0.6]] + return [[fname, "aquamarine", 0.3]] @pyaedt_function_handler() def export_mesh_obj(self, setup_name=None, intrinsic_dict=None): diff --git a/pyaedt/modules/solutions.py b/pyaedt/modules/solutions.py index 561c5f61e69..9249f813c92 100644 --- a/pyaedt/modules/solutions.py +++ b/pyaedt/modules/solutions.py @@ -2566,6 +2566,7 @@ def __init__( self.SeedingPointsNumber = 15 self.FractionOfMaximum = 0.8 self._filter_boxes = [] + self.field_type = None @property def filter_boxes(self): @@ -2776,7 +2777,7 @@ def surfacePlotInstruction(self): List of surface plot settings. """ - return [ + out = [ "NAME:" + self.name, "SolutionName:=", self.solutionName, @@ -2784,26 +2785,33 @@ def surfacePlotInstruction(self): self.quantityName, "PlotFolder:=", self.plotFolder, - "UserSpecifyName:=", - 1, - "UserSpecifyFolder:=", - 1, - "StreamlinePlot:=", - False, - "AdjacentSidePlot:=", - False, - "FullModelPlot:=", - False, - "IntrinsicVar:=", - self.intrinsicVar, - "PlotGeomInfo:=", - self.plotGeomInfo, - "FilterBoxes:=", - [len(self.filter_boxes)] + self.filter_boxes, - self.plotsettings, - "EnableGaussianSmoothing:=", - False, ] + if self.field_type: + out.extend(["FieldType:=", self.field_type]) + out.extend( + [ + "UserSpecifyName:=", + 1, + "UserSpecifyFolder:=", + 1, + "StreamlinePlot:=", + False, + "AdjacentSidePlot:=", + False, + "FullModelPlot:=", + False, + "IntrinsicVar:=", + self.intrinsicVar, + "PlotGeomInfo:=", + self.plotGeomInfo, + "FilterBoxes:=", + [len(self.filter_boxes)] + self.filter_boxes, + self.plotsettings, + "EnableGaussianSmoothing:=", + False, + ] + ) + return out @property def surfacePlotInstructionLineTraces(self): @@ -2818,7 +2826,7 @@ def surfacePlotInstructionLineTraces(self): List of plot settings for line traces. """ - return [ + out = [ "NAME:" + self.name, "SolutionName:=", self.solutionName, @@ -2830,45 +2838,52 @@ def surfacePlotInstructionLineTraces(self): "QuantityName_FieldLineTrace", "PlotFolder:=", self.plotFolder, - "IntrinsicVar:=", - self.intrinsicVar, - "Trace Step Length:=", - self.TraceStepLength, - "Use Adaptive Step:=", - self.UseAdaptiveStep, - "Seeding Faces:=", - self.seeding_faces, - "Seeding Markers:=", - [0], - "Surface Tracing Objects:=", - self.surfaces_indexes, - "Volume Tracing Objects:=", - self.volume_indexes, - "Seeding Sampling Option:=", - self.SeedingSamplingOption, - "Seeding Points Number:=", - self.SeedingPointsNumber, - "Fractional of Maximal:=", - self.FractionOfMaximum, - "Discrete Seeds Option:=", - "Marker Point", - [ - "NAME:InceptionEvaluationSettings", - "Gas Type:=", - 0, - "Gas Pressure:=", - 1, - "Use Inception:=", - True, - "Potential U0:=", - 0, - "Potential K:=", - 0, - "Potential A:=", - 1, - ], - self.field_line_trace_plot_settings, ] + if self.field_type: + out.extend(["FieldType:=", self.field_type]) + out.extend( + [ + "IntrinsicVar:=", + self.intrinsicVar, + "Trace Step Length:=", + self.TraceStepLength, + "Use Adaptive Step:=", + self.UseAdaptiveStep, + "Seeding Faces:=", + self.seeding_faces, + "Seeding Markers:=", + [0], + "Surface Tracing Objects:=", + self.surfaces_indexes, + "Volume Tracing Objects:=", + self.volume_indexes, + "Seeding Sampling Option:=", + self.SeedingSamplingOption, + "Seeding Points Number:=", + self.SeedingPointsNumber, + "Fractional of Maximal:=", + self.FractionOfMaximum, + "Discrete Seeds Option:=", + "Marker Point", + [ + "NAME:InceptionEvaluationSettings", + "Gas Type:=", + 0, + "Gas Pressure:=", + 1, + "Use Inception:=", + True, + "Potential U0:=", + 0, + "Potential K:=", + 0, + "Potential A:=", + 1, + ], + self.field_line_trace_plot_settings, + ] + ) + return out @property def field_plot_settings(self): From 7eae896a1e6dd2514f6dfdf4138a3e83423bc287 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Thu, 26 Oct 2023 14:56:03 +0200 Subject: [PATCH 22/78] terminal enhancement (#3795) * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update pyaedt/edb_core/edb_data/terminals.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/terminals.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> * fix --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- _unittest/test_00_EDB.py | 11 +++ pyaedt/edb.py | 13 ++- pyaedt/edb_core/edb_data/obj_base.py | 4 +- pyaedt/edb_core/edb_data/ports.py | 24 ------ pyaedt/edb_core/edb_data/terminals.py | 118 ++++++++++++++++++++++++-- pyaedt/edb_core/siwave.py | 44 +++++++++- 6 files changed, 177 insertions(+), 37 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index c47d1346d6b..e79ebe9cbce 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -456,6 +456,15 @@ def test_042_create_current_source(self): self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["A14", "A15"], group_name="vp_neg") assert self.edbapp.siwave.create_voltage_probe_on_pin_group("vprobe", "vp_pos", "vp_neg") assert self.edbapp.probes["vprobe"] + self.edbapp.siwave.place_voltage_probe( + "vprobe_2", "1V0", ["112mm", "24mm"], "1_Top", "GND", ["112mm", "27mm"], "Inner1(GND1)" + ) + vprobe_2 = self.edbapp.probes["vprobe_2"] + ref_term = vprobe_2.ref_terminal + assert isinstance(ref_term.location, list) + ref_term.location = [0, 0] + assert ref_term.layer + ref_term.layer = "1_Top" def test_043_create_dc_terminal(self): assert self.edbapp.siwave.create_dc_terminal("U1", "DDR4_DQ40", "dc_terminal1") == "dc_terminal1" @@ -1602,6 +1611,8 @@ def test_120_edb_create_port(self): port_ver = edb.ports["port_ver"] assert not port_ver.is_null assert port_ver.hfss_type == "Gap" + port_hori = edb.ports["port_hori"] + assert port_hori.ref_terminal args = { "layer_name": "1_Top", diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 667b2ea3104..508fab190cc 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -24,7 +24,6 @@ from pyaedt.edb_core.edb_data.hfss_simulation_setup_data import HfssSimulationSetup from pyaedt.edb_core.edb_data.ports import BundleWavePort from pyaedt.edb_core.edb_data.ports import CoaxPort -from pyaedt.edb_core.edb_data.ports import ExcitationProbes from pyaedt.edb_core.edb_data.ports import ExcitationSources from pyaedt.edb_core.edb_data.ports import GapPort from pyaedt.edb_core.edb_data.ports import WavePort @@ -35,8 +34,10 @@ from pyaedt.edb_core.edb_data.terminals import BundleTerminal from pyaedt.edb_core.edb_data.terminals import EdgeTerminal from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal +from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal from pyaedt.edb_core.edb_data.terminals import Terminal from pyaedt.edb_core.edb_data.variables import Variable +from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import LayoutObjType from pyaedt.edb_core.general import Primitives from pyaedt.edb_core.general import TerminalType @@ -364,6 +365,8 @@ def terminals(self): ter = BundleTerminal(self, i) elif terminal_type == TerminalType.PadstackInstanceTerminal.name: ter = PadstackInstanceTerminal(self, i) + elif terminal_type == TerminalType.PinGroupTerminal.name: + ter = PinGroupTerminal(self, i) else: ter = Terminal(self, i) temp[ter.name] = ter @@ -424,8 +427,12 @@ def sources(self): @property def probes(self): """Get all layout sources.""" - terms = [term for term in self.layout.terminals if int(term.GetBoundaryType()) in [8]] - return {ter.GetName(): ExcitationProbes(self, ter) for ter in terms} + temp = {} + for name, val in self.terminals.items(): + if val.boundary_type == BoundaryType.kVoltageProbe.name: + if not val.is_reference_terminal: + temp[name] = val + return temp @pyaedt_function_handler() def open_edb(self): diff --git a/pyaedt/edb_core/edb_data/obj_base.py b/pyaedt/edb_core/edb_data/obj_base.py index 4d43360e47a..45945326703 100644 --- a/pyaedt/edb_core/edb_data/obj_base.py +++ b/pyaedt/edb_core/edb_data/obj_base.py @@ -1,9 +1,9 @@ class ObjBase(object): """Manages EDB functionalities for a base object.""" - def __init__(self, pedb, model): + def __init__(self, pedb, edb_object): self._pedb = pedb - self._edb_object = model + self._edb_object = edb_object @property def is_null(self): diff --git a/pyaedt/edb_core/edb_data/ports.py b/pyaedt/edb_core/edb_data/ports.py index 26e5d1271c7..a26d240be6f 100644 --- a/pyaedt/edb_core/edb_data/ports.py +++ b/pyaedt/edb_core/edb_data/ports.py @@ -176,30 +176,6 @@ def phase(self, value): self._edb_object.SetSourcePhase(self._edb.utility.value(value)) -class ExcitationProbes(Terminal): - """Manage probes properties. - - Parameters - ---------- - pedb : pyaedt.edb.Edb - Edb object from Edblib. - edb_terminal : Ansys.Ansoft.Edb.Cell.Terminal.EdgeTerminal - Edge terminal instance from Edb. - - - Examples - -------- - This example shows how to access this class. - >>> from pyaedt import Edb - >>> edb = Edb("myaedb.aedb") - >>> probes = edb.probes - >>> print(probes["Probe1"].name) - """ - - def __init__(self, pedb, edb_terminal): - Terminal.__init__(self, pedb, edb_terminal) - - class BundleWavePort(BundleTerminal): """Manages bundle wave port properties. diff --git a/pyaedt/edb_core/edb_data/terminals.py b/pyaedt/edb_core/edb_data/terminals.py index 2a996f08df1..39245883611 100644 --- a/pyaedt/edb_core/edb_data/terminals.py +++ b/pyaedt/edb_core/edb_data/terminals.py @@ -4,6 +4,7 @@ from pyaedt.edb_core.edb_data.connectable import Connectable from pyaedt.edb_core.edb_data.padstacks_data import EDBPadstackInstance from pyaedt.edb_core.edb_data.primitives_data import cast +from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import TerminalType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.general_methods import generate_unique_name @@ -135,7 +136,17 @@ def boundary_type(self): ------- int """ - return self._edb_object.GetBoundaryType() + return self._edb_object.GetBoundaryType().ToString() + + @boundary_type.setter + def boundary_type(self, value): + if not value in [i.name for i in BoundaryType]: # pragma : no cover + self._pedb.logger.warning("Invalid Boundary Type={}".format(value)) + if value == self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe.ToString(): + temp = self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe + else: # pragma : no cover + temp = self._pedb.edb_api.cell.terminal.BoundaryType.InvalidBoundary + self._edb_object.SetBoundaryType(temp) @property def impedance(self): @@ -146,6 +157,28 @@ def impedance(self): def impedance(self, value): self._edb_object.SetImpedance(self._pedb.edb_value(value)) + @property + def is_reference_terminal(self): + """Whether it is a reference terminal.""" + return self._edb_object.IsReferenceTerminal() + + @property + def ref_terminal(self): + """Get reference terminal.""" + + terminal = Terminal(self._pedb, self._edb_object.GetReferenceTerminal()) + if not terminal.is_null: + if terminal.terminal_type == TerminalType.PointTerminal.name: + return PointTerminal(self._pedb, terminal._edb_object) + elif terminal.terminal_type == TerminalType.EdgeTerminal.name: + return EdgeTerminal(self._pedb, terminal._edb_object) + elif terminal.terminal_type == TerminalType.InvalidTerminal.name: # pragma : no cover + return None + + @ref_terminal.setter + def ref_terminal(self, value): + self._edb_object.SetReferenceTerminal(value._edb_object) + @property def reference_object(self): # pragma : no cover """This returns the object assigned as reference. It can be a primitive or a padstack instance. @@ -244,7 +277,7 @@ def get_pin_group_terminal_reference_pin(self, gnd_net_name_preference=None): # return EDBPadstackInstance(refTermPSI, self._pedb) except AttributeError: return None - return None # pragma: no cover + return None @pyaedt_function_handler() def get_edge_terminal_reference_primitive(self): # pragma : no cover @@ -268,7 +301,7 @@ def get_edge_terminal_reference_primitive(self): # pragma : no cover prim_shape_data = primitive.GetPolygonData() if prim_shape_data.PointInPolygon(shape_pd): return cast(primitive, self._pedb) - return None # pragma: no cover + return None @pyaedt_function_handler() def get_point_terminal_reference_primitive(self): # pragma : no cover @@ -331,11 +364,11 @@ def _get_closest_pin(self, ref_pin, pin_list, gnd_net=None): else: power_ground_net_names = [net for net in self._pedb.nets.power_nets.keys()] comp_ref_pins = [i for i in pin_list if i.GetNet().GetName() in power_ground_net_names] - if len(comp_ref_pins) == 0: + if len(comp_ref_pins) == 0: # pragma: no cover self._pedb.logger.error( "Terminal with PadStack Instance Name {} component has no reference pins.".format(ref_pin.GetName()) - ) # pragma: no cover - return None # pragma: no cover + ) + return None closest_pin_distance = None pin_obj = None for pin in comp_ref_pins: # find the distance to all the pins to the terminal pin @@ -456,3 +489,76 @@ def create(self, padstack_instance, name=None, layer=None, is_ref=False): terminal = PadstackInstanceTerminal(self._pedb, terminal) return terminal if not terminal.is_null else False + + +class PointTerminal(Terminal): + """Manages point terminal properties.""" + + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) + + @pyaedt_function_handler + def create(self, name, net, location, layer, is_ref=False): + """Create a point terminal. + + Parameters + ---------- + name : str + Name of the terminal. + net : str + Name of the net. + location : list + Location of the terminal. + layer : str + Name of the layer. + is_ref : bool, optional + Whether it is a reference terminal. + + Returns + ------- + + """ + terminal = self._pedb.edb_api.cell.terminal.PointTerminal.Create( + self._pedb.active_layout, + self._pedb.nets[net].net_object, + name, + self._pedb.point_data(*location), + self._pedb.stackup[layer]._edb_layer, + is_ref, + ) + terminal = PointTerminal(self._pedb, terminal) + return terminal if not terminal.is_null else False + + @property + def location(self): + """Get location of the terminal.""" + point_data = self._pedb.point_data(0, 0) + layer = list(self._pedb.stackup.layers.values())[0]._edb_layer + if self._edb_object.GetParameters(point_data, layer): + return [point_data.X.ToDouble(), point_data.Y.ToDouble()] + + @location.setter + def location(self, value): + layer = self.layer + self._edb_object.SetParameters(self._pedb.point_data(*value), layer) + + @property + def layer(self): + """Get layer of the terminal.""" + point_data = self._pedb.point_data(0, 0) + layer = list(self._pedb.stackup.layers.values())[0]._edb_layer + if self._edb_object.GetParameters(point_data, layer): + return layer + + @layer.setter + def layer(self, value): + layer = self._pedb.stackup.layers[value]._edb_layer + point_data = self._pedb.point_data(*self.location) + self._edb_object.SetParameters(point_data, layer) + + +class PinGroupTerminal(Terminal): + """Manages pin group terminal properties.""" + + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) diff --git a/pyaedt/edb_core/siwave.py b/pyaedt/edb_core/siwave.py index 647f8afa3ef..8d6b65c0ced 100644 --- a/pyaedt/edb_core/siwave.py +++ b/pyaedt/edb_core/siwave.py @@ -7,14 +7,13 @@ from pyaedt.edb_core.edb_data.simulation_configuration import SimulationConfiguration from pyaedt.edb_core.edb_data.simulation_configuration import SourceType - -# from pyaedt.edb_core.edb_data.sources import SourceType from pyaedt.edb_core.edb_data.sources import CircuitPort from pyaedt.edb_core.edb_data.sources import CurrentSource from pyaedt.edb_core.edb_data.sources import DCTerminal from pyaedt.edb_core.edb_data.sources import PinGroup from pyaedt.edb_core.edb_data.sources import ResistorSource from pyaedt.edb_core.edb_data.sources import VoltageSource +from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.constants import SolverType from pyaedt.generic.constants import SweepType @@ -1388,3 +1387,44 @@ def create_circuit_port_on_pin_group(self, pos_pin_group_name, neg_pin_group_nam neg_terminal.SetName(name + "_ref") pos_terminal.SetReferenceTerminal(neg_terminal) return True + + @pyaedt_function_handler + def place_voltage_probe( + self, + name, + positive_net_name, + positive_location, + positive_layer, + negative_net_name, + negative_location, + negative_layer, + ): + """Place a voltage probe between two points. + + Parameters + ---------- + name : str, + Name of the probe. + positive_net_name : str + Name of the positive net. + positive_location : list + Location of the positive terminal. + positive_layer : str, + Layer of the positive terminal. + negative_net_name : str, + Name of the negative net. + negative_location : list + Location of the negative terminal. + negative_layer : str + Layer of the negative terminal. + """ + from pyaedt.edb_core.edb_data.terminals import PointTerminal + + point_terminal = PointTerminal(self._pedb) + p_terminal = point_terminal.create(name, positive_net_name, positive_location, positive_layer) + p_terminal.boundary_type = BoundaryType.kVoltageProbe.name + + n_terminal = point_terminal.create(name + "_ref", negative_net_name, negative_location, negative_layer) + n_terminal.boundary_type = BoundaryType.kVoltageProbe.name + p_terminal.ref_terminal = n_terminal + return self._pedb.probes[name] From c8a3acec66be0b1004b2552d4592237cce73021f Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Thu, 26 Oct 2023 16:52:46 +0200 Subject: [PATCH 23/78] Now PyAEDT Cutout keeps the path as lines after the cutout (#3801) * Now PyAEDT Cutout keeps the path as lines after the cutout instead of converting them to polygon data. * added flag in cutout method to keep back compatibility * Update pyaedt/edb.py * added flag in cutout method to keep back compatibility --------- Co-authored-by: maxcapodi78 Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> --- _unittest/test_00_EDB.py | 12 ++++++++- pyaedt/edb.py | 39 ++++++++++++++++++++++++++++- pyaedt/edb_core/dotnet/primitive.py | 8 +++--- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index e79ebe9cbce..717b7d2b97d 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -729,16 +729,26 @@ def test_063_create_custom_cutout(self): edbapp.nets.nets assert edbapp.cutout( signal_list=["1V0"], - reference_list=["GND"], + reference_list=[ + "GND", + "LVDS_CH08_N", + "LVDS_CH08_P", + "LVDS_CH10_N", + "LVDS_CH10_P", + "LVDS_CH04_P", + "LVDS_CH04_N", + ], extent_type="Bounding", number_of_threads=4, extent_defeature=0.001, preserve_components_with_model=True, + keep_lines_as_path=True, ) assert "A0_N" not in edbapp.nets.nets assert isinstance(edbapp.nets.find_and_fix_disjoint_nets("GND", order_by_area=True), list) assert isinstance(edbapp.nets.find_and_fix_disjoint_nets("GND", keep_only_main_net=True), list) assert isinstance(edbapp.nets.find_and_fix_disjoint_nets("GND", clean_disjoints_less_than=0.005), list) + edbapp.close() @pytest.mark.skipif(sys.version_info < (3, 8), reason="Method works in CPython only") diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 508fab190cc..3eee3c44133 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -1592,6 +1592,7 @@ def cutout( maximum_iterations=10, preserve_components_with_model=False, simple_pad_check=True, + keep_lines_as_path=False, ): """Create a cutout using an approach entirely based on PyAEDT. This method replaces all legacy cutout methods in PyAEDT. @@ -1663,6 +1664,11 @@ def cutout( Whether to use the center of the pad to find the intersection with extent or use the bounding box. Second method is much slower and requires to disable multithread on padstack removal. Default is `True`. + keep_lines_as_path : bool, optional + Whether to keep the lines as Path after they are cutout or convert them to PolygonData. + This feature works only in Electronics Desktop (3D Layout). + If the flag is set to ``True`` it can cause issues in SiWave once the Edb is imported. + Default is ``False`` to generate PolygonData of cut lines. Returns ------- @@ -1752,6 +1758,7 @@ def cutout( preserve_components_with_model=preserve_components_with_model, include_partial=include_partial_instances, simple_pad_check=simple_pad_check, + keep_lines_as_path=keep_lines_as_path, ) if self.are_port_reference_terminals_connected(): if output_aedb_path: @@ -1791,6 +1798,7 @@ def cutout( preserve_components_with_model=preserve_components_with_model, include_partial=include_partial_instances, simple_pad_check=simple_pad_check, + keep_lines_as_path=keep_lines_as_path, ) if result and not open_cutout_at_end and self.edbpath != legacy_path: self.save_edb() @@ -1996,6 +2004,7 @@ def _create_cutout_multithread( preserve_components_with_model=False, include_partial=False, simple_pad_check=True, + keep_lines_as_path=False, ): if is_ironpython: # pragma: no cover self.logger.error("Method working only in Cpython") @@ -2033,6 +2042,7 @@ def _create_cutout_multithread( i.net_object.Delete() reference_pinsts = [] reference_prims = [] + reference_paths = [] for i in self.padstacks.instances.values(): net_name = i.net_name id = i.id @@ -2046,7 +2056,10 @@ def _create_cutout_multithread( if net_name not in all_list: i.delete() elif net_name in reference_list and not i.is_void: - reference_prims.append(i) + if keep_lines_as_path and i.type == "Path": + reference_paths.append(i) + else: + reference_prims.append(i) self.logger.info_timer("Net clean up") self.logger.reset_timer() @@ -2094,6 +2107,17 @@ def intersect(poly1, poly2): def subtract(poly, voids): return poly.Subtract(convert_py_list_to_net_list(poly), convert_py_list_to_net_list(voids)) + def clip_path(path): + pdata = path.polygon_data.edb_api + int_data = _poly.GetIntersectionType(pdata) + if int_data == 0: + prims_to_delete.append(path) + return + result = path._edb_object.SetClipInfo(_poly, True) + if not result: + self.logger.info("Failed to clip path {}. Clipping as polygon.".format(path.id)) + reference_prims.append(path) + def clean_prim(prim_1): # pragma: no cover pdata = prim_1.polygon_data.edb_api int_data = _poly.GetIntersectionType(pdata) @@ -2139,6 +2163,11 @@ def pins_clean(pinst): self.logger.info_timer("Padstack Instances removal completed") self.logger.reset_timer() + # with ThreadPoolExecutor(number_of_threads) as pool: + # pool.map(lambda item: clip_path(item), reference_paths) + + for item in reference_paths: + clip_path(item) with ThreadPoolExecutor(number_of_threads) as pool: pool.map(lambda item: clean_prim(item), reference_prims) @@ -2147,6 +2176,7 @@ def pins_clean(pinst): for prim in prims_to_delete: prim.delete() + self.logger.info_timer("Primitives cleanup completed") self.logger.reset_timer() @@ -2182,6 +2212,7 @@ def create_cutout_multithread( remove_single_pin_components=False, use_pyaedt_extent_computing=False, extent_defeature=0, + keep_lines_as_path=False, ): """Create a cutout using an approach entirely based on pyaedt. It does in sequence: @@ -2222,6 +2253,11 @@ def create_cutout_multithread( extent_defeature : float, optional Defeature the cutout before applying it to produce simpler geometry for mesh (Experimental). It applies only to Conforming bounding box. Default value is ``0`` which disable it. + keep_lines_as_path : bool, optional + Whether to keep the lines as Path after they are cutout or convert them to PolygonData. + This feature works only in Electronics Desktop (3D Layout). + If the flag is set to True it can cause issues in SiWave once the Edb is imported. + Default is ``False`` to generate PolygonData of cut lines. Returns ------- @@ -2261,6 +2297,7 @@ def create_cutout_multithread( remove_single_pin_components=remove_single_pin_components, use_pyaedt_extent_computing=use_pyaedt_extent_computing, extent_defeature=extent_defeature, + keep_lines_as_path=keep_lines_as_path, ) @pyaedt_function_handler() diff --git a/pyaedt/edb_core/dotnet/primitive.py b/pyaedt/edb_core/dotnet/primitive.py index 63289fa9c62..abe6b6ef61f 100644 --- a/pyaedt/edb_core/dotnet/primitive.py +++ b/pyaedt/edb_core/dotnet/primitive.py @@ -746,7 +746,7 @@ def end_cap_style(self): **end_cap2** : End cap style of path end end cap. """ - return self.prim_obj.GetEndCapStyle() + return self._edb_object.GetEndCapStyle() @end_cap_style.setter def end_cap_style(self, end_cap1, end_cap2): @@ -759,7 +759,7 @@ def end_cap_style(self, end_cap1, end_cap2): end_cap2: :class:`PathEndCapType` End cap style of path end end cap. """ - self.prim_obj.SetEndCapStyle(end_cap1, end_cap2) + self._edb_object.SetEndCapStyle(end_cap1, end_cap2) @property def get_clip_info(self): @@ -777,7 +777,7 @@ def get_clip_info(self): **keep_inside** : Indicates whether the part of the path inside the polygon is preserved. """ - return self.prim_obj.GetClipInfo() + return self._edb_object.GetClipInfo() @get_clip_info.setter def get_clip_info(self, clipping_poly, keep_inside=True): @@ -790,7 +790,7 @@ def get_clip_info(self, clipping_poly, keep_inside=True): keep_inside: bool Indicates whether the part of the path inside the polygon should be preserved. """ - self.prim_obj.SetClipInfo( + self._edb_object.SetClipInfo( clipping_poly, keep_inside, ) From 103bdf17a81eb04e343a947efe2f5ca8d9cfe319 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Thu, 26 Oct 2023 16:55:19 +0200 Subject: [PATCH 24/78] Add unused variables delete (#3803) --- _unittest/test_09_VariableManager.py | 20 +++++++- pyaedt/application/Design.py | 11 ++++ pyaedt/application/Variables.py | 75 ++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 2 deletions(-) diff --git a/_unittest/test_09_VariableManager.py b/_unittest/test_09_VariableManager.py index fc42ebe3196..1fd01c51075 100644 --- a/_unittest/test_09_VariableManager.py +++ b/_unittest/test_09_VariableManager.py @@ -435,8 +435,9 @@ def test_13_postprocessing(self): def test_14_intrinsics(self): self.aedtapp["fc"] = "Freq" assert self.aedtapp["fc"] == "Freq" - assert self.aedtapp.variable_manager.dependent_variables["fc"].numeric_value == 1.0 - assert self.aedtapp.variable_manager.dependent_variables["fc"].units == "GHz" + assert self.aedtapp.variable_manager.dependent_variables["fc"].units == self.aedtapp.odesktop.GetDefaultUnit( + "Frequency" + ) def test_15_arrays(self): self.aedtapp["arr_index"] = 0 @@ -658,3 +659,18 @@ def test_31_test_validator_float_type_invalidate(self, validation_float_input): validation_errors = generate_validation_errors(property_names, expected_settings, actual_settings) assert len(validation_errors) == 1 + + def test_32_delete_unused_variables(self): + self.aedtapp.insert_design("used_variables") + self.aedtapp["used_var"] = "1mm" + self.aedtapp["unused_var"] = "1mm" + self.aedtapp["$project_used_var"] = "1" + self.aedtapp.modeler.create_rectangle(0, ["used_var", "used_var", "used_var"], [10, 20]) + mat1 = self.aedtapp.materials.add_material("new_copper2") + mat1.permittivity = "$project_used_var" + assert self.aedtapp.variable_manager.delete_variable("unused_var") + self.aedtapp["unused_var"] = "1mm" + number_of_variables = len(self.aedtapp.variable_manager.variable_names) + assert self.aedtapp.variable_manager.delete_unused_variables() + new_number_of_variables = len(self.aedtapp.variable_manager.variable_names) + assert number_of_variables != new_number_of_variables diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index be6978c1e23..b83305c3c82 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -3196,6 +3196,17 @@ def delete_variable(self, sVarName): """ return self.variable_manager.delete_variable(sVarName) + @pyaedt_function_handler() + def delete_unused_variables(self): + """Delete design and project unused variables. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + return self.variable_manager.delete_unused_variables() + @pyaedt_function_handler() def insert_design(self, design_name=None, solution_type=None): """Add a design of a specified type. diff --git a/pyaedt/application/Variables.py b/pyaedt/application/Variables.py index 06d91b48ab2..48257aaadcd 100644 --- a/pyaedt/application/Variables.py +++ b/pyaedt/application/Variables.py @@ -1236,6 +1236,81 @@ def delete_variable(self, var_name): return True return False + @pyaedt_function_handler() + def is_used_variable(self, var_name): + """Find if a variable is used. + + Parameters + ---------- + var_name : str + Name of the variable. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + """ + used = False + # Modeler + for obj in self._app.modeler.objects.values(): + used = self._find_used_variable_history(obj.history(), var_name) + if used: + self._logger.warning("{} used in modeler.".format(var_name)) + return used + + # Material + for mat in self._app.materials.material_keys.values(): + for _, v in mat._props.items(): + if isinstance(v, str) and var_name in re.findall("[$a-zA-Z0-9_]+", v): + used = True + self._logger.warning("{} used in the material: {}.".format(var_name, mat.name)) + return used + return used + + def _find_used_variable_history(self, history, var_name): + """Find if a variable is used. + + Parameters + ---------- + history : :class:`pyaedt.modeler.cad.elements3d.BinaryTree` + Object history. + + var_name : str + Name of the variable. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + """ + used = False + for _, v in history.props.items(): + if isinstance(v, str) and var_name in re.findall("[a-zA-Z0-9_]+", v): + return True + for el in history.children.values(): + used = self._find_used_variable_history(el, var_name) + if used: + return True + return used + + @pyaedt_function_handler() + def delete_unused_variables(self): + """Delete unused design and project variables. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + var_list = self.variable_names + + for var in var_list[:]: + if not self.is_used_variable(var): + self.delete_variable(var) + return True + @pyaedt_function_handler() def _get_var_list_from_aedt(self, desktop_object): var_list = [] From fd0636f59ea0b56057bdb4f2018e6b116ce127be Mon Sep 17 00:00:00 2001 From: Alberto Di Maria <84965833+Alberto-DM@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:49:48 +0200 Subject: [PATCH 25/78] Updated LoadAEDT method to support array definition (#3804) * started decoding recognized keyword "Cells". Added unittest (incomplete). * Completed the keywords parsing. * Fixed the keywords parsing. Completed the unit test * Added recognized keyword for PostProcessingCells. Added the unit test * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * moved the # pragma: no cover on the except * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py * Update pyaedt/generic/LoadAEDTFile.py --------- Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- .../example_models/T13/phased_array.aedt | 15650 ++++++++++++++++ _unittest/test_13_LoadAEDTFile.py | 43 + pyaedt/generic/LoadAEDTFile.py | 75 +- 3 files changed, 15762 insertions(+), 6 deletions(-) create mode 100644 _unittest/example_models/T13/phased_array.aedt diff --git a/_unittest/example_models/T13/phased_array.aedt b/_unittest/example_models/T13/phased_array.aedt new file mode 100644 index 00000000000..64aa7ed87dd --- /dev/null +++ b/_unittest/example_models/T13/phased_array.aedt @@ -0,0 +1,15650 @@ +$begin 'AnsoftProject' + Created='Mon Aug 7 15:54:28 2023' + Product='ElectronicsDesktop' + FileOwnedByWorkbench=false + $begin 'Desktop' + Version(2023, 2) + InfrastructureVersion(1, 0) + $begin 'FactoryHeader' + $begin 'geometry3deditor' + KernelVersion(2, 0) + ProjectContainsGeometry3D='1' + $end 'geometry3deditor' + $end 'FactoryHeader' + $end 'Desktop' + UsesAdvancedFeatures=true + NextUniqueID=0 + MoveBackwards=false + $begin 'HFSSEnvironment' + Version(1, 0) + $end 'HFSSEnvironment' + $begin 'PlanarEMEnvironment' + Version(1, 0) + $end 'PlanarEMEnvironment' + $begin 'Q3DEnvironment' + Version(1, 0) + $end 'Q3DEnvironment' + $begin '2DExtractorEnvironment' + Version(1, 0) + $end '2DExtractorEnvironment' + $begin 'NexximEnvironment' + Version(1, 0) + $end 'NexximEnvironment' + $begin 'NexximNetlistEnvironment' + Version(1, 0) + $end 'NexximNetlistEnvironment' + $begin 'EmitEnvironment' + Version(1, 0) + $end 'EmitEnvironment' + $begin 'Maxwell3DEnvironment' + Version(1, 0) + $end 'Maxwell3DEnvironment' + $begin 'Maxwell2DEnvironment' + Version(1, 0) + $end 'Maxwell2DEnvironment' + $begin 'RMxprtEnvironment' + Version(1, 0) + $end 'RMxprtEnvironment' + $begin 'MaxCirEnvironment' + Version(1, 0) + $end 'MaxCirEnvironment' + $begin 'SimplorerEnvironment' + Version(1, 0) + $end 'SimplorerEnvironment' + $begin 'IcepakEnvironment' + Version(1, 0) + $end 'IcepakEnvironment' + $begin 'MechanicalEnvironment' + Version(1, 0) + $end 'MechanicalEnvironment' + $begin 'SchematicEnvironment' + Version(1, 0) + $end 'SchematicEnvironment' + $begin 'geometry3deditor' + Version(1, 0) + $end 'geometry3deditor' + ReadVersion=11 + $begin 'DesignMgrEnvironment' + CompInstCounter=2 + GPortCounter=0 + NetCounter=0 + Alias('Ieee;Simplorer Elements\\Ieee', 'Std;Simplorer Elements\\Std', 'Basic_VHDLAMS;Simplorer Elements\\Basic Elements VHDLAMS\\Basic Elements VHDLAMS', 'Digital_Elements;Simplorer Elements\\Digital Elements\\Digital Elements', 'Transformations;Simplorer Elements\\Tools\\Transformations\\Transformations', 'HEV_VHDLAMS;Simplorer Elements\\HEV VHDLAMS\\HEV VHDLAMS', 'automotive_vda;Simplorer Elements\\VDALibs VHDLAMS\\automotive_vda', 'example_boardnet;Simplorer Elements\\VDALibs VHDLAMS\\example_boardnet', 'example_ecar;Simplorer Elements\\VDALibs VHDLAMS\\example_ecar', 'fundamentals_vda;Simplorer Elements\\VDALibs VHDLAMS\\fundamentals_vda', 'hybrid_emc_vda;Simplorer Elements\\VDALibs VHDLAMS\\hybrid_emc_vda', 'megma;Simplorer Elements\\VDALibs VHDLAMS\\megma', 'modelica_rotational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_rotational', 'modelica_thermal;Simplorer Elements\\VDALibs VHDLAMS\\modelica_thermal', 'modelica_translational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_translational', 'spice2vhd;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd', 'spice2vhd_devices;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd_devices', 'aircraft_electrical_vhdlams;Simplorer Elements\\Aircraft Electrical VHDLAMS\\Aircraft Electrical VHDLAMS', 'power_system_vhdlams;Simplorer Elements\\Power System VHDLAMS\\Power System VHDLAMS') + $end 'DesignMgrEnvironment' + $begin 'ProjectDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='ProjectDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'ProjectDatasets' + VariableOrders[0:] + $begin 'Definitions' + $begin 'Materials' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.949999988079071 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1697623815 + Library='' + LibLocation='Project' + ModSinceLib=true + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $begin 'Scripts' + $end 'Scripts' + $begin 'Symbols' + $begin 'array' + ModTime=1691447614 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'Graphics' + Rect(0, 0, 0, 0, 0.00254, 0.00254, 0.00508, 0.00508, 0, 0, 0) + Rect(0, 1, 0, 0, 0.000423333333333333, 0.00254, 0.000423333333333333, 0.000423333333333334, 0, 0, 0) + $end 'Graphics' + $end 'array' + $end 'Symbols' + $begin 'DefInfo' + array(1002, 0, 0, 0, '', 1691447614, '', 'array', '', '', '', '', '', 'Design.bmp', '', 'Project', '', '', 1691447614, '', 0, 0) + $end 'DefInfo' + $begin 'Compdefs' + $begin 'array' + Library='' + CircuitEnv=0 + Refbase='U' + NumParts=1 + ModSinceLib=true + $begin 'Properties' + TextProp('Representation', 'SRD', '', 'array') + TextProp('Owner', 'SRD', '', 'HFSS') + $end 'Properties' + CompExtID=6 + $begin 'Parameters' + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data() + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'array' + $end 'Compdefs' + $end 'Definitions' + DesignIDServer=4 + MoveBackwards=false + $begin 'HFSSModel' + RepRewriteV2=true + Name='array' + DesignID=0 + 'Use Advanced DC Extrapolation'=false + 'Use Power S'=false + 'Export FRTM After Simulation'=false + 'Export Rays After Simulation'=false + 'Export After Simulation'=false + 'Allow Material Override'=false + 'Calculate Lossy Dielectrics'=false + 'Perform Minimal validation'=false + $begin 'TemperatureSettings' + IncludeTemperatureDependence=false + Temperatures(-1, '22cel', 10, '22cel', 37, '22cel', 47, '22cel', 57, '22cel', 90, '22cel', 117, '22cel', 127, '22cel', 153, '22cel', 163, '22cel', 194, '22cel', 221, '22cel', 231, '22cel', 262, '22cel', 289, '22cel', 299, '22cel', 415, '22cel', 571, '22cel', 1093, '22cel') + $end 'TemperatureSettings' + 'Port Validation Settings'='Standard' + 'Save Adaptive support files'=false + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + MaterialDensity=1 + MassOfTissue=1 + VoxelSize=1 + TissueObjectList=-1 + AverageSarMethod=0 + UseAutoDCThickness=true + HaveZwaveSupport=true + DCThicknessObjects(571, '""') + $begin 'OutputVariable' + NextUniqueID=0 + MoveBackwards=false + $end 'OutputVariable' + $begin 'ModelSetup' + $begin 'DesignDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='DesignDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'DesignDatasets' + $begin 'Properties' + VariableProp('airbox_Z', 'UD', '', '0.25cm', oa(i=false, int=false, Min='0.125cm', Max='0.375cm', MinStep='0.0025cm', MaxStep='0.025cm', MinFocus='0.125cm', MaxFocus='0.375cm', UseManufacturableValues='false', Level='[0.125: 0.375] cm'), sa(i=false, int=false, Min='0.125cm', Max='0.375cm', IDisp='0.025cm'), ta(i=false, int=false, Step='0.025cm', Min='0.125cm', Max='0.375cm')) + $end 'Properties' + $begin 'PostProcessingVariables' + PostProcessingVariableProp('ScanFrequency', 'UD', '', '1800000000Hz') + PostProcessingVariableProp('ScanAngleTheta', 'UD', '', '0deg') + PostProcessingVariableProp('ScanAnglePhi', 'UD', '', '0deg') + PostProcessingVariableProp('ScanPhaseShiftA', 'UD', '', '-((ScanFrequency*0.0*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*1.25750701317e-09*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanPhaseShiftB', 'UD', '', '-((ScanFrequency*1.25750701317e-09*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*0.0*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanMag1', 'UD', '', '1W') + PostProcessingVariableProp('ScanPhase1', 'UD', '', '0deg') + $end 'PostProcessingVariables' + VariableOrders[8: 'airbox_Z', 'ScanFrequency', 'ScanAngleTheta', 'ScanAnglePhi', 'ScanPhaseShiftA', 'ScanPhaseShiftB', 'ScanMag1', 'ScanPhase1'] + $begin 'Editor3D Doc Preferences' + 'Plane Background'=true + BackgroundColor1=16777215 + BackgroundColor2=0 + 'Need Lights'=true + 'Ambient Light'=8355711 + 'Num Lights'=1 + Light0[4: 16777215, 0.75, -0.150000005960464, -0.629999995231628] + Ver=2 + $end 'Editor3D Doc Preferences' + SnapMode=32 + WorkingCS=1 + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=36 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=1218 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=651 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=23 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='-411.48cm/2' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='AB_CS' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=652 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=1032 + ReferenceCoordSystemID=651 + $begin 'RelativeCSParameters' + KernelVersion=23 + Mode='Axis/Position' + OriginX='118.6799999936cm' + OriginY='0cm' + OriginZ='-10.000000000027cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='NearField_CS' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=1033 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=1120 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=23 + Mode='Axis/Position' + OriginX='10cm' + OriginY='0cm' + OriginZ='0cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=1121 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'SubModelDefinitions' + $begin 'SubModelDefinition' + SubmodelDefinitionID=5 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 5] + SubmodelDefinitionName='01_Metal_Only_NEW' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/01_Metal_Only_NEW.a3dcomp' + IsLocal=false + ChecksumString='b6a9540558a3f710f5fe54297fae5b2b' + ChecksumHistory('7fb221808f33df6e49d8aa268055ce69') + VersionHistory('1.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='01_Metal_Only_NEW5.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=84 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 84] + SubmodelDefinitionName='02_Patch_NEW' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/02_Patch_NEW.a3dcomp' + IsLocal=false + ChecksumString='f29a40679c040a36039bc4c1d0c36d93' + ChecksumHistory('ea67790910e419e8b8fe253d8cb39680') + VersionHistory('1.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='02_Patch_NEW84.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=190 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 190] + SubmodelDefinitionName='03_Radome_Side_New' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/03_Radome_Side_New.a3dcomp' + IsLocal=false + ChecksumString='fe09e1bcf391c6061c448202590d5dca' + ChecksumHistory('1a552c3e1908c320de7fd7ba3c8df910') + VersionHistory('1.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='03_Radome_Side_New190.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=258 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 258] + SubmodelDefinitionName='04_Radome_Corner_NEW' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/04_Radome_Corner_NEW.a3dcomp' + IsLocal=false + ChecksumString='eb89ade4462f40448f759f7a566a4815' + ChecksumHistory('7cfd874261db221aa0edff946aa7e7ca') + VersionHistory('1.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='04_Radome_Corner_NEW258.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=413 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 413] + SubmodelDefinitionName='Radome' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/Radome.a3dcomp' + IsLocal=false + ChecksumString='7e643046ffefb147346275221f867649' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='Radome413.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=569 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 569] + SubmodelDefinitionName='Aluminum_Base' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/R2023R2_Parfect_Pitch/Aluminum_Base.a3dcomp' + IsLocal=false + ChecksumString='fab0cba514b831f59465b3edfba09d2b' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='Aluminum_Base569.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $end 'SubModelDefinitions' + $begin 'Groups' + $end 'Groups' + $begin 'UserDefinedModels' + $begin 'UserDefinedModel' + ID=5 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('238'=8, '250'=9, '34'=7, '6'=6) + CSKeyVsOperIdMap() + SkippedCoordinateSystems('233') + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='01_Metal_Only_NEW1' + GroupID=-1 + SubModelDefinitionID=5 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1199 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=5 + TranslateVectorX='-0.09' + TranslateVectorY='-0.06' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=5 + IsSuppressed=false + BaseOperIDs[4: 6, 7, 8, 9] + CachedBodyOperIDs[4: 1203, 1202, 1200, 1201] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[0:] + CachedCSOperIDs[0:] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/01_Metal_Only_NEW.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='airbox_Z' + Value='airbox_Z' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=84 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=86, '46'=87, '6'=85, '71'=88, '83'=89) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='02_Patch_NEW1' + GroupID=-1 + SubModelDefinitionID=84 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1204 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=84 + TranslateVectorX='-0.15' + TranslateVectorY='-0.12' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=84 + IsSuppressed=false + BaseOperIDs[5: 85, 86, 87, 88, 89] + CachedBodyOperIDs[5: 1207, 1205, 1206, 1208, 1209] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[0:] + CachedCSOperIDs[0:] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/02_Patch_NEW.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedWidth' + Value='0.336cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetGap' + Value='0.168cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetDistance' + Value='1.46cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedLength' + Value='1.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='airbox_Z' + Value='airbox_Z' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='feed_correct' + Value='0.85cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=190 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('250'=193, '34'=192, '6'=191) + CSKeyVsOperIdMap() + SkippedCoordinateSystems('233') + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='03_Radome_Side_New1' + GroupID=-1 + SubModelDefinitionID=190 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1210 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=190 + TranslateVectorX='-0.03' + TranslateVectorY='0.06' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=190 + IsSuppressed=false + BaseOperIDs[3: 191, 192, 193] + CachedBodyOperIDs[3: 1213, 1212, 1211] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[0:] + CachedCSOperIDs[0:] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/03_Radome_Side_New.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='airbox_Z' + Value='airbox_Z' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=258 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=260, '46'=261, '6'=259) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='04_Radome_Corner_NEW1' + GroupID=-1 + SubModelDefinitionID=258 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1214 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=258 + TranslateVectorX='-0.15' + TranslateVectorY='-0.18' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=258 + IsSuppressed=false + BaseOperIDs[3: 259, 260, 261] + CachedBodyOperIDs[3: 1217, 1215, 1216] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[0:] + CachedCSOperIDs[0:] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/04_Radome_Corner_NEW.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='airbox_Z' + Value='airbox_Z' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=413 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('111'=414) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='Radome1' + GroupID=-1 + SubModelDefinitionID=413 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=539 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=413 + TranslateVectorX='0cm' + TranslateVectorY='0cm' + TranslateVectorZ='0.25cm' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=413 + IsSuppressed=false + BaseOperIDs[1: 414] + CachedBodyOperIDs[1: 540] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[0:] + CachedCSOperIDs[0:] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/Radome.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=569 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('2050'=570) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='Aluminum_Base1' + GroupID=-1 + SubModelDefinitionID=569 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/R2023R2_Parfect_Pitch/Aluminum_Base.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subY' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subX' + Value='6cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=5 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=6 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=10 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=10 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=11, '11'=12, '12'=13, '7'=14, '8'=15, '9'=16) + EdgeKeyIDMap('13'=17, '14'=18, '15'=19, '16'=20, '17'=21, '18'=22, '19'=23, '20'=24, '21'=25, '22'=26, '23'=27, '24'=28) + VertexKeyIDMap('25'=29, '26'=30, '27'=31, '28'=32, '29'=33, '30'=34, '31'=35, '32'=36) + BodyKeyIDMap('6'=10) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1203 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=10 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=6357084 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=5 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=7 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=37 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=37 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=38) + EdgeKeyIDMap('35'=39, '36'=40, '37'=41, '38'=42) + VertexKeyIDMap('39'=43, '40'=44, '41'=45, '42'=46) + BodyKeyIDMap('34'=37) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1202 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=37 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=3211317 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=5 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=8 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=47 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=47 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('248'=48) + EdgeKeyIDMap('239'=49, '240'=50, '241'=51, '242'=52) + VertexKeyIDMap('243'=53, '244'=54, '245'=55, '246'=56) + BodyKeyIDMap('238'=47) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1200 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=47 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=6553700 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=5 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=9 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=57 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=57 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=58, '252'=59, '253'=60, '254'=61, '255'=62, '256'=63) + EdgeKeyIDMap('257'=64, '258'=65, '259'=66, '260'=67, '261'=68, '262'=69, '263'=70, '264'=71, '265'=72, '266'=73, '267'=74, '268'=75) + VertexKeyIDMap('269'=76, '270'=77, '271'=78, '272'=79, '273'=80, '274'=81, '275'=82, '276'=83) + BodyKeyIDMap('250'=57) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1201 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=57 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=1776136512 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_1' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=84 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=85 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=90 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=90 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=91, '11'=92, '12'=93, '7'=94, '8'=95, '9'=96) + EdgeKeyIDMap('13'=97, '14'=98, '15'=99, '16'=100, '17'=101, '18'=102, '19'=103, '20'=104, '21'=105, '22'=106, '23'=107, '24'=108) + VertexKeyIDMap('25'=109, '26'=110, '27'=111, '28'=112, '29'=113, '30'=114, '31'=115, '32'=116) + BodyKeyIDMap('6'=90) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1207 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=90 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=-650719018 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_1' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=84 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=86 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=117 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=117 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=118) + EdgeKeyIDMap('35'=119, '36'=120, '37'=121, '38'=122) + VertexKeyIDMap('39'=123, '40'=124, '41'=125, '42'=126) + BodyKeyIDMap('34'=117) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1205 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=117 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna_1' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=84 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=87 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=127 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=127 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('56'=128) + EdgeKeyIDMap('153'=129, '154'=130, '155'=131, '249'=132, '250'=133, '251'=134, '252'=135, '258'=136, '259'=137, '47'=138, '48'=139, '50'=140) + VertexKeyIDMap('156'=141, '157'=142, '158'=143, '159'=144, '254'=145, '255'=146, '256'=147, '257'=148, '51'=149, '52'=150, '53'=151, '54'=152) + BodyKeyIDMap('46'=127) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1206 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=127 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=191068638 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=84 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=88 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=153 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=153 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('81'=154) + EdgeKeyIDMap('72'=155, '73'=156, '74'=157, '75'=158) + VertexKeyIDMap('76'=159, '77'=160, '78'=161, '79'=162) + BodyKeyIDMap('71'=153) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1208 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=153 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=84 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=89 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=163 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=163 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('84'=164, '85'=165, '86'=166, '87'=167, '88'=168, '89'=169) + EdgeKeyIDMap('100'=170, '101'=171, '90'=172, '91'=173, '92'=174, '93'=175, '94'=176, '95'=177, '96'=178, '97'=179, '98'=180, '99'=181) + VertexKeyIDMap('102'=182, '103'=183, '104'=184, '105'=185, '106'=186, '107'=187, '108'=188, '109'=189) + BodyKeyIDMap('83'=163) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1209 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=163 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=721444559 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_2' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=190 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=191 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=194 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=194 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=195, '11'=196, '12'=197, '7'=198, '8'=199, '9'=200) + EdgeKeyIDMap('13'=201, '14'=202, '15'=203, '16'=204, '17'=205, '18'=206, '19'=207, '20'=208, '21'=209, '22'=210, '23'=211, '24'=212) + VertexKeyIDMap('25'=213, '26'=214, '27'=215, '28'=216, '29'=217, '30'=218, '31'=219, '32'=220) + BodyKeyIDMap('6'=194) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1213 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=194 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=655373 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_2' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=190 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=192 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=221 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=221 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=222) + EdgeKeyIDMap('35'=223, '36'=224, '37'=225, '38'=226) + VertexKeyIDMap('39'=227, '40'=228, '41'=229, '42'=230) + BodyKeyIDMap('34'=221) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1212 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=221 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_2' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=190 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=193 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=231 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=231 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=232, '252'=233, '253'=234, '254'=235, '255'=236, '256'=237) + EdgeKeyIDMap('257'=238, '258'=239, '259'=240, '260'=241, '261'=242, '262'=243, '263'=244, '264'=245, '265'=246, '266'=247, '267'=248, '268'=249) + VertexKeyIDMap('269'=250, '270'=251, '271'=252, '272'=253, '273'=254, '274'=255, '275'=256, '276'=257) + BodyKeyIDMap('250'=231) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1211 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=231 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=783386553 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_3' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=258 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=259 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=262 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=262 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=263, '11'=264, '12'=265, '7'=266, '8'=267, '9'=268) + EdgeKeyIDMap('13'=269, '14'=270, '15'=271, '16'=272, '17'=273, '18'=274, '19'=275, '20'=276, '21'=277, '22'=278, '23'=279, '24'=280) + VertexKeyIDMap('25'=281, '26'=282, '27'=283, '28'=284, '29'=285, '30'=286, '31'=287, '32'=288) + BodyKeyIDMap('6'=262) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1217 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=262 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_3' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=258 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=260 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=289 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=289 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=290) + EdgeKeyIDMap('35'=291, '36'=292, '37'=293, '38'=294) + VertexKeyIDMap('39'=295, '40'=296, '41'=297, '42'=298) + BodyKeyIDMap('34'=289) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1215 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=289 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_3' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=258 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=261 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=299 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=299 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('47'=300, '48'=301, '49'=302, '50'=303, '51'=304, '52'=305) + EdgeKeyIDMap('53'=306, '54'=307, '55'=308, '56'=309, '57'=310, '58'=311, '59'=312, '60'=313, '61'=314, '62'=315, '63'=316, '64'=317) + VertexKeyIDMap('65'=318, '66'=319, '67'=320, '68'=321, '69'=322, '70'=323, '71'=324, '72'=325) + BodyKeyIDMap('46'=299) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1216 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=299 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='NonModel#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=373 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='-24cm' + YStart='-24cm' + ZStart='0.1524cm' + Width='48cm' + Height='48cm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=374 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=374 + StartFaceID=-1 + StartEdgeID=375 + StartVertexID=379 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=383 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=374 + $end 'LocalOperationParameters' + ParentPartID=374 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=384 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=384 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2304 + FcUVMid(0, 0, 0.1524) + $begin 'FcTolVts' + TolVt(-24, -24, 0.1524, 5e-07) + TolVt(24, -24, 0.1524, 5e-07) + TolVt(24, 24, 0.1524, 5e-07) + TolVt(-24, 24, 0.1524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=373 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.7 + PartCoordinateSystem=1 + UDMId=413 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=414 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=415 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=27 + NumWires=0 + NumLoops=28 + NumCoedges=120 + NumEdges=60 + NumVertices=36 + $end 'Topology' + BodyID=415 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('112'=416, '113'=417, '2158'=418, '2161'=419, '2198'=420, '2211'=421, '2212'=422, '2236'=423, '2237'=424, '2252'=425, '2253'=426, '2271'=427, '2457'=428, '2459'=429, '2509'=430, '2511'=431, '2561'=432, '2615'=433, '2616'=434, '2655'=435, '2660'=436, '2661'=437, '2662'=438, '2701'=439, '2706'=440, '2707'=441, '2708'=442) + EdgeKeyIDMap('2164'=443, '2168'=444, '2169'=445, '2170'=446, '2189'=447, '2199'=448, '2200'=449, '2201'=450, '2202'=451, '2239'=452, '2241'=453, '2243'=454, '2244'=455, '2254'=456, '2255'=457, '2256'=458, '2258'=459, '2259'=460, '2272'=461, '2276'=462, '2465'=463, '2469'=464, '2473'=465, '2474'=466, '2476'=467, '2480'=468, '2517'=469, '2521'=470, '2525'=471, '2526'=472, '2528'=473, '2532'=474, '2573'=475, '2577'=476, '2578'=477, '2580'=478, '2632'=479, '2633'=480, '2634'=481, '2636'=482, '2637'=483, '2676'=484, '2677'=485, '2678'=486, '2679'=487, '2680'=488, '2682'=489, '2683'=490, '2722'=491, '2723'=492, '2724'=493, '2725'=494, '2726'=495, '2728'=496, '2729'=497, '4748'=498, '4749'=499, '4750'=500, '4751'=501, '4752'=502) + VertexKeyIDMap('2193'=503, '2194'=504, '2203'=505, '2204'=506, '2205'=507, '2206'=508, '2248'=509, '2260'=510, '2261'=511, '2488'=512, '2489'=513, '2492'=514, '2493'=515, '2494'=516, '2495'=517, '2540'=518, '2541'=519, '2544'=520, '2545'=521, '2546'=522, '2547'=523, '2592'=524, '2593'=525, '2596'=526, '2597'=527, '2598'=528, '2599'=529, '2644'=530, '2647'=531, '2648'=532, '2690'=533, '2693'=534, '2694'=535, '2736'=536, '2739'=537, '2740'=538) + BodyKeyIDMap('111'=415) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=540 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=415 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box6' + Flags='' + Color='(128 128 64)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=569 + GroupId=-1 + MaterialValue='"aluminum"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=570 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=571 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=11 + NumWires=0 + NumLoops=12 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=571 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('2051'=572, '2053'=573, '2054'=574, '2055'=575, '2056'=576, '2079'=577, '2080'=578, '2081'=579, '2082'=580, '2105'=581, '2106'=582) + EdgeKeyIDMap('2057'=583, '2058'=584, '2059'=585, '2060'=586, '2065'=587, '2066'=588, '2067'=589, '2068'=590, '2083'=591, '2084'=592, '2085'=593, '2086'=594, '2087'=595, '2088'=596, '2089'=597, '2090'=598, '2091'=599, '2092'=600, '2093'=601, '2094'=602, '2115'=603, '2116'=604, '2117'=605, '2118'=606) + VertexKeyIDMap('2069'=607, '2070'=608, '2071'=609, '2072'=610, '2095'=611, '2096'=612, '2097'=613, '2098'=614, '2099'=615, '2100'=616, '2101'=617, '2102'=618, '2127'=619, '2128'=620, '2129'=621, '2130'=622) + BodyKeyIDMap('2050'=571) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='SubRegion' + Flags='Wireframe#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='nan ' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='SubRegion' + ID=1092 + ReferenceCoordSystemID=1 + $begin 'SubRegionParameters' + KernelVersion=23 + '+XPaddingType'='Absolute Offset' + '+XPadding'='5.5555555555556cm' + '-XPaddingType'='Absolute Offset' + '-XPadding'='5.5555555555556cm' + '+YPaddingType'='Absolute Offset' + '+YPadding'='5.5555555555556cm' + '-YPaddingType'='Absolute Offset' + '-YPadding'='5.5555555555556cm' + '+ZPaddingType'='Absolute Offset' + '+ZPadding'='5.5555555555556cm' + '-ZPaddingType'='Absolute Offset' + '-ZPadding'='1cm' + $begin 'BoxForVirtualObjects' + LowPoint[3: -24, -21, -6.50521303491303e-17] + HighPoint[3: 24, 21, 0.4024] + $end 'BoxForVirtualObjects' + SubRegionParts[18: 289, 90, 10, 117, 37, 127, 47, 57, 153, 163, 194, 374, 221, 231, 571, 262, 299, 415] + SubRegionSubmodels[0:] + $end 'SubRegionParameters' + ParentPartID=1093 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=1093 + StartFaceID=1094 + StartEdgeID=1100 + StartVertexID=1112 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=1037 + StartFaceID=1038 + StartEdgeID=1044 + StartVertexID=1056 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin '01_metal_only_new' + '01_metal_only_new'(-1, 1) + $end '01_metal_only_new' + $begin '02_patch_new' + '02_patch_new'(-1, 1) + $end '02_patch_new' + $begin '03_radome_side_new' + '03_radome_side_new'(-1, 1) + $end '03_radome_side_new' + $begin '04_radome_corner_new' + '04_radome_corner_new'(-1, 1) + $end '04_radome_corner_new' + $begin 'ab_cs' + ab_cs(-1) + $end 'ab_cs' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'aluminum_base' + aluminum_base(-1, 1) + $end 'aluminum_base' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'antenna_' + antenna_(1) + $end 'antenna_' + $begin 'box' + box(1, 2, 6) + $end 'box' + $begin 'box1_' + box1_(1, 2, 3) + $end 'box1_' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'ground_' + ground_(1, 2, 3) + $end 'ground_' + $begin 'model' + model(-1) + $end 'model' + $begin 'nearfield_cs' + nearfield_cs(-1) + $end 'nearfield_cs' + $begin 'port' + port(1) + $end 'port' + $begin 'radome' + radome(-1, 1) + $end 'radome' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $begin 'sub_' + sub_(1, 2, 3) + $end 'sub_' + $begin 'subregion' + subregion(-1) + $end 'subregion' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=5 + DependencyObject('GeometryOperation', 1199) + DependencyObject('GeometryBodyOperation', 8) + DependencyObject('GeometryBodyOperation', 9) + DependencyObject('GeometryBodyOperation', 7) + DependencyObject('GeometryBodyOperation', 6) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=6 + DependencyObject('GeometryOperation', 1204) + DependencyObject('GeometryBodyOperation', 86) + DependencyObject('GeometryBodyOperation', 87) + DependencyObject('GeometryBodyOperation', 85) + DependencyObject('GeometryBodyOperation', 88) + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=4 + DependencyObject('GeometryOperation', 1210) + DependencyObject('GeometryBodyOperation', 193) + DependencyObject('GeometryBodyOperation', 192) + DependencyObject('GeometryBodyOperation', 191) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=4 + DependencyObject('GeometryOperation', 1214) + DependencyObject('GeometryBodyOperation', 260) + DependencyObject('GeometryBodyOperation', 261) + DependencyObject('GeometryBodyOperation', 259) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 539) + DependencyObject('GeometryBodyOperation', 414) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 6) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1203) + DependencyObject('GeometryBodyOperation', 6) + DependencyObject('GeometryOperation', 1199) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 7) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1202) + DependencyObject('GeometryBodyOperation', 7) + DependencyObject('GeometryOperation', 1199) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 8) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1200) + DependencyObject('GeometryBodyOperation', 8) + DependencyObject('GeometryOperation', 1199) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 9) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1201) + DependencyObject('GeometryBodyOperation', 9) + DependencyObject('GeometryOperation', 1199) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 85) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1207) + DependencyObject('GeometryBodyOperation', 85) + DependencyObject('GeometryOperation', 1204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 86) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1205) + DependencyObject('GeometryBodyOperation', 86) + DependencyObject('GeometryOperation', 1204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 87) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1206) + DependencyObject('GeometryBodyOperation', 87) + DependencyObject('GeometryOperation', 1204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 88) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1208) + DependencyObject('GeometryBodyOperation', 88) + DependencyObject('GeometryOperation', 1204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1209) + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('GeometryOperation', 1204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 191) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1213) + DependencyObject('GeometryBodyOperation', 191) + DependencyObject('GeometryOperation', 1210) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 192) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1212) + DependencyObject('GeometryBodyOperation', 192) + DependencyObject('GeometryOperation', 1210) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 193) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1211) + DependencyObject('GeometryBodyOperation', 193) + DependencyObject('GeometryOperation', 1210) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 259) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1217) + DependencyObject('GeometryBodyOperation', 259) + DependencyObject('GeometryOperation', 1214) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 260) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1215) + DependencyObject('GeometryBodyOperation', 260) + DependencyObject('GeometryOperation', 1214) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 261) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1216) + DependencyObject('GeometryBodyOperation', 261) + DependencyObject('GeometryOperation', 1214) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 373) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 383) + DependencyObject('GeometryBodyOperation', 373) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 414) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 540) + DependencyObject('GeometryBodyOperation', 414) + DependencyObject('GeometryOperation', 539) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 570) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 1092) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 651) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 1032) + DependencyObject('CoordinateSystem', 651) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 1120) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[7: 37, 47, 117, 127, 221, 289, 1093] + $begin 'AssignedFace' + kID=60 + $begin 'FaceData' + ParentObjectID=57 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-9, -9, 0.2012) + $begin 'FcTolVts' + TolVt(-6, -9, 0.4024, 5e-07) + TolVt(-12, -9, 0.4024, 5e-07) + TolVt(-12, -9, 0, 5e-07) + TolVt(-6, -9, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=61 + $begin 'FaceData' + ParentObjectID=57 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-12, -6, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -9, 0.4024, 5e-07) + TolVt(-12, -3, 0.4024, 5e-07) + TolVt(-12, -3, 0, 5e-07) + TolVt(-12, -9, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=62 + $begin 'FaceData' + ParentObjectID=57 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-9, -3, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -3, 0.4024, 5e-07) + TolVt(-6, -3, 0.4024, 5e-07) + TolVt(-6, -3, 0, 5e-07) + TolVt(-12, -3, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=63 + $begin 'FaceData' + ParentObjectID=57 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-6, -6, 0.2012) + $begin 'FcTolVts' + TolVt(-6, -3, 0, 5e-07) + TolVt(-6, -3, 0.4024, 5e-07) + TolVt(-6, -9, 0.4024, 5e-07) + TolVt(-6, -9, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=154 + $begin 'FaceData' + ParentObjectID=153 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.0512063999999996 + FcUVMid(-15, -9.155, 0.0762) + $begin 'FcTolVts' + TolVt(-15.168, -9.155, 0, 5e-07) + TolVt(-15.168, -9.155, 0.1524, 5e-07) + TolVt(-14.832, -9.155, 0.1524, 5e-07) + TolVt(-14.832, -9.155, -6.17221986770266e-17, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=166 + $begin 'FaceData' + ParentObjectID=163 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-15, -15, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -15, 0.4024, 5e-07) + TolVt(-18, -15, 0.4024, 5e-07) + TolVt(-18, -15, 0, 5e-07) + TolVt(-12, -15, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=167 + $begin 'FaceData' + ParentObjectID=163 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-18, -12, 0.2012) + $begin 'FcTolVts' + TolVt(-18, -15, 0.4024, 5e-07) + TolVt(-18, -9, 0.4024, 5e-07) + TolVt(-18, -9, 0, 5e-07) + TolVt(-18, -15, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=168 + $begin 'FaceData' + ParentObjectID=163 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-15, -9, 0.2012) + $begin 'FcTolVts' + TolVt(-18, -9, 0.4024, 5e-07) + TolVt(-12, -9, 0.4024, 5e-07) + TolVt(-12, -9, 0, 5e-07) + TolVt(-18, -9, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=169 + $begin 'FaceData' + ParentObjectID=163 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-12, -12, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -9, 0, 5e-07) + TolVt(-12, -9, 0.4024, 5e-07) + TolVt(-12, -15, 0.4024, 5e-07) + TolVt(-12, -15, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=234 + $begin 'FaceData' + ParentObjectID=231 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-3, 3, 0.2012) + $begin 'FcTolVts' + TolVt(0, 3, 0.4024, 5e-07) + TolVt(-6, 3, 0.4024, 5e-07) + TolVt(-6, 3, 0, 5e-07) + TolVt(0, 3, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=235 + $begin 'FaceData' + ParentObjectID=231 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-6, 6, 0.2012) + $begin 'FcTolVts' + TolVt(-6, 3, 0.4024, 5e-07) + TolVt(-6, 9, 0.4024, 5e-07) + TolVt(-6, 9, 0, 5e-07) + TolVt(-6, 3, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=236 + $begin 'FaceData' + ParentObjectID=231 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-3, 9, 0.2012) + $begin 'FcTolVts' + TolVt(-6, 9, 0.4024, 5e-07) + TolVt(0, 9, 0.4024, 5e-07) + TolVt(0, 9, 0, 5e-07) + TolVt(-6, 9, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=237 + $begin 'FaceData' + ParentObjectID=231 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(0, 6, 0.2012) + $begin 'FcTolVts' + TolVt(0, 9, 0, 5e-07) + TolVt(0, 9, 0.4024, 5e-07) + TolVt(0, 3, 0.4024, 5e-07) + TolVt(0, 3, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=302 + $begin 'FaceData' + ParentObjectID=299 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-15, -21, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -21, 0.4024, 5e-07) + TolVt(-18, -21, 0.4024, 5e-07) + TolVt(-18, -21, 0, 5e-07) + TolVt(-12, -21, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=303 + $begin 'FaceData' + ParentObjectID=299 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-18, -18, 0.2012) + $begin 'FcTolVts' + TolVt(-18, -21, 0.4024, 5e-07) + TolVt(-18, -15, 0.4024, 5e-07) + TolVt(-18, -15, 0, 5e-07) + TolVt(-18, -21, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=304 + $begin 'FaceData' + ParentObjectID=299 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-15, -15, 0.2012) + $begin 'FcTolVts' + TolVt(-18, -15, 0.4024, 5e-07) + TolVt(-12, -15, 0.4024, 5e-07) + TolVt(-12, -15, 0, 5e-07) + TolVt(-18, -15, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=305 + $begin 'FaceData' + ParentObjectID=299 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.4144 + FcUVMid(-12, -18, 0.2012) + $begin 'FcTolVts' + TolVt(-12, -15, 0, 5e-07) + TolVt(-12, -15, 0.4024, 5e-07) + TolVt(-12, -21, 0.4024, 5e-07) + TolVt(-12, -21, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=156 + $begin 'EdgeData' + ParentObjectID=153 + ParentFaces[1: 154] + $begin 'EdgeGeomTopol' + EdgeFaces(154) + $begin 'EdTolVts' + TolVt(-14.832, -9.155, 0.1524, 5e-07) + TolVt(-15.168, -9.155, 0.1524, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-15, -9.155, 0.1524) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=158 + $begin 'EdgeData' + ParentObjectID=153 + ParentFaces[1: 154] + $begin 'EdgeGeomTopol' + EdgeFaces(154) + $begin 'EdTolVts' + TolVt(-14.832, -9.155, -6.17221986770266e-17, 5e-07) + TolVt(-15.168, -9.155, 0, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-15, -9.155, -3.08610993385135e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=78 + $begin 'VertexData' + ParentObjectID=57 + ParentEdges[3: 66, 65, 74] + TolVt(-12, -3, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=79 + $begin 'VertexData' + ParentObjectID=57 + ParentEdges[3: 67, 66, 72] + TolVt(-12, -9, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=82 + $begin 'VertexData' + ParentObjectID=57 + ParentEdges[3: 72, 70, 69] + TolVt(-12, -9, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=83 + $begin 'VertexData' + ParentObjectID=57 + ParentEdges[3: 74, 71, 70] + TolVt(-12, -3, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=184 + $begin 'VertexData' + ParentObjectID=163 + ParentEdges[3: 174, 173, 170] + TolVt(-18, -9, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=185 + $begin 'VertexData' + ParentObjectID=163 + ParentEdges[3: 175, 174, 180] + TolVt(-18, -15, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=188 + $begin 'VertexData' + ParentObjectID=163 + ParentEdges[3: 180, 178, 177] + TolVt(-18, -15, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=189 + $begin 'VertexData' + ParentObjectID=163 + ParentEdges[3: 170, 179, 178] + TolVt(-18, -9, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=252 + $begin 'VertexData' + ParentObjectID=231 + ParentEdges[3: 240, 239, 248] + TolVt(-6, 9, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=253 + $begin 'VertexData' + ParentObjectID=231 + ParentEdges[3: 241, 240, 246] + TolVt(-6, 3, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=256 + $begin 'VertexData' + ParentObjectID=231 + ParentEdges[3: 246, 244, 243] + TolVt(-6, 3, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=257 + $begin 'VertexData' + ParentObjectID=231 + ParentEdges[3: 248, 245, 244] + TolVt(-6, 9, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=320 + $begin 'VertexData' + ParentObjectID=299 + ParentEdges[3: 308, 307, 316] + TolVt(-18, -15, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=321 + $begin 'VertexData' + ParentObjectID=299 + ParentEdges[3: 309, 308, 314] + TolVt(-18, -21, 0.4024, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=324 + $begin 'VertexData' + ParentObjectID=299 + ParentEdges[3: 314, 312, 311] + TolVt(-18, -21, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=325 + $begin 'VertexData' + ParentObjectID=299 + ParentEdges[3: 316, 313, 312] + TolVt(-18, -15, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + GroupByMaterial=true + GroupSheetByMaterial=true + GroupCompByDefID=true + DoNotOrganizeUnderGroup=false + DoNotOrganizeUnderComponent=false + OrganizeLightweight=false + ShowGroup=true + $begin 'LastUserInputs' + $end 'LastUserInputs' + $end 'ModelSetup' + $begin '3DComponent' + $begin 'ComponentDefinition' + ID=5 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '5' + $end '5' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '5' + '1'=0 + '5'=1 + '7'=3 + '8'=4 + $end '5' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '5' + '6'=10 + '34'=37 + '238'=47 + '250'=57 + $end '5' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '5' + $end '5' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '5' + $end '5' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '5' + $end '5' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '5' + $end '5' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(5, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '5' + $end '5' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '5' + $end '5' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=84 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '84' + '2'=5 + $end '84' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $begin '1' + ID=2 + BoundType='Lumped Port' + IsComponent=false + Faces(81) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=73 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-6' + YPosition='-9' + ZPosition='0.2012' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=75 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-6' + YPosition='-3' + ZPosition='0.2012' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '84' + '0'=6 + '1'=7 + '3'=8 + '4'=9 + $end '84' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=3 + BoundType='Lattice Pair' + IsComponent=false + Faces(86, 88) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=105 + ParentIDs(93, 92, 98) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=108 + ParentIDs(98, 96, 95) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=4 + BoundType='Lattice Pair' + IsComponent=false + Faces(87, 89) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=104 + ParentIDs(92, 91, 100) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=109 + ParentIDs(100, 97, 106) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-12' + YPosition='-15' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '84' + '6'=90 + '34'=117 + '46'=127 + '71'=153 + '83'=163 + '139'=-1 + '151'=-1 + $end '84' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 71, '22cel', 83, '22cel', 139, '22cel', 151, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '84' + $end '84' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '84' + $end '84' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '84' + $end '84' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '84' + $end '84' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(84, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '84' + $end '84' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '84' + $end '84' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=190 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '190' + $end '190' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '190' + '1'=11 + '7'=13 + '8'=14 + $end '190' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '190' + '6'=194 + '34'=221 + '250'=231 + $end '190' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '190' + $end '190' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '190' + $end '190' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '190' + $end '190' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '190' + $end '190' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(190, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '190' + $end '190' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '190' + $end '190' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=258 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '258' + $end '258' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '258' + '0'=15 + '2'=17 + '3'=18 + $end '258' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=2 + BoundType='Lattice Pair' + IsComponent=false + Faces(49, 51) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=68 + ParentIDs(56, 55, 61) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=71 + ParentIDs(61, 59, 58) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=3 + BoundType='Lattice Pair' + IsComponent=false + Faces(50, 52) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=67 + ParentIDs(55, 54, 63) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=72 + ParentIDs(63, 60, 59) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '258' + '6'=262 + '34'=289 + '46'=299 + $end '258' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '258' + $end '258' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '258' + $end '258' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '258' + $end '258' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '258' + $end '258' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(258, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '258' + $end '258' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '258' + $end '258' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=413 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '413' + $end '413' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '413' + $end '413' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '413' + '111'=415 + $end '413' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + Temperatures(111, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '413' + $end '413' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '413' + $end '413' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '413' + $end '413' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '413' + $end '413' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(413, false) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '413' + $end '413' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '413' + $end '413' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=569 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '569' + $end '569' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '569' + $end '569' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '569' + '-1'=-1 + '15'=-1 + '42'=-1 + '52'=-1 + '62'=-1 + '123'=-1 + '150'=-1 + '160'=-1 + '186'=-1 + '196'=-1 + '394'=-1 + '421'=-1 + '431'=-1 + '1200'=-1 + '1227'=-1 + '1237'=-1 + '1388'=-1 + '2050'=571 + '2426'=-1 + $end '569' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + Temperatures(-1, '22cel', 15, '22cel', 42, '22cel', 52, '22cel', 62, '22cel', 123, '22cel', 150, '22cel', 160, '22cel', 186, '22cel', 196, '22cel', 394, '22cel', 421, '22cel', 431, '22cel', 1200, '22cel', 1227, '22cel', 1237, '22cel', 1388, '22cel', 2050, '22cel', 2426, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '569' + $end '569' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '569' + '2050'=571 + $end '569' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + DCThicknessObjects(2050, '""') + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '569' + $end '569' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '569' + $end '569' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(569, false) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '569' + $end '569' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '569' + $end '569' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'NativeComponentVisualization' + $end 'NativeComponentVisualization' + $end '3DComponent' + $begin 'BoundarySetup' + $begin 'GlobalBoundData' + PortImpedance='1' + GlobalMaterialEnv='vacuum' + UseTotalFieldFormulation=false + HybridRegionCouplingType='TwoWayCoupled' + 'Current Source Conformance'='Auto' + 'Thin Sources'=false + $end 'GlobalBoundData' + $begin 'Boundaries' + NextUniqueID=30 + MoveBackwards=false + $begin '01_Metal_Only_NEW1_groundMetal' + ID=0 + BoundType='Perfect E' + IsComponent=true + Objects(37) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only_NEW1_groundMetal' + $begin '01_Metal_Only_NEW1_Antenna' + ID=1 + BoundType='Perfect E' + IsComponent=true + Objects(47) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only_NEW1_Antenna' + $begin '01_Metal_Only_NEW1_LatticePair1' + ID=3 + BoundType='Lattice Pair' + IsComponent=true + Faces(60, 62) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=79 + ParentIDs(67, 66, 72) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-12' + YPosition='-9' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=82 + ParentIDs(72, 70, 69) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-12' + YPosition='-9' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only_NEW1_LatticePair1' + $begin '01_Metal_Only_NEW1_LatticePair2' + ID=4 + BoundType='Lattice Pair' + IsComponent=true + Faces(61, 63) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=78 + ParentIDs(66, 65, 74) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-12' + YPosition='-3' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=83 + ParentIDs(74, 71, 70) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-12' + YPosition='-3' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only_NEW1_LatticePair2' + $begin '02_Patch_NEW1_antennaMetal' + ID=6 + BoundType='Perfect E' + IsComponent=true + Objects(127) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch_NEW1_antennaMetal' + $begin '02_Patch_NEW1_groundMetal' + ID=7 + BoundType='Perfect E' + IsComponent=true + Objects(117) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch_NEW1_groundMetal' + $begin '02_Patch_NEW1_LatticePair1' + ID=8 + BoundType='Lattice Pair' + IsComponent=true + Faces(166, 168) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=185 + ParentIDs(175, 174, 180) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-15' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=188 + ParentIDs(180, 178, 177) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-15' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch_NEW1_LatticePair1' + $begin '02_Patch_NEW1_LatticePair2' + ID=9 + BoundType='Lattice Pair' + IsComponent=true + Faces(167, 169) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=184 + ParentIDs(174, 173, 170) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-9' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=189 + ParentIDs(170, 179, 178) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-9' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch_NEW1_LatticePair2' + $begin '03_Radome_Side_New1_groundMetal' + ID=11 + BoundType='Perfect E' + IsComponent=true + Objects(221) + ParentBndID=-1 + InfGroundPlane=false + $end '03_Radome_Side_New1_groundMetal' + $begin '03_Radome_Side_New1_LatticePair1' + ID=13 + BoundType='Lattice Pair' + IsComponent=true + Faces(234, 236) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=253 + ParentIDs(241, 240, 246) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-6' + YPosition='3' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + ParentIDs(246, 244, 243) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-6' + YPosition='3' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side_New1_LatticePair1' + $begin '03_Radome_Side_New1_LatticePair2' + ID=14 + BoundType='Lattice Pair' + IsComponent=true + Faces(235, 237) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=252 + ParentIDs(240, 239, 248) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-6' + YPosition='9' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=257 + ParentIDs(248, 245, 244) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-6' + YPosition='9' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side_New1_LatticePair2' + $begin '04_Radome_Corner_NEW1_groundMetal' + ID=15 + BoundType='Perfect E' + IsComponent=true + Objects(289) + ParentBndID=-1 + InfGroundPlane=false + $end '04_Radome_Corner_NEW1_groundMetal' + $begin '04_Radome_Corner_NEW1_LatticePair1' + ID=17 + BoundType='Lattice Pair' + IsComponent=true + Faces(302, 304) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=321 + ParentIDs(309, 308, 314) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-21' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=324 + ParentIDs(314, 312, 311) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-21' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '04_Radome_Corner_NEW1_LatticePair1' + $begin '04_Radome_Corner_NEW1_LatticePair2' + ID=18 + BoundType='Lattice Pair' + IsComponent=true + Faces(303, 305) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=320 + ParentIDs(308, 307, 316) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-15' + ZPosition='0.4024' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=325 + ParentIDs(316, 313, 312) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-18' + YPosition='-15' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '04_Radome_Corner_NEW1_LatticePair2' + $begin 'Rad1' + ID=29 + BoundType='Radiation' + IsComponent=false + Objects(1093) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin '02_Patch_NEW1_1' + ID=5 + BoundType='Lumped Port' + IsComponent=true + Faces(154) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=156 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-15' + YPosition='-9.155' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=158 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-15' + YPosition='-9.155' + ZPosition='-3.08610993385135e-17' + $end 'GeometryPosition' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '02_Patch_NEW1_1' + $end 'Boundaries' + $begin 'ProductSpecificData' + $begin 'SBRWedgeSettings' + MaxWedgeAngle='135deg' + IncludeSheetEdges=true + ApplySourceDistFilter=false + ApplyBoxFilter=false + $end 'SBRWedgeSettings' + $begin 'SBRTxRxSettings' + $end 'SBRTxRxSettings' + $begin 'SBRCreepingWaveSettings' + CWRaySampleDensity=10 + CWRayCutoffDb=40 + CWCurvatureSensitivity=50 + CWAngularRayInterval=2 + $end 'SBRCreepingWaveSettings' + $begin 'SBRBlockageSettings' + $end 'SBRBlockageSettings' + $begin 'PMLData' + $begin 'PMLGroups' + $end 'PMLGroups' + $end 'PMLData' + $begin 'SortOrder' + Port[1: -1] + Terminal[1: -1] + $end 'SortOrder' + 'Phase Center Mode'='PhaseCenterPerPort' + $begin 'Phase Center Per Port' + $begin '02_Patch_NEW1_1' + Port=5 + 'Coordinate System'=-2 + $end '02_Patch_NEW1_1' + $end 'Phase Center Per Port' + $end 'ProductSpecificData' + $end 'BoundarySetup' + $begin 'ArrayDefinition' + NextUniqueID=0 + MoveBackwards=false + $begin 'ArrayObject' + ID=0 + Type='3D Component' + Name='Array' + UseAirObjects=true + RowPrimaryBnd=3 + ColumnPrimaryBnd=4 + RowDimension=7 + ColumnDimension=8 + Visible=true + ShowCellNumber=true + RenderType=0 + Padding=0 + Colors(190, 33023, 258, 4227072) + ComponentMap('4'=258, '3'=190, '1'=5, '2'=84) + $begin 'Cells' + m=7 + n=8 + $begin 'r0' + c(3) + c(4) + c(4) + c(4) + c(4) + c(4) + c(4) + c(3) + $end 'r0' + $begin 'r1' + c(4) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(4) + $end 'r1' + $begin 'r2' + c(4) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(4) + $end 'r2' + $begin 'r3' + c(4) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(4) + $end 'r3' + $begin 'r4' + c(4) + c(2) + c(1) + c(3) + c(1) + c(1) + c(2) + c(4) + $end 'r4' + $begin 'r5' + c(4) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(4) + $end 'r5' + $begin 'r6' + c(4) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(4) + $end 'r6' + $end 'Cells' + $begin 'Active' + m=7 + n=8 + $begin 'r0' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(false) + c(false) + $end 'r0' + $begin 'r1' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(false) + $end 'r1' + $begin 'r2' + c(true) + c(true) + c(false) + c(false) + c(false) + c(false) + c(true) + c(false) + $end 'r2' + $begin 'r3' + c(false) + c(true) + c(false) + c(false) + c(false) + c(false) + c(true) + c(false) + $end 'r3' + $begin 'r4' + c(false) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(false) + $end 'r4' + $begin 'r5' + c(false) + c(false) + c(false) + c(true) + c(true) + c(true) + c(false) + c(false) + $end 'r5' + $begin 'r6' + c(false) + c(false) + c(false) + c(false) + c(false) + c(false) + c(false) + c(false) + $end 'r6' + $end 'Active' + $begin 'Rotation' + m=7 + n=8 + $begin 'r0' + c(1) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r0' + $begin 'r1' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r1' + $begin 'r2' + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r2' + $begin 'r3' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r3' + $begin 'r4' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r4' + $begin 'r5' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r5' + $begin 'r6' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r6' + $end 'Rotation' + $begin 'PostProcessingCells' + OneCell(5, '3', '5') + OneCell(84, '3', '2') + OneCell(190, '1', '1') + OneCell(258, '4', '1') + $end 'PostProcessingCells' + ReferenceCSID=1 + $end 'ArrayObject' + $begin 'SizingVariable' + EnableSizingVariable=false + UseAbove=true + ForAVector='' + ForBVector='' + $end 'SizingVariable' + $end 'ArrayDefinition' + $begin 'MeshSetup' + $begin 'MeshSettings' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshSettings' + $begin 'MeshOperations' + NextUniqueID=0 + MoveBackwards=false + $end 'MeshOperations' + $end 'MeshSetup' + $begin 'AnalysisSetup' + $begin 'HfssGlobalData' + NextUniqueID=0 + MoveBackwards=false + $end 'HfssGlobalData' + $begin 'SolveSetups' + NextUniqueID=3 + MoveBackwards=false + $begin 'Setup1' + ID=0 + SetupType='HfssDriven' + SolveType='Single' + Frequency='1.8GHz' + MaxDeltaS=0.02 + UseMatrixConv=false + MaximumPasses=20 + MinimumPasses=1 + MinimumConvergedPasses=1 + PercentRefinement=30 + SkipArraySolveDuringAdaptivePasses=false + IsEnabled=true + $begin 'MeshLink' + ImportMesh=false + $end 'MeshLink' + BasisOrder=1 + DoLambdaRefine=true + DoMaterialLambda=true + SetLambdaTarget=false + Target=0.3333 + UseMaxTetIncrease=false + PortAccuracy=2 + UseABCOnPort=false + SetPortMinMaxTri=false + PortMinTri=100 + PortMaxTri=500 + DrivenSolverType='Domain Decomposition' + IterativeResidual=1e-06 + DDMSolverResidual=0.0001 + EnhancedLowFreqAccuracy=false + SaveRadFieldsOnly=true + SaveAnyFields=true + IESolverType='Auto' + LambdaTargetForIESolver=0.15 + UseDefaultLambdaTgtForIESolver=true + 'IE Solver Accuracy'='Balanced' + InfiniteSphereSetup=33 + MaxPass=10 + MinPass=1 + MinConvPass=1 + PerError=1 + PerRefine=30 + $begin 'Sweeps' + NextUniqueID=0 + MoveBackwards=false + $end 'Sweeps' + $end 'Setup1' + $end 'SolveSetups' + $end 'AnalysisSetup' + $begin 'Optimetrics' + $begin 'OptimetricsSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'OptimetricsSetups' + $end 'Optimetrics' + $begin 'Solutions' + FieldType='NoIncidentWave' + IncludePortPostProcessing=false + UseSpecifiedIncidentPower=false + SourceEntry(ID=5, Index=0, Terminal=false, Terminated=false, Magnitude='1W', Phase='0deg') + SourceEntry(ID=5, Index=1, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=2, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=3, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=4, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=5, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=6, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=7, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=8, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=9, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=10, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=11, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=12, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=13, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=14, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=15, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=16, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=17, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=18, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + SourceEntry(ID=5, Index=19, Terminal=false, Terminated=false, Magnitude='0W', Phase='0deg') + $begin 'Contexts' + NextUniqueID=1 + MoveBackwards=false + $end 'Contexts' + $end 'Solutions' + $begin 'PortFieldDisplay' + $begin 'PortFieldDisplay' + ScaleFactor=5 + $end 'PortFieldDisplay' + $end 'PortFieldDisplay' + $begin 'FieldsReporter' + $begin 'FieldsCalculator' + Line_Discretization=1000 + $begin 'SurfaceMeshSummary' + SolutionName='' + Variation='' + $begin 'MeshRowItems' + $end 'MeshRowItems' + $end 'SurfaceMeshSummary' + $end 'FieldsCalculator' + $begin 'PlotDefaults' + Default_SolutionId=23 + Default_PlotFolder='Automatic' + $end 'PlotDefaults' + $begin 'FieldsPlotManagerID' + NextUniqueID=3 + MoveBackwards=false + NumQuantityType=0 + NumPlots=0 + $end 'FieldsPlotManagerID' + $begin 'Report3dInGeomWnd' + Report3dNum=0 + $end 'Report3dInGeomWnd' + $begin 'Report2dInGeomWnd' + Report2dNum=0 + $end 'Report2dInGeomWnd' + $begin 'AntennaParametersInGeomWnd' + AntennaParametersNum=0 + $end 'AntennaParametersInGeomWnd' + AntennaParametersPlotTablesOrder() + $end 'FieldsReporter' + $begin 'RadField' + $begin 'FarFieldSetups' + NextUniqueID=70 + MoveBackwards=false + $begin '3D' + Type='Infinite Sphere' + ID=33 + VersionID=69 + UseCustomRadiationSurface=false + CSDefinition='Theta-Phi' + Polarization='Linear' + ThetaStart='0deg' + ThetaStop='180deg' + ThetaStep='2deg' + PhiStart='0deg' + PhiStop='360deg' + PhiStep='2deg' + UseLocalCS=false + $end '3D' + $end 'FarFieldSetups' + $begin 'ArraySetup' + UseOption='NoArray' + $begin 'RegularArray' + NumUCells='10' + NumVCells='10' + CellUDist='10cm' + CellVDist='10cm' + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + FirstCellPosX='0cm' + FirstCellPosY='0cm' + FirstCellPosZ='0cm' + Behavior='UseSlaveSettings' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'RegularArray' + $begin 'CustomArray' + NumCells=0 + $begin 'Cell' + $end 'Cell' + $end 'CustomArray' + $begin 'ParametricArray' + DesignFrequency='1GHz' + LayoutType=1 + CenterCellX='0mm' + CenterCellY='0mm' + CenterCellZ='0mm' + SpecifyDesignInWavelength=true + WidthSpacing='14.9896229mm' + WidthSpacingInWavelength='0.05' + Width='119.9169832mm' + WidthInWavelength='0.4' + LengthSpacing='14.9896229mm' + LengthSpacingInWavelength='0.05' + Length='89.9377374mm' + LengthInWavelength='0.3' + SymmetryType=0 + StaggerAngle='0deg' + StaggerType=0 + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + WeightType=3 + EdgeTaperX_db='-200' + CosineExp='1' + DifferentialType=0 + Behavior='UseScanAngle' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'ParametricArray' + $end 'ArraySetup' + $begin 'NearFieldSetups' + NextUniqueID=70 + MoveBackwards=false + $end 'NearFieldSetups' + RadFieldComputationVersion=1.8 + RadfieldHeaderFile='RAD577F206201691448868334.tmp' + RadPowerMethod=0 + $end 'RadField' + $begin 'SolutionManager' + $begin 'SimSetup' + TypeName='BaseSetup' + ID=21 + Name='Setup1' + $begin 'Solution' + ID=22 + Name='AdaptivePass' + $begin 'SimDataExtractor' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=23 + Name='LastAdaptive' + $begin 'SimDataExtractor' + SimValue('GainTotal', 1, 90, true, SimValueID=5069, 0, 0, 2, 0, false, false, 33, 1, 0, 1, 1, '', 0, 0) + $begin 'Sweeps' + $begin 'Sweep' + Variable='Freq' + Column='1800MHz' + Units='MHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'Sweep' + Variable='airbox_Z' + Column='0.25cm' + Units='cm' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='ScanFrequency' + RegularSweep=1 + Units='Hz' + Minimum=1800000000 + Maximum=1800000000 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAngleTheta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAnglePhi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftA' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftB' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanMag1' + RegularSweep=1 + Units='W' + Minimum=1 + Maximum=1 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhase1' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $end 'SimSetup' + $begin 'Version ID Map' + V=5067 + $begin 'Setup' + N='Setup1' + V=5067 + Soln(N='AdaptivePass', V=5067) + Soln(N='LastAdaptive', V=5067) + $end 'Setup' + IQM=5068 + $end 'Version ID Map' + $begin 'ID Map' + $begin 'Setup' + N='Setup1' + I=21 + Soln(N='AdaptivePass', I=22) + Soln(N='LastAdaptive', I=23) + $end 'Setup' + $end 'ID Map' + ValidationCacheHeader='HDR39A123280169779827710.tmp' + $end 'SolutionManager' + $begin 'UserDefinedSolutionMgr' + NextUniqueID=1000000 + MoveBackwards=false + $end 'UserDefinedSolutionMgr' + $begin 'DatasetSolutionMgr' + NextUniqueID=2000000 + MoveBackwards=false + $end 'DatasetSolutionMgr' + Notes=$begin_cdata$ $end_cdata$ + $begin 'AnimationSetups' + $begin 'Setup_0' + AnimationName='Animation1' + Description='Swept variable ScanAngleTheta' + SweptCategory=0 + SweptVariable='ScanAngleTheta' + SweptValues[6: '0deg', '12deg', '24deg', '36deg', '48deg', '60deg'] + UseDesignInstance=true + DesignPoint='' + IntrinsicVarVals='' + SweptContinous=true + $end 'Setup_0' + $end 'AnimationSetups' + CacheHeaderFile='HDR25A361332169822818711.tmp' + $end 'HFSSModel' + $begin 'DataInstances' + DesignEditor='TopLevel' + Refdes('0', 'U1') + $begin 'CompInstances' + $begin 'Compinst' + ID='0' + Status='Status' + CompName='array' + GatesInUse() + $begin 'Properties' + TextProp('ID', 'SRID', '', '0') + $end 'Properties' + $begin 'Parameters' + MenuProp('CoSimulator', 'OHD', '', 'DefaultNetlist', 0) + ButtonProp('CosimDefinition', 'OHD', '', '', 'Edit', 40501, ButtonPropClientData()) + $end 'Parameters' + $end 'Compinst' + $end 'CompInstances' + $begin 'Instance' + DesignEditor='array' + ID='0' + $begin 'HfssDesignInstance' + DesignInstanceID=1 + $begin 'WindowPosition' + $begin 'EditorWindow' + Circuit(Editor3d(View('View Orientation Gadget'=1, WindowPos(3, -1, -1, -8, -31, 78, 78, 987, 566), OrientationMatrix(-0.000805077841505408, -0.0332740619778633, 0.0118080796673894, 0, 0.0353069305419922, -0.000765898788813502, 0.000248869240749627, 0, 2.15503368963255e-05, 0.0118103548884392, 0.0332828052341938, 0, 1.81550920009613, 2.36691236495972, -4.81112384796143, 1, 0, -0.936787247657776, 4.55358505249023, 1.30553615093231, 3.39342403411865, -3.0988130569458, 12.5480585098267), Drawings[27: 'sub', 'Ground', 'antenna', 'Box1', 'sub_1', 'Ground_1', 'antenna_1', 'port1', 'Box1_1', 'sub_2', 'Ground_2', 'Box1_2', 'sub_3', 'Ground_3', 'Box1_3', 'Rectangle1', 'Box2', 'Box6', 'SubRegion', '01_Metal_Only_NEW1', '02_Patch_NEW1', '03_Radome_Side_New1', '04_Radome_Corner_NEW1', 'Radome1', 'Aluminum_Base1', '', 'Array'], 'View Data'('Render Mode'=1, 'Show Ruler'=1, 'Coordinate Systems View Mode'=1, 'CS Triad View Mode'=0, 'Render Facets'=1, GridVisible=2, GridAutoAdjust=1, GridAutoExtents=1, GridType='Rect', GridStyle='Line', NumPixels=30, dXForGrid=2, dYForGrid=2, dZForGrid=2, dRForGrid=2, dThetaForGrid=10), ClipPlanes(ClipPlaneOptions(DisableWhenDrawingNewPlane=true, ForceOpqaueForUnclipped=false, ShowClipped=false, Transparency=0, HandleColor=16776960))))) + $end 'EditorWindow' + $end 'WindowPosition' + $begin 'ReportSetup' + $begin 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=20 + ReportName='Gain Plot 1' + $begin 'TraceDef' + TraceDefinitionType='TraceDefinition' + $begin 'DesignSolnDefn' + $begin 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + DesignID=0 + SolutionID=23 + $begin 'REPORT_TYPE_SIM_VALUE_CONTEXT' + ReportType=3 + SimValueContext(0, 0, 2, 0, false, false, 33, 1, 0, 1, 1, '', 0, 0) + $end 'REPORT_TYPE_SIM_VALUE_CONTEXT' + $end 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + $end 'DesignSolnDefn' + ID=19 + VersionID=103 + Name='dB(GainTotal)' + TieNameToExpr=true + $begin 'Components' + $begin 'TraceComponentDefinition' + Expr='Theta' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='dB(GainTotal)' + $end 'TraceComponentDefinition' + $end 'Components' + $begin 'ExtendedTraceInfo' + NumPoints=0 + TraceType=0 + Offset=0 + XLabel='' + SamplingPeriod='0' + SamplingPeriodOffset='0' + AutoDelay=true + DelayValue='0ps' + AutoCompCrossAmplitude=true + CrossingAmplitude='0mV' + YAxis=1 + AutoCompEyeMeasurementPoint=true + EyeMeasurementPoint='0ps' + EyePamLow() + EyePamVRef() + EyePamHigh() + EyePamNames() + EyePamStrictVRef=false + $end 'ExtendedTraceInfo' + $begin 'TraceFamiliesDisplayDefinition' + DisplayFamiliesType='DisplayAll' + $end 'TraceFamiliesDisplayDefinition' + $begin 'PointsetDefinition' + $begin 'SubsweepDefParamsContainer' + $begin '0' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Theta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '0' + $begin '1' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Phi' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(0) + ParameterType='DoubleParam' + Units='deg' + $end '1' + $begin '2' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Freq' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(1800000000) + ParameterType='DoubleParam' + Units='MHz' + $end '2' + $begin '3' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='airbox_Z' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '3' + $begin '4' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanFrequency' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '4' + $begin '5' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAngleTheta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '5' + $begin '6' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAnglePhi' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '6' + $begin '7' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanMag1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '7' + $begin '8' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanPhase1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '8' + $end 'SubsweepDefParamsContainer' + FamilyBlock() + $end 'PointsetDefinition' + DesignInstanceID=1 + $end 'TraceDef' + $end 'Gain Plot 1' + $end 'Reports' + NextUniqueID=21 + MoveBackwards=false + $begin 'NextVersID' + NextUniqueID=104 + MoveBackwards=false + $end 'NextVersID' + $end 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=20 + $begin 'Report2D' + name='Gain Plot 1' + ReportID=20 + ReportType=3 + DisplayType=1 + Title='' + Domain='' + $begin 'Migration' + MigVersion(1, 0, '2021R1 mig(1.0)') + $end 'Migration' + $begin 'Graph2DsV2' + $begin 'Graph2D' + TraceDefID=19 + Type='Continuous' + Axis='Y1' + $end 'Graph2D' + $end 'Graph2DsV2' + $begin 'PlotDisplayDataManager' + NextUniqueID=39 + MoveBackwards=false + $begin 'PlotHeaderDataSource' + CompanyName='' + ShowDesignName=true + ProjectFileName='' + $end 'PlotHeaderDataSource' + StockNameIDMap(AxisX=1, AxisY1=2, AxisY10=16, AxisY11=17, AxisY12=18, AxisY13=19, AxisY14=20, AxisY15=21, AxisY16=22, AxisY17=23, AxisY18=24, AxisY19=25, AxisY2=8, AxisY20=26, AxisY3=9, AxisY4=10, AxisY5=11, AxisY6=12, AxisY7=13, AxisY8=14, AxisY9=15, Grid=27, Header=0, Legend=5, XYHorizScroller=7) + $begin 'SourceList' + $end 'SourceList' + Version='17.0:20150830' + $begin 'DocAttributes' + $begin 'PlotAttributeStoreMap' + $end 'PlotAttributeStoreMap' + $end 'DocAttributes' + $begin 'DisplayTypeAttributes' + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=27 + $begin 'CartesianGridDescAttribute' + ShowXMinor=true + ShowYMinor=true + ShowXMajor=true + ShowYMajor=true + ShowBorder=true + $end 'CartesianGridDescAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=37 + $begin 'CurveCartesianAttribute' + YAxis='Y1' + $end 'CurveCartesianAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=37 + $begin 'CurveRenderAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=3 + LineColor(R=237, G=28, B=36) + $end 'LineRenderAttribute' + TraceType='Continuous' + SymbolType='HollowHorizontalLeftTriangle' + SymbolColor(R=155, G=93, B=112) + ShowSymbols=false + SymbolFrequency=15 + ShowArrows=false + $end 'CurveRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=0 + $begin 'HeaderRenderAttribute' + $begin 'TitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=14 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TitleFont' + $begin 'SubtitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=10 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'SubtitleFont' + $end 'HeaderRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=5 + $begin 'LegendRenderAttribute' + $begin 'LegendTableAttrib' + $begin 'TableRenderAttribute' + $begin 'TableFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableFontAttrib' + $begin 'TableTitleFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableTitleFontAttrib' + TableBorderLineWidth=1 + TableBorderLineColor=0 + TableGridLineWidth=1 + TableGridLineColor=12632256 + TableBackgroundColor=16777215 + TableHeaderBackgroundColor=14408667 + $end 'TableRenderAttribute' + $end 'LegendTableAttrib' + LegendName='' + ShowTraceName=true + ShowSolutionName=true + ShowVariationKey=true + FileNameDisplayModeInVariationKey=0 + DockMode='None' + $end 'LegendRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=1 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=2 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=8 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=9 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=10 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=11 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=12 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=13 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=14 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=15 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=16 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=17 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=18 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=19 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=20 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=21 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=22 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=23 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=24 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=25 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=26 + $begin 'LineAxisRenderAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=0 + MaxScale=1 + TickSpacing=1 + ManualUnits=false + Units='mm' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'LineAxisRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + $end 'DisplayTypeAttributes' + $begin 'DocDefaultAttributes' + $begin 'PlotAttributeStoreMap' + $end 'PlotAttributeStoreMap' + $end 'DocDefaultAttributes' + $begin 'PerViewPlotAttributeStoreMap' + $begin 'MapItem' + ItemID=-1 + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=4 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=545 + Left=1015 + Bottom=9825 + Right=9045 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=28 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=545 + Left=1015 + Bottom=9825 + Right=9045 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=35 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=75 + Left=75 + Bottom=9925 + Right=814 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=31 + $begin 'CartesianAxisLayoutAttribute' + $begin 'AxisRect' + Top=75 + Left=9045 + Bottom=9925 + Right=9925 + $end 'AxisRect' + $begin 'GridRect' + Top=545 + Left=1015 + Bottom=9825 + Right=9045 + $end 'GridRect' + AxisCollapsed=false + AxisExpandCollapseByUser=false + $end 'CartesianAxisLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=32 + $begin 'CartesianAxisLayoutAttribute' + $begin 'AxisRect' + Top=75 + Left=1015 + Bottom=545 + Right=9045 + $end 'AxisRect' + $begin 'GridRect' + Top=545 + Left=1015 + Bottom=9825 + Right=9045 + $end 'GridRect' + AxisCollapsed=false + AxisExpandCollapseByUser=false + $end 'CartesianAxisLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=4 + $begin 'CartesianCurveGroupLayoutAttribute' + X_spc=0.349065850398866 + X_fwd=3 + X_fpr=0 + Y1_spc=10 + Y1_fwd=2 + Y1_fpr=0 + $end 'CartesianCurveGroupLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=6 + $begin 'DockableOverlayLayoutAttribute' + $begin 'Dock_0' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=4850 + Left=914 + Bottom=9850 + Right=8414 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_0' + $begin 'Dock_1' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=5000 + Left=0 + Bottom=10000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_1' + $begin 'Dock_2' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=0 + Left=0 + Bottom=5000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_2' + $end 'DockableOverlayLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + PlotType=1 + $end 'MapItem' + $end 'PerViewPlotAttributeStoreMap' + IsViewAttribServer=false + ViewID=-1 + $begin 'SourceIDMap' + IDMapItem(19, 0, -1, 37) + $end 'SourceIDMap' + $begin 'TraceCharacteristicsMgr' + $end 'TraceCharacteristicsMgr' + $begin 'CartesianXMarkerManager' + RefMarkerID=-1 + CurrentMarkerID=-1 + $begin 'ReferenceCurves' + $end 'ReferenceCurves' + $end 'CartesianXMarkerManager' + $begin 'CartesianYMarkerManager' + $end 'CartesianYMarkerManager' + XAxisStackID=-1 + $begin 'AllTransSrcDwg' + $begin 'PT' + ID=1 + TransSrcDwg(-1, 0, 35, 1, 31, 2, 32, 5, 6, 27, 28, 37, 38) + $end 'PT' + $end 'AllTransSrcDwg' + $begin 'AllPtSVID' + PtID(1, -1, 4) + $end 'AllPtSVID' + $end 'PlotDisplayDataManager' + $end 'Report2D' + $end 'Gain Plot 1' + $end 'Reports' + $begin 'ReportsWindowInfoList' + $begin 'Gain Plot 1' + ReportID=20 + $begin 'WindowInfoList' + $begin 'Report2D' + $end 'Report2D' + $end 'WindowInfoList' + $end 'Gain Plot 1' + $end 'ReportsWindowInfoList' + $end 'ReportSetup' + $begin 'Properties' + $end 'Properties' + $begin 'UserDefinedDocument' + $begin 'Data' + $end 'Data' + $end 'UserDefinedDocument' + $end 'HfssDesignInstance' + $end 'Instance' + $begin 'SODInfo' + $begin 'array' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'array' + $end 'SODInfo' + $end 'DataInstances' + $begin 'WBSystemIDToDesignInstanceIDMap' + $end 'WBSystemIDToDesignInstanceIDMap' + $begin 'WBSysIDSysDetails' + $end 'WBSysIDSysDetails' + $begin 'WBConnIDConnDetails' + $end 'WBConnIDConnDetails' + $begin 'WBMaterialGuidDetails' + WBMaterialGuidMap() + $end 'WBMaterialGuidDetails' + $begin 'MinervaProjectSettingsBlk' + MinervaRemoteFilePath='' + FolderContainerString='' + $end 'MinervaProjectSettingsBlk' +$end 'AnsoftProject' +$begin 'AllReferencedFilesForProject' +$begin 'Design_0.setup/UdmDefFiles' +NumFiles= 6 +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/01_Metal_Only_NEW5.a3dcomp +BIN000000048854 +$begin 'AnsoftComponentChkSum' + ChecksumString='b6a9540558a3f710f5fe54297fae5b2b' + ChecksumHistory('7fb221808f33df6e49d8aa268055ce69') + VersionHistory('1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='01_Metal_Only_NEW' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='4:53:11 PM Aug 07, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryb4y/FH/hVXh\ +bTr/TdC/wCEw8beMPFvhn4dfDTwNHqf9lT+L/Hfi/UUsbCC4u4NPvruy8JaRpMeteJfFeo6fpesXmg+\ +DfBHiLxGmkajFo8trJ8a/syeCf2j/ix+zb+z38cdR/bg+OEnj34l/A/4T/Fa+8P6/wDDL9kvUvhO/i7\ +xl4C0DxfdaPrXhvwt+zroXiO/+Hh1nUngubHTvF+ja3LppeCz8SadfNHqkPkYnN6dDH08to4Otj8XOl\ +OtJUvYpU4RlTj78q1ajHmk6iahBzkormmoqUHP9EyPw6xWa8J4vjXM+I8t4T4foY6hl9KpmH9ozqYvE\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('patchY', 'UD', '', '4.39cm') + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('airbox_Z', 'UD', '', '10cm') + VariableProp('subY', 'UD', '', '6cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subX', 'UD', '', '6cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=19 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=305 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=36 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=237 + ReferenceCoordSystemID=233 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='0cm' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=238 + StartFaceID=-1 + StartEdgeID=239 + StartVertexID=243 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=247 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=238 + $end 'LocalOperationParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=248 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=248 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=237 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+airbox_Z' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 247) + DependencyObject('GeometryBodyOperation', 237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 238] + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, -3, 5.0762) + $begin 'FcTolVts' + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(-3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, 3, 5.0762) + $begin 'FcTolVts' + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[4: 6, 34, 238, 250] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('airbox_Z', 'patchY', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(airbox_Z='', patchY='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/02_Patch_NEW84.a3dcomp +BIN000000070874 +$begin 'AnsoftComponentChkSum' + ChecksumString='f29a40679c040a36039bc4c1d0c36d93' + ChecksumHistory('ea67790910e419e8b8fe253d8cb39680') + VersionHistory('1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='02_Patch_NEW' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='4:53:19 PM Aug 07, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryb4y/FH/hVXh\ +bTr/TdC/wCEw8beMPFvhn4dfDTwNHqf9lT+L/Hfi/UUsbCC4u4NPvruy8JaRpMeteJfFeo6fpesXmg+\ +DfBHiLxGmkajFo8trJ8a/syeCf2j/ix+zb+z38cdR/bg+OEnj34l/A/4T/Fa+8P6/wDDL9kvUvhO/i7\ +xl4C0DxfdaPrXhvwt+zroXiO/+Hh1nUngubHTvF+ja3LppeCz8SadfNHqkPkYnN6dDH08to4Otj8XOl\ +OtJUvYpU4RlTj78q1ajHmk6iahBzkormmoqUHP9EyPw6xWa8J4vjXM+I8t4T4foY6hl9KpmH9ozqYvE\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 71, '22cel', 83, '22cel', 139, '22cel', 151, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=3 + BoundType='Lattice Pair' + IsComponent=false + Faces(86, 88) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=105 + ParentIDs(93, 92, 98) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=86 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=108 + ParentIDs(98, 96, 95) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=86 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=4 + BoundType='Lattice Pair' + IsComponent=false + Faces(87, 89) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=104 + ParentIDs(92, 91, 100) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=87 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=109 + ParentIDs(100, 97, 96) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=87 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Excitations' + $begin '1' + ID=2 + BoundType='Lumped Port' + IsComponent=false + Faces(81) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=73 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='2.16840434497101e-17' + YPosition='2.845' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.99999999999999967 + uvpos_v=0.5 + uvpos_id=81 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=75 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='0' + YPosition='2.845' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=2.0250065182751466e-16 + uvpos_v=0.49999999999999994 + uvpos_id=81 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'Excitations' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('FeedWidth', 'UD', '', '0.336cm') + VariableProp('patchY', 'UD', '', '4.39cm') + VariableProp('subX', 'UD', '', '6cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('feed_correct', 'UD', '', '0.85cm') + VariableProp('InsetDistance', 'UD', '', '1.46cm') + VariableProp('InsetGap', 'UD', '', '0.168cm') + VariableProp('FeedLength', 'UD', '', '1.5cm') + VariableProp('airbox_Z', 'UD', '', '10cm') + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('subY', 'UD', '', '6cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=31 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=369 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=36 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='subH' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=51 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=55 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=56 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=56 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=57 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(139) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=249 + StartVertexID=254 + NumNewFaces=0 + NumNewEdges=5 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=249 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=253 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=252 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=251 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=250 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=254 + VtPos(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=257 + VtPos(0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=255 + VtPos(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=256 + VtPos(0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=55 + NumToolOperations=1 + ToolOperations(148) + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=67 + $begin 'UniteParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(151) + $end 'UniteParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=258 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=259 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.252, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=258 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.25199999999999995, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=57 + NumToolOperations=1 + ToolOperations(160) + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=70 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2+FeedLength-feed_correct' + ZStart='0cm' + Width='subH' + Height='FeedWidth' + WhichAxis='Y' + $end 'RectangleParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=71 + StartFaceID=-1 + StartEdgeID=72 + StartVertexID=76 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=80 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=71 + $end 'LocalOperationParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=81 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=81 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206400000000013 + FcUVMid(2.0271721641649156e-17, 2.8449999999999998, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 2.8449999999999998, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 2.8449999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 2.8449999999999998, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 2.8449999999999998, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=70 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=82 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+airbox_Z' + $end 'BoxParameters' + ParentPartID=83 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=83 + StartFaceID=84 + StartEdgeID=90 + StartVertexID=102 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_2673H5' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=138 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2-InsetGap' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth+2*InsetGap' + Height='FeedLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=139 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=139 + StartFaceID=-1 + StartEdgeID=140 + StartVertexID=144 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=148 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=139 + $end 'LocalOperationParameters' + ParentPartID=139 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=149 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=149 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1.008 + FcUVMid(0, 1.4849999999999994, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=138 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_OV2BLE' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=150 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth' + Height='FeedLength+InsetDistance-feed_correct' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=151 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=151 + StartFaceID=-1 + StartEdgeID=152 + StartVertexID=156 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=160 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=151 + $end 'LocalOperationParameters' + ParentPartID=151 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=161 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=161 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.70896000000000003 + FcUVMid(0, 1.7899999999999996, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 2.8449999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 2.8449999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=150 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'newobject_2673h' + newobject_2673h(5) + $end 'newobject_2673h' + $begin 'newobject_ov2ble' + newobject_ov2ble(-1) + $end 'newobject_ov2ble' + $begin 'port' + port(1) + $end 'port' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'relativecs1:xy' + 'relativecs1:xy'(-1) + $end 'relativecs1:xy' + $begin 'relativecs1:xz' + 'relativecs1:xz'(-1) + $end 'relativecs1:xz' + $begin 'relativecs1:yz' + 'relativecs1:yz'(-1) + $end 'relativecs1:yz' + $begin 'scan_cs' + scan_cs(-1) + $end 'scan_cs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 45) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 57) + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 148) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 67) + DependencyObject('GeometryBodyOperation', 57) + DependencyObject('GeometryBodyOperation', 160) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 70) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 80) + DependencyObject('GeometryBodyOperation', 70) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 82) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 138) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 148) + DependencyObject('GeometryBodyOperation', 138) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 150) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 160) + DependencyObject('GeometryBodyOperation', 150) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 46] + $begin 'AssignedFace' + kID=81 + $begin 'FaceData' + ParentObjectID=71 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206400000000013 + FcUVMid(2.0271721641649156e-17, 2.8449999999999998, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 2.8449999999999998, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 2.8449999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 2.8449999999999998, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 2.8449999999999998, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=86 + $begin 'FaceData' + ParentObjectID=83 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, -3, 5.0762) + $begin 'FcTolVts' + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=87 + $begin 'FaceData' + ParentObjectID=83 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(-3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=88 + $begin 'FaceData' + ParentObjectID=83 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, 3, 5.0762) + $begin 'FcTolVts' + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=89 + $begin 'FaceData' + ParentObjectID=83 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=73 + $begin 'EdgeData' + ParentObjectID=71 + ParentFaces[1: 81] + $begin 'EdgeGeomTopol' + EdgeFaces(81) + $begin 'EdTolVts' + TolVt(-0.16799999999999998, 2.8449999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 2.8449999999999998, 0.15239999999999995, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2.1684043449710089e-17, 2.8449999999999998, 0.15239999999999998) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=75 + $begin 'EdgeData' + ParentObjectID=71 + ParentFaces[1: 81] + $begin 'EdgeGeomTopol' + EdgeFaces(81) + $begin 'EdTolVts' + TolVt(-0.16800000000000001, 2.8449999999999998, 0, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 2.8449999999999998, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 2.8449999999999998, -3.08610993385133e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=104 + $begin 'VertexData' + ParentObjectID=83 + ParentEdges[3: 92, 91, 100] + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=105 + $begin 'VertexData' + ParentObjectID=83 + ParentEdges[3: 93, 92, 98] + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=108 + $begin 'VertexData' + ParentObjectID=83 + ParentEdges[3: 98, 96, 95] + TolVt(-3, -3, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=109 + $begin 'VertexData' + ParentObjectID=83 + ParentEdges[3: 100, 97, 96] + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 46, 71, 83] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('FeedLength', 'FeedWidth', 'InsetDistance', 'InsetGap', 'airbox_Z', 'feed_correct', 'patchY', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(FeedLength='', FeedWidth='', InsetDistance='', InsetGap='', airbox_Z='', feed_correct='', patchY='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/03_Radome_Side_New190.a3dcomp +BIN000000041589 +$begin 'AnsoftComponentChkSum' + ChecksumString='fe09e1bcf391c6061c448202590d5dca' + ChecksumHistory('1a552c3e1908c320de7fd7ba3c8df910') + VersionHistory('1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='03_Radome_Side_New' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='4:53:28 PM Aug 07, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryb4y/FH/hVXh\ +bTr/TdC/wCEw8beMPFvhn4dfDTwNHqf9lT+L/Hfi/UUsbCC4u4NPvruy8JaRpMeteJfFeo6fpesXmg+\ +DfBHiLxGmkajFo8trJ8a/syeCf2j/ix+zb+z38cdR/bg+OEnj34l/A/4T/Fa+8P6/wDDL9kvUvhO/i7\ +xl4C0DxfdaPrXhvwt+zroXiO/+Hh1nUngubHTvF+ja3LppeCz8SadfNHqkPkYnN6dDH08to4Otj8XOl\ +OtJUvYpU4RlTj78q1ajHmk6iahBzkormmoqUHP9EyPw6xWa8J4vjXM+I8t4T4foY6hl9KpmH9ozqYvE\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='2.60208521396521e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('airbox_Z', 'UD', '', '10cm') + VariableProp('subX', 'UD', '', '6cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subY', 'UD', '', '6cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=30 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=677 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=36 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+airbox_Z' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, -3, 5.0762) + $begin 'FcTolVts' + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(-3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, 3, 5.0762) + $begin 'FcTolVts' + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-3, -3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-3, 3, 2.6020852139652106e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[3: 6, 34, 250] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('airbox_Z', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(airbox_Z='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/04_Radome_Corner_NEW258.a3dcomp +BIN000000040181 +$begin 'AnsoftComponentChkSum' + ChecksumString='eb89ade4462f40448f759f7a566a4815' + ChecksumHistory('7cfd874261db221aa0edff946aa7e7ca') + VersionHistory('1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='04_Radome_Corner_NEW' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='4:53:35 PM Aug 07, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryb4y/FH/hVXh\ +bTr/TdC/wCEw8beMPFvhn4dfDTwNHqf9lT+L/Hfi/UUsbCC4u4NPvruy8JaRpMeteJfFeo6fpesXmg+\ +DfBHiLxGmkajFo8trJ8a/syeCf2j/ix+zb+z38cdR/bg+OEnj34l/A/4T/Fa+8P6/wDDL9kvUvhO/i7\ +xl4C0DxfdaPrXhvwt+zroXiO/+Hh1nUngubHTvF+ja3LppeCz8SadfNHqkPkYnN6dDH08to4Otj8XOl\ +OtJUvYpU4RlTj78q1ajHmk6iahBzkormmoqUHP9EyPw6xWa8J4vjXM+I8t4T4foY6hl9KpmH9ozqYvE\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=2 + BoundType='Lattice Pair' + IsComponent=false + Faces(49, 51) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=68 + ParentIDs(56, 55, 61) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=49 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=71 + ParentIDs(61, 59, 58) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='-3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=49 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=3 + BoundType='Lattice Pair' + IsComponent=false + Faces(50, 52) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=67 + ParentIDs(55, 54, 63) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='10.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=50 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=72 + ParentIDs(63, 60, 59) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-3' + YPosition='3' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=50 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('airbox_Z', 'UD', '', '10cm') + VariableProp('subY', 'UD', '', '6cm') + VariableProp('subX', 'UD', '', '6cm') + VariableProp('subH', 'UD', '', '0.1524cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=5 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=214 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=36 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=45 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+airbox_Z' + $end 'BoxParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=46 + StartFaceID=47 + StartEdgeID=53 + StartVertexID=65 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'relativecs1:xy' + 'relativecs1:xy'(-1) + $end 'relativecs1:xy' + $begin 'relativecs1:xz' + 'relativecs1:xz'(-1) + $end 'relativecs1:xz' + $begin 'relativecs1:yz' + 'relativecs1:yz'(-1) + $end 'relativecs1:yz' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=49 + $begin 'FaceData' + ParentObjectID=46 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, -3, 5.0762) + $begin 'FcTolVts' + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, -3, 0, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=50 + $begin 'FaceData' + ParentObjectID=46 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(-3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=51 + $begin 'FaceData' + ParentObjectID=46 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(0, 3, 5.0762) + $begin 'FcTolVts' + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=52 + $begin 'FaceData' + ParentObjectID=46 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=60.914400000000001 + FcUVMid(3, 0, 5.0762) + $begin 'FcTolVts' + TolVt(3, 3, 0, 4.9999999999999998e-07) + TolVt(3, 3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 10.1524, 4.9999999999999998e-07) + TolVt(3, -3, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=67 + $begin 'VertexData' + ParentObjectID=46 + ParentEdges[3: 55, 54, 63] + TolVt(-3, 3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=68 + $begin 'VertexData' + ParentObjectID=46 + ParentEdges[3: 56, 55, 61] + TolVt(-3, -3, 10.1524, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=71 + $begin 'VertexData' + ParentObjectID=46 + ParentEdges[3: 61, 59, 58] + TolVt(-3, -3, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=72 + $begin 'VertexData' + ParentObjectID=46 + ParentEdges[3: 63, 60, 59] + TolVt(-3, 3, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[3: 6, 34, 46] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('airbox_Z', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(airbox_Z='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/Aluminum_Base569.a3dcomp +BIN000000052610 +$begin 'AnsoftComponentChkSum' + ChecksumString='fab0cba514b831f59465b3edfba09d2b' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Aluminum_Base' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:55:34 PM Aug 07, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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\ +x00fSE8bSyW8uq6XF4lt4dD0+z0fxPo0NpbmH0qHEXEFHh7M8phk1J4HM8ZgMZKjKrFY2EsBRzOiuWc\ +ZywjdSOYS/cOoo3hGbxkNab+W41wOUZHVy+nwnmn+u+Kwbrxx1ejCrgsHWp1I4aVFZSsfSw+Lqyoyp1\ +41ZZlQy1Yh1qahTw0cK6uO+1KK/OTxh+3fqf7LP8AwkcH7d/wo8X/AAr8DeGfPGlftafCnwj4s+Ln7N\ +PxA020Pw20ax1fX9I8B2mt+Lf2bPF+seK/Hd3bWvhnxZp97pEEvh+5sdJ+IHiyVYbm5+kf2Vv2qPgz+\ +2V8F/DHx1+BniQ674Q8QiSz1DTb+OCy8VeCPFVlDbSa54F8daJDdTf2F4tsGu7bzoVlntrm3u7XUtMu\ +7/SL/T9QuvNw2eZVisZ/ZtPGQhmajKbwtR+zxMYQajKboztU5LyXLUUXTqJ81OU4+8fIYTiPJcbj/wC\ +yaWPhTzhQnUlg6r9li404SjGVSWHqctX2fNJclVRdKqnz0pzh7x9FUUUV6p7YUUUUAFFFFABRRRQAUU\ +UUAFFFFABRRRQAUUUUAFFFFABRRRQB8Bft6f8ABOr4Sf8ABQ/QPh14T+M3xH+OXhHwt8ONX1/X7Lw18\ +J/F/hnw/oHiXXdcs9N0621nxho/irwRrdvrGraXp1pqlvpFykdvNYweLtYiV3S/kUer/sgfsbfAn9hr\ +4Rx/Bj9n/QNY0bwvc6wnivxLqHiLxLrHifxB4y8czeGfDPhTWfG+u3epXJt7HWNR07wjor3VrpFrpmj\ +RTxO1hpdkkjR19TUV5NPIsnpZtXz2GXUlnGJioTxLjeq4RioKKk78q5YpNR5bpa3P0HF+K3iNjfD7K/\ +CnE8Y46Xhxk1epicPk0arhgY4irWqYidapRpqKrz9vVqVIyruo6cpN0+XSxRRRXrH58eF/tMfs6/Db9\ +rL4F/EX9nn4u2ur3PgD4l6Ra6brEnh/VpdE17TL3StX07xJ4b8QaJqUcciRavpnijRtG1G2S6gu7Ceb\ +S0g1GxvrCS5s5/kL9gX/AIJZfBH/AIJza78SNW+BnxP+O3iHTvitpWgWHjLwr8T9Y+F2u6Dd3/hS91K\ +68MeIrO48MfCXRtTsNYsoNe8TWyJHqIsJ4fEc7Xljc3Fvp09l+mNFeTXyPKMTmmEzuvgKc83wMXCliL\ +NVYQfPeCkmm4NVKicXdWnNWtJ38TE8N5FjM6wPEWJyylUz3LYOnQxVmq1Om/aJ01OLTcGqtVOErxtUm\ +rWnK5RRRXrHthRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR\ +RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR\ +RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB\ +RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA\ +BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z\ +' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + Temperatures(-1, '22cel', 15, '22cel', 42, '22cel', 52, '22cel', 62, '22cel', 123, '22cel', 150, '22cel', 160, '22cel', 186, '22cel', 196, '22cel', 394, '22cel', 421, '22cel', 431, '22cel', 1200, '22cel', 1227, '22cel', 1237, '22cel', 1388, '22cel', 2050, '22cel', 2426, '22cel') + $end 'DesignSettings' + $begin 'DCThickness' + DCThicknessObjects(2050, '""') + $end 'DCThickness' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'aluminum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + permeability='1.000021' + conductivity='38000000' + thermal_conductivity='237.5' + mass_density='2689' + specific_heat='951' + youngs_modulus='69000000000' + poissons_ratio='0.31' + thermal_expansion_coefficient='2.33e-05' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'aluminum' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('subX', 'UD', '', '6cm') + VariableProp('subY', 'UD', '', '6cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=42 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=2453 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box6' + Flags='' + Color='(128 128 64)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"aluminum"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=2049 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='-4*subX' + YPosition='-4*subY' + ZPosition='0cm' + XSize='8*subX' + YSize='8*subY' + ZSize='1.9524cm' + $end 'BoxParameters' + ParentPartID=2050 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=2050 + StartFaceID=2051 + StartEdgeID=2057 + StartVertexID=2069 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Scale' + ID=2077 + ReferenceCoordSystemID=1 + $begin 'ScaleParameters' + KernelVersion=23 + TargetID=2050 + ScaleX='1.065' + ScaleY='1.065' + ScaleZ='1' + $end 'ScaleParameters' + ParentPartID=2050 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=2049 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=2078 + $begin 'SubtractParameters' + KernelVersion=23 + KeepOriginals=false + TurnOnNBodyBoolean=true + BlankPart=2050 + NumToolParts=1 + ToolParts(2022) + $end 'SubtractParameters' + ParentPartID=2050 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=12 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=-1 + StartFaceID=2079 + StartEdgeID=2083 + StartVertexID=2095 + NumNewFaces=4 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=2079 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=93.715199999999996 + FcUVMid(0, -24, 0.97619999999999996) + $begin 'FcTolVts' + TolVt(24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, -24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=1 + ID=2080 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=93.715199999999996 + FcUVMid(-24, 0, 0.97619999999999996) + $begin 'FcTolVts' + TolVt(-24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, 24, 0, 4.9999999999999998e-07) + TolVt(-24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=2 + ID=2081 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=93.715199999999996 + FcUVMid(0, 24, 0.97619999999999996) + $begin 'FcTolVts' + TolVt(-24, 24, 0, 4.9999999999999998e-07) + TolVt(24, 24, 0, 4.9999999999999998e-07) + TolVt(24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-24, 24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=3 + ID=2082 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=93.715199999999996 + FcUVMid(24, 0, 0.97619999999999996) + $begin 'FcTolVts' + TolVt(24, -24, 0, 4.9999999999999998e-07) + TolVt(24, -24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, 24, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=2083 + EdgeFaces(2051, 2079) + $begin 'EdTolVts' + TolVt(-24, -24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -24, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=2084 + EdgeFaces(2051, 2080) + $begin 'EdTolVts' + TolVt(-24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-24, 0, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=2085 + EdgeFaces(2051, 2081) + $begin 'EdTolVts' + TolVt(24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-24, 24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 24, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=2086 + EdgeFaces(2051, 2082) + $begin 'EdTolVts' + TolVt(24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(24, 0, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=2087 + EdgeFaces(2079, 2080) + $begin 'EdTolVts' + TolVt(-24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-24, -24, 0.97619999999999996) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=2088 + EdgeFaces(2080, 2081) + $begin 'EdTolVts' + TolVt(-24, 24, 0, 4.9999999999999998e-07) + TolVt(-24, 24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-24, 24, 0.97619999999999996) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=2089 + EdgeFaces(2081, 2082) + $begin 'EdTolVts' + TolVt(24, 24, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(24, 24, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(24, 24, 0.97619999999999996) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=7 + ID=2090 + EdgeFaces(2079, 2082) + $begin 'EdTolVts' + TolVt(24, -24, 0, 4.9999999999999998e-07) + TolVt(24, -24, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(24, -24, 0.97619999999999996) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=8 + ID=2091 + EdgeFaces(2052, 2082) + $begin 'EdTolVts' + TolVt(24, -24, 0, 4.9999999999999998e-07) + TolVt(24, 24, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(24, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=9 + ID=2092 + EdgeFaces(2052, 2081) + $begin 'EdTolVts' + TolVt(-24, 24, 0, 4.9999999999999998e-07) + TolVt(24, 24, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 24, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=10 + ID=2093 + EdgeFaces(2052, 2080) + $begin 'EdTolVts' + TolVt(-24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, 24, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-24, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=11 + ID=2094 + EdgeFaces(2052, 2079) + $begin 'EdTolVts' + TolVt(24, -24, 0, 4.9999999999999998e-07) + TolVt(-24, -24, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -24, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=2095 + VtPos(24, -24, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=2096 + VtPos(24, 24, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=2097 + VtPos(-24, -24, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=2098 + VtPos(-24, 24, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=2099 + VtPos(24, 24, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=2100 + VtPos(-24, 24, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=6 + ID=2101 + VtPos(-24, -24, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=7 + ID=2102 + VtPos(24, -24, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=2077 + NumToolOperations=1 + ToolOperations(2021) + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=2132 + $begin 'UniteParameters' + KernelVersion=23 + KeepOriginals=false + TurnOnNBodyBoolean=true + BlankPart=2050 + NumToolParts=1 + ToolParts(2104) + $end 'UniteParameters' + ParentPartID=2050 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=11 + NumWires=0 + NumLoops=12 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=2078 + NumToolOperations=1 + ToolOperations(2131) + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box5' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=2021 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='-4*subX' + YPosition='-4*subY' + ZPosition='0cm' + XSize='8*subX' + YSize='8*subY' + ZSize='1.9524cm' + $end 'BoxParameters' + ParentPartID=2022 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=2022 + StartFaceID=2023 + StartEdgeID=2029 + StartVertexID=2041 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box7' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=2103 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='-4*subX' + YPosition='-4*subY' + ZPosition='0cm' + XSize='8*subX' + YSize='8*subY' + ZSize='-1.56cm' + $end 'BoxParameters' + ParentPartID=2104 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=2104 + StartFaceID=2105 + StartEdgeID=2111 + StartVertexID=2123 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Scale' + ID=2131 + ReferenceCoordSystemID=1 + $begin 'ScaleParameters' + KernelVersion=23 + TargetID=2104 + ScaleX='1.065' + ScaleY='1.065' + ScaleZ='1' + $end 'ScaleParameters' + ParentPartID=2104 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=2103 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=2398 + StartFaceID=2399 + StartEdgeID=2405 + StartVertexID=2417 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=true + $end 'RegionIdentity' + $begin 'CachedNames' + $begin '01_metal_only' + '01_metal_only'(-1, 1) + $end '01_metal_only' + $begin '02_patch_rev' + '02_patch_rev'(1) + $end '02_patch_rev' + $begin '02_patch_rev1_' + '02_patch_rev1_'(1) + $end '02_patch_rev1_' + $begin '03_radome_side' + '03_radome_side'(-1, 1) + $end '03_radome_side' + $begin '04_radome_corner_rev' + '04_radome_corner_rev'(1) + $end '04_radome_corner_rev' + $begin '04_radome_corner_rev1_' + '04_radome_corner_rev1_'(1) + $end '04_radome_corner_rev1_' + $begin 'ab_cs' + ab_cs(-1) + $end 'ab_cs' + $begin 'airplane_fix_modification_4_rev1_final' + airplane_fix_modification_4_rev1_final(-1) + $end 'airplane_fix_modification_4_rev1_final' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'antenna_' + antenna_(1) + $end 'antenna_' + $begin 'arrayairbox' + arrayairbox(1) + $end 'arrayairbox' + $begin 'box' + box(1, 2, 5, 6, 7) + $end 'box' + $begin 'box1_' + box1_(1, 2, 3) + $end 'box1_' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'ground_' + ground_(1, 2, 3) + $end 'ground_' + $begin 'model' + model(-1) + $end 'model' + $begin 'port' + port(1) + $end 'port' + $begin 'radome' + radome(-1, 1) + $end 'radome' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $begin 'relativecs' + relativecs(1, 2) + $end 'relativecs' + $begin 'solid' + solid(-1) + $end 'solid' + $begin 'sub' + sub(-1) + $end 'sub' + $begin 'sub_' + sub_(1, 2, 3) + $end 'sub_' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 2049) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 2077) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 2049) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 2078) + DependencyObject('GeometryBodyOperation', 2077) + DependencyObject('GeometryBodyOperation', 2021) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 2132) + DependencyObject('GeometryBodyOperation', 2078) + DependencyObject('GeometryBodyOperation', 2131) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 2021) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 2103) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 2131) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 2103) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[7: 42, 52, 150, 160, 421, 1227, 2426] + $begin 'AssignedFace' + kID=65 + $begin 'FaceData' + ParentObjectID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-15, -18, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 9.2444637330587286e-31, 4.9999999999999998e-07) + TolVt(-12, -18, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=66 + $begin 'FaceData' + ParentObjectID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-18, -15, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -12, 9.2444637330587286e-31, 4.9999999999999998e-07) + TolVt(-18, -18, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=67 + $begin 'FaceData' + ParentObjectID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-15, -12, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -12, 9.2444637330587286e-31, 4.9999999999999998e-07) + TolVt(-18, -12, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=68 + $begin 'FaceData' + ParentObjectID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-12, -15, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -12, 9.2444637330587286e-31, 4.9999999999999998e-07) + TolVt(-12, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -18, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=187 + $begin 'FaceData' + ParentObjectID=186 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206400000000041 + FcUVMid(-9, -6.1549999999999994, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-9.1679999999999993, -6.1549999999999994, 0, 4.9999999999999998e-07) + TolVt(-9.1679999999999993, -6.1549999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-8.831999999999999, -6.1549999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(-8.831999999999999, -6.1549999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=199 + $begin 'FaceData' + ParentObjectID=196 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-9, -12, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-6, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -12, 0, 4.9999999999999998e-07) + TolVt(-6, -12, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=200 + $begin 'FaceData' + ParentObjectID=196 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-12, -9, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -6, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -6, 0, 4.9999999999999998e-07) + TolVt(-12, -12, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=201 + $begin 'FaceData' + ParentObjectID=196 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-9, -6, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -6, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-6, -6, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-6, -6, 0, 4.9999999999999998e-07) + TolVt(-12, -6, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=202 + $begin 'FaceData' + ParentObjectID=196 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-6, -9, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-6, -6, 0, 4.9999999999999998e-07) + TolVt(-6, -6, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-6, -12, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-6, -12, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=434 + $begin 'FaceData' + ParentObjectID=431 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-15, -24, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-12, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=435 + $begin 'FaceData' + ParentObjectID=431 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-18, -21, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-18, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=436 + $begin 'FaceData' + ParentObjectID=431 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-15, -18, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-18, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=437 + $begin 'FaceData' + ParentObjectID=431 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-12, -21, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-12, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-12, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-12, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1240 + $begin 'FaceData' + ParentObjectID=1237 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-21, -24, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-24, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-24, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-18, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1241 + $begin 'FaceData' + ParentObjectID=1237 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-24, -21, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-24, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-24, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-24, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-24, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1242 + $begin 'FaceData' + ParentObjectID=1237 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-21, -18, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-24, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-24, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1243 + $begin 'FaceData' + ParentObjectID=1237 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.91439999999999999 + FcUVMid(-18, -21, 0.076200000000000004) + $begin 'FcTolVts' + TolVt(-18, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-18, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=2172 + $begin 'FaceData' + ParentObjectID=2162 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2304 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-24, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(24, -24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(24, 24, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-24, 24, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=189 + $begin 'EdgeData' + ParentObjectID=186 + ParentFaces[1: 187] + $begin 'EdgeGeomTopol' + EdgeFaces(187) + $begin 'EdTolVts' + TolVt(-8.831999999999999, -6.1549999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(-9.1679999999999993, -6.1549999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-9, -6.1549999999999994, 0.15239999999999998) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=191 + $begin 'EdgeData' + ParentObjectID=186 + ParentFaces[1: 187] + $begin 'EdgeGeomTopol' + EdgeFaces(187) + $begin 'EdTolVts' + TolVt(-8.831999999999999, -6.1549999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + TolVt(-9.1679999999999993, -6.1549999999999994, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-9, -6.1549999999999994, -3.0861099338513282e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=83 + $begin 'VertexData' + ParentObjectID=62 + ParentEdges[3: 71, 70, 79] + TolVt(-18, -12, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=84 + $begin 'VertexData' + ParentObjectID=62 + ParentEdges[3: 72, 71, 77] + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=87 + $begin 'VertexData' + ParentObjectID=62 + ParentEdges[3: 77, 75, 74] + TolVt(-18, -18, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=88 + $begin 'VertexData' + ParentObjectID=62 + ParentEdges[3: 79, 76, 75] + TolVt(-18, -12, 9.2444637330587286e-31, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=217 + $begin 'VertexData' + ParentObjectID=196 + ParentEdges[3: 207, 206, 203] + TolVt(-12, -6, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=218 + $begin 'VertexData' + ParentObjectID=196 + ParentEdges[3: 208, 207, 213] + TolVt(-12, -12, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=221 + $begin 'VertexData' + ParentObjectID=196 + ParentEdges[3: 213, 211, 210] + TolVt(-12, -12, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=222 + $begin 'VertexData' + ParentObjectID=196 + ParentEdges[3: 203, 212, 211] + TolVt(-12, -6, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=452 + $begin 'VertexData' + ParentObjectID=431 + ParentEdges[3: 440, 439, 448] + TolVt(-18, -18, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=453 + $begin 'VertexData' + ParentObjectID=431 + ParentEdges[3: 441, 440, 446] + TolVt(-18, -24, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=456 + $begin 'VertexData' + ParentObjectID=431 + ParentEdges[3: 446, 444, 443] + TolVt(-18, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=457 + $begin 'VertexData' + ParentObjectID=431 + ParentEdges[3: 448, 445, 444] + TolVt(-18, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1258 + $begin 'VertexData' + ParentObjectID=1237 + ParentEdges[3: 1246, 1245, 1254] + TolVt(-24, -18, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1259 + $begin 'VertexData' + ParentObjectID=1237 + ParentEdges[3: 1247, 1246, 1252] + TolVt(-24, -24, 0.15240000000000001, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1262 + $begin 'VertexData' + ParentObjectID=1237 + ParentEdges[3: 1252, 1250, 1249] + TolVt(-24, -24, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1263 + $begin 'VertexData' + ParentObjectID=1237 + ParentEdges[3: 1254, 1251, 1250] + TolVt(-24, -18, 1.2325951644078299e-30, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[1: 2050] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('subX', 'subY') + IncludedDependentParameters() + ParameterDescription(subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/Radome413.a3dcomp +BIN000000051232 +$begin 'AnsoftComponentChkSum' + ChecksumString='7e643046ffefb147346275221f867649' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Radome' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='2:56:42 PM Aug 04, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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\ +fVZrfTrC0mvZLXTrCG2/VSiuzC5jmGBkpYLH1sHKN7OlVnTavvZwkrX69zkxOAwOMTjjMFRxUXa6qU4\ +VE7bfFF7dD+azxr/wbA/saXf8Awlt98Ifj7+1Z8GL/AFD+3rvwR4b0TxL8Lb/4aeFry4+1zeEdD8U2W\ +m/CvSvGfxR8DaRNJaW5i1Xx4PE99p8Vwj+LoNVvbjWT+ePx/wD+DWL9o3XPBb2vw+/a++CPxs8RbdS0\ +jQPD3xg+EXi/4L6T4Bttd0m8j1Pxno/xMTxP8Xdd8Taqt9BYQf2HeWNtBLFqz6ha65pV5oekQt/bDRX\ +1GG8Q+MsNH2f9uVcTSdrwrqFdNJWterGUlp/LJPre585iOBeFMRLn/senQqLaVFzota32pyjF/OLPyN\ +/4JAf8EqfBP/BLv4G634fXXB4v+OPxcbQ9V+M3ibTdS1a48E6TD4f1Pxlrfgz4U/DWz1K2tZbrwL4Yu\ +viJ4zjt9c1Kzi8QeJLvXr3VNSXTrF9G8M+HP1yoor5TGYvEY/FVsZi6jq4jES5pSfV7JJLRJJJJLRJJ\ +LRH02EwtDA4ajhMNT9lQoLljHsvNvVtu7berbbYUUUVzHQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF\ +FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA\ +FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU\ +AFFFFABRRRQAUUUUAFFFFABRRRQB//Z' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=false + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(111, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=9 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=4754 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='NativeBody' + ID=4753 + ReferenceCoordSystemID=1 + $begin 'NativeBodyParameters' + KernelVersion=23 + SourceFile='PurgedPart' + $end 'NativeBodyParameters' + ParentPartID=111 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=27 + NumWires=0 + NumLoops=28 + NumCoedges=120 + NumEdges=60 + NumVertices=36 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + BodyType='BRepBody' + $begin 'BodyBlock' + BodyFileNamesVec[1: '0000111.x_b'] + $end 'BodyBlock' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(2) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs1:xy' + 'relativecs1:xy'(-1) + $end 'relativecs1:xy' + $begin 'relativecs1:xz' + 'relativecs1:xz'(-1) + $end 'relativecs1:xz' + $begin 'relativecs1:yz' + 'relativecs1:yz'(-1) + $end 'relativecs1:yz' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 4753) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[0:] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[1: 111] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$begin 'NativeGeometryFiles' +NumFiles= 1 +$begin 'x_b' +NativeGeometryFiles/0000111.x_b +BIN000000023873 +**ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz************************** +**PARASOLID !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~0123456789************************** +**PART1; +MC=unknown; +MC_MODEL=unknown; +MC_ID=unknown; +OS=unknown; +OS_RELEASE=unknown; +FRU=sdl_parasolid_customer_support; +APPL=Electronics Desktop; +SITE=unknown; +USER=unknown; +FORMAT=binary; +GUISE=transmit; +KEY=D:/HFSS_Temp/Rad410310728169118621217.RefFiles/NativeGeometryFiles/0000111.x_b; +FILE=D:/HFSS_Temp/Rad410310728169118621217.RefFiles/NativeGeometryFiles/0000111.x_b; +DATE=unknown; +**PART2; +SCH=SCH_3401241_34101; +USFLD_SIZE=0; +**PART3; +**END_OF_HEADER***************************************************************** +B3: TRANSMIT FILE created by modeller version 3401241SCH_3401241_34101_13006PART_XMT_BLOCK Part list n_entriesdindex_map_offsetd index_mapRschema_embedding_mapRmesh_offset_dataentries $CCCIlatticeCCCImeshIpolylineCCCCCCCDIownerCCCIboundary_latticeCCCI boundary_meshIboundary_polylineCCCAindex_map_offsetdA index_mapRAnode_id_index_mapRAschema_embedding_mapRAchild Alowest_node_iddAmesh_offset_dataZ@@:0yE> +   @@:0yE>QF CI list_typeuI +notransmitlCCCDCCDI finger_indexdI finger_blockCZ  CCCCCCIframeCAowner ZVnJCIindex_map_offsetdCCZQQPCCCCCDI legal_ownerslCZDS@@OSDL/TYSA_DENSITYP !(#TUNIT=mmO!AEDT_EntityName_V1P"#(#S{Gz?O#AEDT_ExtentScale_V1Q$%&F'' ()2 6(*+>~oӟ??? +a+,+gfffffgfffff m9???? -Q)\(0_^? ).V /n01,234 nQ25/67389:;<=-4]6>?-nQ6542@A>BCD4EFG+?Z@H4IJn-4J gfffff m9?J?K-gfffff m9?KILJgfffffgfffff>~oӟ?IiME?NKnLNOKQ*\(@0_^?NzPQIRLnORSL(\(Q?0_^?RTUNVOnSVWOhfffff@ m9?VTXYRZSnWZ[Sffffff@ m9?Z\]V^Wn[^_Wffffffhfffff@>~oӟ?^c`aZb[n_bc[+\(@Q?0_^?bde^f_ncfg_Q?(\(@0_^?fhibjcngklcQ?,\(0_^?klm;nognlopg'\(@Q0_^?oqrkslnptulQ)\(0s,&6?tqvwxypnuyzp)\(Q0s,&6?yw{|t}unz}~u)\(Q0_^?}9yzn~zgfffff0s,&6?N0}~n~gfffff0s,&6?fns@jfffff m9?sondfffff@ m9?`Csxnxdfffff@jfffff>~oӟ?xtnjifffff@@ m9?jfn@efffff@ m9?jnnnifffff@efffff@>~oӟ?nkn(\(Q?0s,&6?tnQ*\(@0s,&6?nhfffff@0s,&6?Wnffffff@0s,&6?nQ?'\(@0s,&6?|n+\(@Q?0s,&6?nifffff@@0s,&6?n@efffff@0s,&6?n'\(@Q0s,&6?nQ?+\(0s,&6?nn@jfffff0s,&6?ndfffff@0s,&6?QnQC50+GG+0G +-n- --n+-nQI5n+dfffff@jfffff0s,&6?vü?+Q?+\(0s,&6?-'\(@Q0_^?n-Q?Q0s,&6?vü?n++\(@133333?0s,&6? +L9yn½+@yGz@0s,&6? +L9y<?n+ifffff@efffff@0s,&6?? +L9y?n++\(@Q?0s,&6?n -Q?'\(@0_^? +n     -Q?Q?0s,&6?? +L9y? n   +233333*\(@0s,&6?? +L9yn­   +zGz@0s,&6? +L9y< n+ffffffhfffff@0s,&6? +L9y<??n+Q*\(@0s,&6?n -(\(Q?0_^?!n"# #$-QQ?0s,&6? +L9y<??#%n&' $( )-733333?efffff@>~oӟ?? +L9y(!*n+,-$),$.+733333?@ m9?? +L9y,/n01().1)2+ifffff@efffff@ m9? +L9y??13n45,.25.6-ifffff@efffff@ m9?? +L9y??5 7n“8126829+@efffff@0_^??8:n;<569<6=-ifffff@@0_^??<>nµ?89=-9@+ifffff@efffff@ m9?? +L9y<?-AnB(C=@D=E-efffff@933333>~oӟ?vüD*FnšG@EG@H+@933333 m9?vüGInJKDEHKEL+dfffff@jfffff m9?v<??KMnNGHLH-dfffff@jfffff m9?vü??OnŠKLLP+dfffff@0_^??PQ-@jfffff0_^??RnSPQPT+dfffff@jfffff m9??v<??UnDVQT~'QW+)\(4333330s,&6??'Xn#TW}T+)\(4333330_^?YnZ'W|W[+4333330s,&6??[{\]+433333)\(0s,&6?\^n_<[]z[`+{Gz0s,&6?anb\]`y<]c+433333)\(0_^??<dn;e\`cxe`f+gfffffgfffff0s,&6??egnh<cfwhci+)\(Q0s,&6?hjnklefivlfm-Q)\(0_^?lnn=ohimuoip-QQ0s,&6??oqnwVlmptVmr-QQ0_^????V3sn9oprsSpt+Q?Q0_^??S1un:CrtrCrv+'\(@9333330_^?v<?Cwne-Stvq?tx+Q?Q?0_^???/ynz{<vxp{v|+733333?'\(@0_^? +L9y<{}nQ~?x|ox+ffffffhfffff@ m9?? +L9y??n‚~|n|-ffffffhfffff@ m9? +L9y<???n†m+ffffff@0_^??nŠl-hfffff@0_^??n¥k~+ffffffhfffff@ m9?? +L9y?~n‘{j+QQ?0_^??-n”+i+433333 m9??nY+h-433333gfffff>~oӟ?'ng-gfffff433333>~oӟ??$nžf+433333 m9?~nGe+gfffffgfffff m9????n¥FdF-gfffffgfffff m9???Fn>1c1,+gfffff0_^??1nH F,b  +-gfffff0_^??Q51HYb?1+YYHV+bH+H1-?Y-aI+aV+?+-40 -E4+++n¶ +E?-EI>F-n»+.Q5n+.n¹+.5D+gfffffgfffff m9???? . (($n +.Q5(n­(+(.0+(+^(++IaD++nD+n+(-^-'Z-V~+]^+]Z0,-]j50+0j],+0Z++-Z~-#V--bY+b-+eb+e--+-j<B-;8-B--;J8+;J;sG+;+J+s-s+xN-NK-NBDCxK+BDDB>NI-CBN>G-4xD-sJ+4n1+4JG;-B41-BBj-+Bn54-n+.Q5 n+.n+.5T+ifffff@efffff@ m9??? +L9y<3U+733333?efffff@ m9?? +L9y??3S+ifffff@efffff@0_^??? +L9y<2R+@9333330_^??vün+.3Q+efffff@933333 m9?vü??n+.5P+dfffff@jfffff m9???v<? n+.3O+dfffff@jfffff0_^???v<?n+.2N+)\(4333330s,&6??n+.2M+433333{Gz0s,&6?n+.2L+433333)\(0s,&6???3K+QQ0s,&6????n-.5J+ffffffhfffff@ m9??? +L9y$n+.3I +ffffffhfffff@0_^??? +L9y2 H+4333330_^?? +n +.2G  +4333330_^?3 F+gfffff433333 m9???? n· +.3E +433333gfffff m9??? n²B+.Q 5 P5(#Q 5 + Q5 R n8*+.Q5Rqn-.Q5R +n-.Q5 R n!"#+!.Q5$%R  n!&'+!.Q$5!()R% !$n*+-.Q(5$,-R) (n+.Q,5(.R-_ +,n+.R.d +2V++733333?@0_^? +L9y<?3+W!'+QQ?0s,&6??? +L9y2'X++233333*\(@0s,&6? +L9y3Y#'+Q?Q?0s,&6??? +L9y<2#Z++\(@133333?0s,&6? +L9y<3[#+Q?Q0s,&6???v<?*/!/*01R-0*/"-1*/N-8iUN/1+85Ui8zfQ{ -U89RZ"-98U3}2VZ+Zk"}U3+"ZR0/+Z"k4'&+kZy3h4+4w&y'-&45#0+5&-*10&#-&Q15+&Q& 5+Q& Ni{+ &Qf67+67 -768fz?-787b-z8rib7?8+r8:zoeC-:83rk9S:+e"brCz+"eo;9+"e"<+;=9-9;:o:S-9:9=k-=:;-_;:+__=t\>+;=k3<:+=;_>l2+>|2t=l-2>39V-232|}kh-|3>ywok-w4t|o_+w_\=-<=;+<-5< 6+86 -"e8<+2*% +0_^?3C*+gfffffgfffff0_^????Q +5 ?RQ5 +@R?Q5AR@7 +Q5BRAQ5CRBnQ5DRCQ5ERD +Q5FRE +Q5GRF +Q5HRG +Q5IRHf +RI8 +OAEDT_EntityID_V1Q5JRe +RJG04C+xD+0<+a^+-Q5KRpQ5LRKRLqQ5+MRRMQ5FNRQ5ORNQ5PROQ5QRPQ5RRQQ5SRRQ5TRSQ5~URTQ5VRUH +Q5WRVL +Q5XRWM +Q5}YRXI +Q}5{yZRYJ +Qy5?w}[RZQw5Cuy\R[Qu5Ssw]R\Qs5Vqu^R]Qq5ons_R^Qn5ljq`R_Qj5hgnaR`Qg5edjbRaQd5<agcRbQa5^ddRctQ^5\YaeRdyQY5X^fRezQX5'UYgRfQU5RXhRgQR5OUiRh +QO}5MRjRi +QM{5KIOkRj +QIy5GFMlRk +QFw5DAImRl +QAu5->FnRm +Q>s5<:AoRnv +Q:q587>pRoz +Q7o553:qRp{ +Q3m51/7rRqw +Q/k5,*3sRrx +Q*i5(%/tRsu +Q%g5#!*uRtt +Q!e5%vRu Qc5!wRv Qa5xRw Q_5yRx Q]5zRy Q[5  +{Rz Q +Y5|R{ QW5 +}R| QU5~R} QS5R~ QQ5R QO5R QM5R +QK5R +R +QG5R +QE5R +RxQA5R +Q?5R! +Q=5R% +Q;5R$ +Q95R Q75R Q55R Q35R Q15R Q/5R Q-5R Q+5nR Q)5R +Q'5jR +Q%5xR +Q#5R +Q!5sR +Q5R +Q5RQ5}{RQ{5yvRQv5tq{RQq5omvRQm5khqR' +Qh5fdmR& +Qd5b`hR Q` 5^\dR Q\ 5ZX`RT +QX 5VT\RW +QT5RPXRX +QP5NMTR QM5I@PR Q@5?6MRRRAQ/5 2R7Q5%/RQQ%RoPhS??OSDL/TYSA_COLOUR_2QTBox2P(#QR@P5(#T Teflon (tm)OAEDT_MaterialName_V1OAEDT_BODYFlagGroupColor_V1) SJ',%P$QT&Box2O SDL/TYSA_NAME$end 'x_b' +$end 'NativeGeometryFiles' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$end 'Design_0.setup/UdmDefFiles' +$end 'AllReferencedFilesForProject' +$begin 'ProjectPreview' + IsEncrypted=false + Thumbnail64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCABgAGADASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+8rxz4q/4Q3w7JrKWH9p3k+r+GPDek2D3X2C2u\ +de8aeJ9H8HeHo9R1AW87adpH9ua9p5vbmK3u5re0WaaCzvJkS2l5D/hYfju3/0e8+AvxGuryD9zd3Ph\ +/wASfBu/0G4uYvknn0S+174oaVfXmkPKrtbS3umabdyQsj3FhZzF7eOn8fbGHU/h9Z6bcveRW+ofFH4\ +D2M8mn6hf6Tfxw3fxz+HMEr2Oq6Vcw3WmXgSRjFcW00VxC4WSGWORVYeZ/G9v2f8A9nL4ZeIPjF8YvH\ +Xxn8L/AA98L3Xhqx1nWbH4uftSeML2G98YeK9D8EeGrOz8NeCPF2parq11d+KvEmiWccdnZTuHvhJIE\ +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\ +P5X0R/9k=' + $begin 'DesignInfo' + DesignName='array' + Notes='' + Factory='HFSS' + IsSolved=false + 'Nominal Setups'[1: 'Setup1'] + 'Nominal Setup Types'[1: ''] + 'Optimetrics Setups'[0:] + 'Optimetrics Experiment Types'[0:] + Image64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiivn/9ofx/rngfQ/hzpnh28vNI1T4nfGn4a\ +fC5fEen/wBjy3/hqw8S6w93rOq2Nl4g0PULPULx9G0e/s4kuLcpE+qrdfM1uIpc6tSNGnKpO/LHtu+i\ +S829NbLu0tTKtVjQpTqzu4wXTd9Elsrt2Su0u7S1PoCivIv+FbeMv+jgfi7/AOCX4C//ADkqP+FbeMv\ ++jgfi7/4JfgL/APOSqfaT/wCgef30/wD5Mn2tT/oGn99P/wCWHrtFeRf8K28Zf9HA/F3/AMEvwF/+cl\ +R/wrzx3b/6RZ/Hr4jXV5B++tLbxB4b+Dd/oNxcxfPBBrdjoPwv0q+vNIeVUW5istT027khZ0t7+zmKX\ +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' + $end 'DesignInfo' +$end 'ProjectPreview' diff --git a/_unittest/test_13_LoadAEDTFile.py b/_unittest/test_13_LoadAEDTFile.py index 6275db20772..792b6d17dfc 100644 --- a/_unittest/test_13_LoadAEDTFile.py +++ b/_unittest/test_13_LoadAEDTFile.py @@ -171,3 +171,46 @@ def test_08_add_material_from_amat(self, mat1): assert newmat.youngs_modulus.value == "195000000000" assert newmat.poissons_ratio.value == "0.3" assert newmat.thermal_expansion_coefficient.value == "1.08e-05" + + def test_09_3dcomponents_array(self): + array_file = os.path.join(local_path, "example_models", test_subfolder, "phased_array.aedt") + dd = load_entire_aedt_file(array_file) + dd_array = dd["AnsoftProject"]["HFSSModel"]["ArrayDefinition"]["ArrayObject"] + cells = [ + [3, 4, 4, 4, 4, 4, 4, 3], + [4, 2, 2, 2, 2, 2, 2, 4], + [4, 2, 1, 1, 1, 1, 2, 4], + [4, 2, 1, 1, 1, 1, 2, 4], + [4, 2, 1, 3, 1, 1, 2, 4], + [4, 2, 1, 1, 1, 1, 2, 4], + [4, 2, 2, 2, 2, 2, 2, 4], + ] + active = [ + [True, True, True, True, True, True, False, False], + [True, True, True, True, True, True, True, False], + [True, True, False, False, False, False, True, False], + [False, True, False, False, False, False, True, False], + [False, True, True, True, True, True, True, False], + [False, False, False, True, True, True, False, False], + [False, False, False, False, False, False, False, False], + ] + rotation = [ + [90, 0, 0, 0, 0, 0, 0, 90], + [270, 0, 0, 0, 0, 0, 0, 90], + [0, 0, 0, 0, 0, 0, 0, 90], + [270, 0, 0, 0, 0, 0, 0, 90], + [270, 0, 0, 0, 0, 0, 0, 90], + [270, 0, 0, 0, 0, 0, 0, 90], + [270, 0, 0, 0, 0, 0, 0, 90], + ] + onecell = {5: [3, 5], 84: [3, 2], 190: [1, 1], 258: [4, 1]} + assert dd_array["Cells"]["rows"] == 7 + assert dd_array["Cells"]["columns"] == 8 + assert dd_array["Cells"]["matrix"] == cells + assert dd_array["Active"]["rows"] == 7 + assert dd_array["Active"]["columns"] == 8 + assert dd_array["Active"]["matrix"] == active + assert dd_array["Rotation"]["rows"] == 7 + assert dd_array["Rotation"]["columns"] == 8 + assert dd_array["Rotation"]["matrix"] == rotation + assert dd_array["PostProcessingCells"] == onecell diff --git a/pyaedt/generic/LoadAEDTFile.py b/pyaedt/generic/LoadAEDTFile.py index 2b7455203c3..7c92cf447f0 100644 --- a/pyaedt/generic/LoadAEDTFile.py +++ b/pyaedt/generic/LoadAEDTFile.py @@ -62,7 +62,15 @@ def load_keyword_in_aedt_file(filename, keyword): _begin_search = re.compile(r"\$begin '(.+)'") # set recognized keywords -_recognized_keywords = ["CurvesInfo", "Sweep Operations", "PropDisplayMap"] +_recognized_keywords = [ + "CurvesInfo", + "Sweep Operations", + "PropDisplayMap", + "Cells", + "Active", + "Rotation", + "PostProcessingCells", +] _recognized_subkeys = ["simple(", "IDMap(", "WireSeg(", "PC("] # global variables @@ -139,7 +147,7 @@ def _decode_recognized_subkeys(sk, d): Returns ------- bool - Returns ``True`` if it finds and decode a recognized value. + Returns ``True`` if it finds and decodes a recognized value, ``False`` otherwise. """ if sk.startswith(_recognized_subkeys[0]): # 'simple(' is at the beginning of the value @@ -180,7 +188,7 @@ def _decode_recognized_subkeys(sk, d): def _decode_recognized_key(keyword, line, d): - """Special decodings for keys belonging to _recognized_keywords + """Special decodings for keys belonging to _recognized_keywords Parameters ---------- @@ -188,14 +196,18 @@ def _decode_recognized_key(keyword, line, d): dictionary key recognized line : str - Line. + The line following the recognized key d : dict Active dictionary. + Returns ------- + bool + Returns ``True`` if it confirms and decodes a recognized key, ``False`` otherwise. """ + global _count if keyword == _recognized_keywords[0]: # 'CurvesInfo' m = re.search(r"\'(\d+)\'\((.*)\)$", line) if m: @@ -204,9 +216,10 @@ def _decode_recognized_key(keyword, line, d): v2 = v.replace("\\'", '"') v3 = _separate_list_elements(v2) d[k] = v3 + else: # pragma: no cover + return False elif keyword == _recognized_keywords[1]: # 'Sweep Operations' d["add"] = [] - global _count line = _all_lines[_count + 1] while line.startswith("add("): d["add"].append(line.replace("add", "").translate({ord(i): None for i in " ()'"}).split(",")) @@ -225,8 +238,55 @@ def _decode_recognized_key(keyword, line, d): temp_list.append("ExtentRect:=") temp_list.append([_parse_value(i) for i in match.group(3).split(", ")]) d["Name"].append(temp_list) + elif keyword in _recognized_keywords[3:6]: # Cells, Active, Rotation + li = _count + line_m = _all_lines[li] + li += 1 + line_n = _all_lines[li] + if line_m[:2] != "m=" or line_n[:2] != "n=": # pragma: no cover + return False + m = int(re.search(r"[m|n]=(\d+)", line_m).group(1)) + d["rows"] = m + n = int(re.search(r"[m|n]=(\d+)", line_n).group(1)) + d["columns"] = n + d["matrix"] = [] + for i in range(m): + li += 1 + r = re.search(r"\$begin 'r(\d+)'", _all_lines[li]) + if not r or i != int(r.group(1)): # pragma: no cover + return False # there should be a row definition + d["matrix"].append([]) + for _ in range(n): + li += 1 + c = re.search(r"c\((.+)\)", _all_lines[li]) + if not c: # pragma: no cover + return False # there should be a column definition + if keyword == "Cells": + c = int(c.group(1)) + elif keyword == "Active": + c = c.group(1).lower() == "true" + elif keyword == "Rotation": + c = int(c.group(1)) * 90 + d["matrix"][i].append(c) + li += 1 + r = re.search(r"\$end 'r(\d+)'", _all_lines[li]) + if not r or i != int(r.group(1)): # pragma: no cover + return False # there should be a row definition + _count = li + elif keyword == _recognized_keywords[6]: # PostProcessingCells + li = _count + while _all_lines[li].startswith("OneCell"): + m = re.search(r"OneCell\((\d+), '(\d+)', '(\d+)'\)", _all_lines[li]) + if m: + try: + d[int(m.group(1))] = [int(m.group(2)), int(m.group(3))] + except ValueError: # pragma: no cover + continue + li += 1 + _count = li - 1 else: # pragma: no cover raise AttributeError("Keyword {} is supposed to be in the recognized_keywords list".format(keyword)) + return True def _decode_subkey(line, d): @@ -346,7 +406,10 @@ def _walk_through_structure(keyword, save_dict): nextlvl_begin_key = b.group(1) _walk_through_structure(nextlvl_begin_key, save_dict[keyword]) elif keyword in _recognized_keywords: - _decode_recognized_key(keyword, line, save_dict[keyword]) + confirmed = _decode_recognized_key(keyword, line, save_dict[keyword]) + if not confirmed: # pragma: no cover + # decode the line normally, since recognized key is not successful + _decode_subkey(line, save_dict[keyword]) else: # decode key _decode_subkey(line, save_dict[keyword]) _count += 1 From b3dddccbc6ffcc2da4e811975db75791d6a648a2 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Thu, 26 Oct 2023 18:48:32 +0200 Subject: [PATCH 26/78] Improve the way the modeler3d is initialited (#3807) Co-authored-by: maxcapodi78 --- pyaedt/modeler/cad/Primitives.py | 24 ++++++++++++++---------- pyaedt/modules/Material.py | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/pyaedt/modeler/cad/Primitives.py b/pyaedt/modeler/cad/Primitives.py index 788ba6310df..f5a1a371b30 100644 --- a/pyaedt/modeler/cad/Primitives.py +++ b/pyaedt/modeler/cad/Primitives.py @@ -75,7 +75,7 @@ def solid_objects(self): list of :class:`pyaedt.modeler.cad.object3d.Object3d` 3D object. """ - self._refresh_solids() + # self._refresh_solids() return [self[name] for name in self.solid_names if self[name]] @property @@ -87,7 +87,7 @@ def sheet_objects(self): list of :class:`pyaedt.modeler.cad.object3d.Object3d` 3D object. """ - self._refresh_sheets() + # self._refresh_sheets() return [self[name] for name in self.sheet_names if self[name]] @property @@ -99,7 +99,7 @@ def line_objects(self): list of :class:`pyaedt.modeler.cad.object3d.Object3d` 3D object. """ - self._refresh_lines() + # self._refresh_lines() return [self[name] for name in self.line_names if self[name]] @property @@ -111,8 +111,8 @@ def point_objects(self): list of :class:`pyaedt.modeler.cad.object3d.Object3d` 3D object. """ - self._refresh_points() - return [self.points[name] for name in self._points] + # self._refresh_points() + return [self.points[name] for name in self.point_names] @property def unclassified_objects(self): @@ -123,8 +123,8 @@ def unclassified_objects(self): list of :class:`pyaedt.modeler.cad.object3d.Object3d` 3D object. """ - self._refresh_unclassified() - return [self[name] for name in self._unclassified if name is not None] + # self._refresh_unclassified() + return [self[name] for name in self.unclassified_names if name is not None] @property def object_list(self): @@ -2859,14 +2859,18 @@ def _refresh_object_types(self): self._all_object_names = self._solids + self._sheets + self._lines + self._points + self._unclassified @pyaedt_function_handler() - def _create_object(self, name, pid=0): + def _create_object(self, name, pid=0, use_cached=False): + if use_cached: + line_names = self._lines + else: + line_names = self.line_names if name in self._points: o = Point(self, name) self.points[name] = o elif name in self.planes.keys(): o = Plane(self, name) self.planes[name] = o - elif name in self.line_names: + elif name in line_names: o = Object3d(self, name) if pid: new_id = pid @@ -2959,7 +2963,7 @@ def _refresh_all_ids_from_aedt_file(self): pid = operations["Operation"][0]["ParentPartID"] except: pass - o = self._create_object(name=attribs["Name"], pid=pid) + o = self._create_object(name=attribs["Name"], pid=pid, use_cached=True) o._part_coordinate_system = attribs["PartCoordinateSystem"] if "NonModel" in attribs["Flags"]: o._model = False diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index e07e596693c..86bc7c9b9b4 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -1102,10 +1102,10 @@ def __init__(self, materials, name, props=None): else: self._props = OrderedDict() if "CoordinateSystemType" in self._props: - self.coordinate_system = self._props["CoordinateSystemType"] + self._coordinate_system = self._props["CoordinateSystemType"] else: self._props["CoordinateSystemType"] = "Cartesian" - self.coordinate_system = "Cartesian" + self._coordinate_system = "Cartesian" if "BulkOrSurfaceType" in self._props: self.bulkorsurface = self._props["BulkOrSurfaceType"] else: From d598b7c3779150bfb6a46f49a94342d47da4eca1 Mon Sep 17 00:00:00 2001 From: SMoraisAnsys <146729917+SMoraisAnsys@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:29:09 +0200 Subject: [PATCH 27/78] CI: remove potential vale warnings (#3806) * CI: use ansys action doc-style * CI: remove potential vale warnings At least since version 2.29.3 of vale, titles are also checked by vale. Thus, multiple warning started appearing due to non deterministic behavior when using multiple (differently-cased) entries for the same terme. The proposed solution consists in reworking the accept.txt file. --- .github/workflows/build_documentation.yml | 19 ++---- doc/styles/Vocab/ANSYS/accept.txt | 76 +++++++++-------------- 2 files changed, 35 insertions(+), 60 deletions(-) diff --git a/.github/workflows/build_documentation.yml b/.github/workflows/build_documentation.yml index 1b2f2b88d8a..a35b6f62d80 100644 --- a/.github/workflows/build_documentation.yml +++ b/.github/workflows/build_documentation.yml @@ -19,22 +19,15 @@ concurrency: jobs: docs-style: - name: Documentation Style Check + name: "Check documentation style" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - - name: Running Vale - uses: errata-ai/vale-action@reviewdog - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: "Check documentation style" + uses: ansys/actions/doc-style@v4 with: - files: doc - reporter: github-pr-check - level: error - filter_mode: nofilter - fail_on_error: true - vale_flags: "--config=doc/.vale.ini" + token: ${{ secrets.GITHUB_TOKEN }} + vale-config: "doc/.vale.ini" + vale-version: "2.29.6" docs_build: runs-on: ubuntu-20.04 diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index 05c0ccba44d..68b407714d1 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -1,51 +1,46 @@ -ANSYS -Ansys -ansys +2D Extractor +2D modeler +3D modeler +_static AEDB -API AEDT -AEDT API -2D Extractor airbox airgap +(?i)Ansys +API autosave busbar busbars Bz -circuit -Circuit -com -COM +[Cc]ircuit +codecov +[Cc]om COM interface -Components -components +[Cc]omponents +Conda CPython DesignXploration docstring -Docstrings -docstrings +[Dd]ocstrings doppler EDB -EDB API +EDT efields EMIT getters globals -gRPC -GRPC +[Gg]gRPC HFSS -HFSS 3D Layout Huray Icepak IronPython +[Ll]ayout limitilines -Layout -layout matplotlib Maxwell 2D Maxwell 3D Maxwell Circuit -Mechanical +[Mm]echanical multiphysics multiplot namespaces @@ -53,52 +48,39 @@ netlist Nexxim numpy numpydoc -optimetrics -Optimetrics +[Oo]ptimetrics padstack padstacks parametrics -polyline +PMs +[Pp]olyline polylines -Polyline Postprocessing -PMs +pwl pyaedt PyAEDT -PyAnsys -PyPI +(?i)PyAnsys +[Pp]y[Pp][Ii] Python +Python.NET pyvista Q2D Extractor -Q3D Extractor Q3D +Q3D Extractor RC +reusability RF RMXprt scipy -Siwave setters +Siwave +Slurm Spyder +Stackup 3D stackups stripline subcircuit +[Tt]oolkits Twin Builder Uncomment vias -_static -pwl -Conda -PyAnsys -codecov -mechanical -reusability -pypi -EDT -pyansys -Slurm -Python.NET -Toolkits -toolkits -3D modeler -2D modeler -Stackup 3D From 853d374c00ac10a745c77791a920ed315ff10a8f Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:16:25 +0100 Subject: [PATCH 28/78] replace "is None"/"is not None" in if statements (#3819) --- pyaedt/modeler/cad/Modeler.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyaedt/modeler/cad/Modeler.py b/pyaedt/modeler/cad/Modeler.py index 44b50ac0ed4..418c20a7889 100644 --- a/pyaedt/modeler/cad/Modeler.py +++ b/pyaedt/modeler/cad/Modeler.py @@ -3521,18 +3521,18 @@ def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_obj >>> oEditor.Split """ - if not plane and not tool or plane and tool: + if plane is None and not tool or plane and tool: self.logger.info("One method to split the objects has to be defined.") return False objects = self.convert_to_selections(objects) all_objs = [i for i in self.object_names] if self._is3d: - if plane and not tool: + if plane is not None and not tool: tool_type = "PlaneTool" tool_entity_id = -1 planes = GeometryOperators.cs_plane_to_plane_str(plane) selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] - elif tool and not plane: + elif tool and plane is None: if isinstance(tool, str): obj = [f for f in self.object_list if f.name == tool][0] obj_name = obj.name @@ -3598,10 +3598,10 @@ def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_obj obj_name, ] else: - if not plane and tool or not plane: + if plane is None and tool or not plane: self.logger.info("For 2D design types only planes can be defined.") return False - elif plane: + elif plane is not None: tool_type = "PlaneTool" tool_entity_id = -1 planes = GeometryOperators.cs_plane_to_plane_str(plane) From d19dc4630b1559f8ab75e95dc9fcab55dbfcd8a0 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:12:59 +0100 Subject: [PATCH 29/78] Improve speed faces are loaded and ids are computed (#3812) * Improve speed faces are loaded and ids are computed * refactoring Modeler3D and Modeler2D classes and inheritance * refactoring Modeler3D and Modeler2D classes and inheritance * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py * Update pyaedt/modeler/cad/Primitives.py * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/Primitives.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Add Split method modification * Add docstring to create_region * Fix codacy --------- Co-authored-by: maxcapodi78 Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> Co-authored-by: Samuel Lopez --- _unittest/test_08_Primitives3D.py | 2 +- pyaedt/hfss.py | 4 +- pyaedt/modeler/cad/Modeler.py | 4879 ---------------------- pyaedt/modeler/cad/Primitives.py | 5826 +++++++++++++++++++++++++-- pyaedt/modeler/cad/Primitives2D.py | 10 +- pyaedt/modeler/cad/Primitives3D.py | 62 +- pyaedt/modeler/cad/components_3d.py | 24 +- pyaedt/modeler/cad/elements3d.py | 27 +- pyaedt/modeler/cad/object3d.py | 46 +- pyaedt/modeler/cad/polylines.py | 2 +- pyaedt/modeler/modeler2d.py | 12 +- pyaedt/modeler/modeler3d.py | 22 +- 12 files changed, 5463 insertions(+), 5453 deletions(-) diff --git a/_unittest/test_08_Primitives3D.py b/_unittest/test_08_Primitives3D.py index d23a7fe61ec..f0250794fd2 100644 --- a/_unittest/test_08_Primitives3D.py +++ b/_unittest/test_08_Primitives3D.py @@ -1770,7 +1770,7 @@ def test_85_insert_layoutcomponent(self): self.aedtapp.solution_type = "Terminal" comp = self.aedtapp.modeler.insert_layout_component(self.layout_component, name=None, parameter_mapping=False) assert isinstance(comp, UserDefinedComponent) - assert len(self.aedtapp.modeler.modeler.user_defined_components[comp.name].parts) == 3 + assert len(self.aedtapp.modeler.user_defined_components[comp.name].parts) == 3 comp2 = self.aedtapp.modeler.insert_layout_component( self.layout_component, name="new_layout", parameter_mapping=True ) diff --git a/pyaedt/hfss.py b/pyaedt/hfss.py index 4eca4251975..99f5473731c 100644 --- a/pyaedt/hfss.py +++ b/pyaedt/hfss.py @@ -5770,8 +5770,8 @@ def get_antenna_ffd_solution_data( self.logger.info("Far field sphere %s is created.", setup_name) component_name = None - if self.solution_type == "SBR+" and self.modeler.modeler.user_defined_component_names: - antenna = self.modeler.user_defined_components[self.modeler.modeler.user_defined_component_names[0]] + if self.solution_type == "SBR+" and self.modeler.user_defined_component_names: + antenna = self.modeler.user_defined_components[self.modeler.user_defined_component_names[0]] if antenna.native_properties["Type"] == "Linked Antenna": component_name = antenna.name diff --git a/pyaedt/modeler/cad/Modeler.py b/pyaedt/modeler/cad/Modeler.py index 418c20a7889..8714124a50b 100644 --- a/pyaedt/modeler/cad/Modeler.py +++ b/pyaedt/modeler/cad/Modeler.py @@ -10,14 +10,8 @@ from __future__ import absolute_import # noreorder from collections import OrderedDict -import copy -import math -import os -import warnings -from pyaedt.application.Variables import decompose_variable_value from pyaedt.generic.DataHandlers import _dict2arg -from pyaedt.generic.constants import AEDT_UNITS from pyaedt.generic.general_methods import PropsManager from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler @@ -26,7 +20,6 @@ from pyaedt.modeler.cad.elements3d import FacePrimitive from pyaedt.modeler.cad.elements3d import VertexPrimitive from pyaedt.modeler.cad.object3d import Object3d -from pyaedt.modeler.cad.polylines import Polyline from pyaedt.modeler.geometry_operators import GeometryOperators @@ -1889,4875 +1882,3 @@ def _oimportexport(self): def projdir(self): """Project directory.""" return self._app.project_path - - -class GeometryModeler(Modeler, object): - """Manages the main AEDT Modeler functionalities for geometry-based designs. - - Parameters - ---------- - app : - Inherited parent object. - is3d : bool, optional - Whether the model is 3D. The default is ``True``. - """ - - def __init__(self, app, is3d=True): - self._app = app - Modeler.__init__(self, app) - # TODO Refactor this as a dictionary with names as key - self._coordinate_systems = [] - self._user_lists = [] - self._planes = [] - self._is3d = is3d - self._solids = [] - self._sheets = [] - self._lines = [] - self._points = [] - self._unclassified = [] - self._all_object_names = [] - self.objects = {} - self.user_defined_components = {} - self._object_names_to_ids = {} - - @property - def _odefinition_manager(self): - return self._app.odefinition_manager - - @property - def _omaterial_manager(self): - return self._app.omaterial_manager - - @property - def coordinate_systems(self): - """Coordinate Systems.""" - if settings.aedt_version > "2022.2": - cs_names = [i for i in self.oeditor.GetChildNames("CoordinateSystems") if i != "Global"] - for cs_name in cs_names: - props = {} - local_names = [i.name for i in self._coordinate_systems] - if cs_name not in local_names: - if self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Relative": - self._coordinate_systems.append(CoordinateSystem(self, props, cs_name)) - elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Face": - self._coordinate_systems.append(FaceCoordinateSystem(self, props, cs_name)) - elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Object": - self._coordinate_systems.append(ObjectCoordinateSystem(self, props, cs_name)) - return self._coordinate_systems - if not self._coordinate_systems: - self._coordinate_systems = self._get_coordinates_data() - return self._coordinate_systems - - @property - def user_lists(self): - """User Lists.""" - if not self._user_lists: - self._user_lists = self._get_lists_data() - return self._user_lists - - @property - def planes(self): - """Planes.""" - if not self._planes: - self._planes = self._get_planes_data() - return self._planes - - @property - def oeditor(self): - """Aedt oEditor Module. - - References - ---------- - - >>> oEditor = oDesign.SetActiveEditor("3D Modeler")""" - - return self._app.oeditor - - @property - def materials(self): - """Material library used in the project. - - Returns - ------- - :class:`pyaedt.modules.MaterialLib.Materials` - - """ - return self._app.materials - - def _get_coordinates_data(self): # pragma: no cover - coord = [] - id2name = {1: "Global"} - name2refid = {} - if self._app.design_properties and "ModelSetup" in self._app.design_properties: - cs = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] - for ds in cs: - try: - if isinstance(cs[ds], (OrderedDict, dict)): - if cs[ds]["OperationType"] == "CreateRelativeCoordinateSystem": - props = cs[ds]["RelativeCSParameters"] - name = cs[ds]["Attributes"]["Name"] - cs_id = cs[ds]["ID"] - id2name[cs_id] = name - name2refid[name] = cs[ds]["ReferenceCoordSystemID"] - coord.append(CoordinateSystem(self, props, name)) - if "ZXZ" in props["Mode"]: - coord[-1].mode = "zxz" - elif "ZYZ" in props["Mode"]: - coord[-1].mode = "zyz" - else: - coord[-1].mode = "axis" - elif cs[ds]["OperationType"] == "CreateFaceCoordinateSystem": - name = cs[ds]["Attributes"]["Name"] - cs_id = cs[ds]["ID"] - id2name[cs_id] = name - op_id = cs[ds]["PlaceHolderOperationID"] - geometry_part = self._app.design_properties["ModelSetup"]["GeometryCore"][ - "GeometryOperations" - ]["ToplevelParts"]["GeometryPart"] - if isinstance(geometry_part, (OrderedDict, dict)): - op = geometry_part["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(geometry_part, list): - for gp in geometry_part: - op = gp["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(cs[ds], list): - for el in cs[ds]: - if el["OperationType"] == "CreateRelativeCoordinateSystem": - props = el["RelativeCSParameters"] - name = el["Attributes"]["Name"] - cs_id = el["ID"] - id2name[cs_id] = name - name2refid[name] = el["ReferenceCoordSystemID"] - coord.append(CoordinateSystem(self, props, name)) - if "ZXZ" in props["Mode"]: - coord[-1].mode = "zxz" - elif "ZYZ" in props["Mode"]: - coord[-1].mode = "zyz" - else: - coord[-1].mode = "axis" - elif el["OperationType"] == "CreateFaceCoordinateSystem": - name = el["Attributes"]["Name"] - cs_id = el["ID"] - id2name[cs_id] = name - op_id = el["PlaceHolderOperationID"] - geometry_part = self._app.design_properties["ModelSetup"]["GeometryCore"][ - "GeometryOperations" - ]["ToplevelParts"]["GeometryPart"] - if isinstance(geometry_part, (OrderedDict, dict)): - op = geometry_part["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(geometry_part, list): - for gp in geometry_part: - try: - op = gp["Operations"]["FaceCSHolderOperation"] - except KeyError: - continue - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - except: - pass - for cs in coord: - if isinstance(cs, CoordinateSystem): - try: - cs._ref_cs = id2name[name2refid[cs.name]] - except: - pass - coord.reverse() - return coord - - def _get_lists_data(self): - """Retrieve user object list data. - - Returns - ------- - [Dict with List information] - """ - design_lists = [] - if self._app.design_properties and self._app.design_properties.get("ModelSetup", None): - key1 = "GeometryOperations" - key2 = "GeometryEntityLists" - key3 = "GeometryEntityListOperation" - try: - entity_list = self._app.design_properties["ModelSetup"]["GeometryCore"][key1][key2] - if entity_list: - geom_entry = copy.deepcopy(entity_list[key3]) - if isinstance(geom_entry, (dict, OrderedDict)): - geom_entry = [geom_entry] - for data in geom_entry: - props = {} - name = data["Attributes"]["Name"] - props["ID"] = data["ID"] - props["Type"] = data["GeometryEntityListParameters"]["EntityType"] - if props["Type"] == "Object": - name_list = [] - for element in data["GeometryEntityListParameters"]["EntityList"]: - element_name = self.oeditor.GetObjectNameByID(int(element)) - name_list.append(element_name) - props["List"] = name_list - else: - props["List"] = data["GeometryEntityListParameters"]["EntityList"] - design_lists.append(Lists(self, props, name)) - except: - self.logger.info("Lists were not retrieved from AEDT file") - return design_lists - - def _get_planes_data(self): - """Retrieve planes data. - - Returns - ------- - [Dict with List information] - """ - try: - return { - plane_name: self.oeditor.GetChildObject(plane_name) - for plane_name in self.oeditor.GetChildNames("Planes") - } - except TypeError: - return {} - - def __get__(self, instance, owner): - self._app = instance - return self - - @property - def model_units(self): - """Model units as a string. For example ``"mm"``. - - References - ---------- - - >>> oEditor.GetModelUnits - >>> oEditor.SetModelUnits - """ - return self.oeditor.GetModelUnits() - - @model_units.setter - def model_units(self, units): - assert units in AEDT_UNITS["Length"], "Invalid units string {0}.".format(units) - self.oeditor.SetModelUnits(["NAME:Units Parameter", "Units:=", units, "Rescale:=", False]) - - @property - def selections(self): - """Selections. - - References - ---------- - - >>> oEditor.GetSelections - """ - return self.oeditor.GetSelections() - - @property - def obounding_box(self): - """Bounding box. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - return self.oeditor.GetModelBoundingBox() - - @pyaedt_function_handler() - def fit_all(self): - """Fit all. - - References - ---------- - - >>> oEditor.FitAll - """ - self.oeditor.FitAll() - - @property - def dimension(self): - """Dimensions. - - Returns - ------- - str - Dimensionality, which is either ``"2D"`` or ``"3D"``. - - References - ---------- - - >>> oDesign.Is2D - """ - try: - if self._odesign.Is2D(): - return "2D" - else: - return "3D" - except: - if self.design_type == "2D Extractor": - return "2D" - else: - return "3D" - - @property - def design_type(self): - """Design type. - - References - ---------- - - >>> oDesign.GetDesignType - """ - return self._app.design_type - - @property - def geometry_mode(self): - """Geometry mode. - - References - ---------- - - >>> oDesign.GetGeometryMode""" - return self._odesign.GetGeometryMode() - - @property - def solid_bodies(self): - """List of Object Names. - - .. note:: - Non-model objects are also returned. - - Returns - ------- - list os str - List of object names with the object name as the key. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - """ - if self.dimension == "3D": - objects = self.oeditor.GetObjectsInGroup("Solids") - else: - objects = self.oeditor.GetObjectsInGroup("Sheets") - return list(objects) - - @pyaedt_function_handler() - def _find_perpendicular_points(self, face): - if isinstance(face, str): - vertices = [i.position for i in self[face].vertices] - else: - vertices = [] - for vertex in list(self.oeditor.GetVertexIDsFromFace(face)): - vertices.append([float(i) for i in list(self.oeditor.GetVertexPosition(vertex))]) - assert len(vertices) > 2, "Automatic A-B Assignment can be done only on face with more than 2 vertices." - origin = vertices[0] - a_end = [] - b_end = [] - tol = 1e-10 - for v in vertices[1:]: - edge1 = GeometryOperators.v_points(origin, v) - for v2 in vertices[1:]: - if v2 != v: - edge2 = GeometryOperators.v_points(origin, v2) - if abs(GeometryOperators.v_dot(edge1, edge2)) < tol: - a_end = v - b_end = v2 - break - if a_end: - break - if not a_end: - a_end = vertices[1] - b_end = vertices[2] - return False, (origin, a_end, b_end) - return True, (origin, a_end, b_end) - - @pyaedt_function_handler() - def cover_lines(self, selection): - """Cover a closed line and transform it to sheet. - - Parameters - ---------- - selection : str, int - Polyline object to cover. - Returns - ------- - bool - - References - ---------- - - >>> oEditor.CoverLines - """ - obj_to_cover = self.convert_to_selections(selection, False) - self.oeditor.CoverLines(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) - return True - - @pyaedt_function_handler() - def cover_faces(self, selection): - """Cover a sheet. - - Parameters - ---------- - selection : str, int - Sheet object to cover. - Returns - ------- - bool - - References - ---------- - - >>> oEditor.CoverLines - """ - obj_to_cover = self.convert_to_selections(selection, False) - self.oeditor.CoverSurfaces(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) - return True - - @pyaedt_function_handler() - def create_coordinate_system( - self, - origin=None, - reference_cs="Global", - name=None, - mode="axis", - view="iso", - x_pointing=None, - y_pointing=None, - psi=0, - theta=0, - phi=0, - u=None, - ): - """Create a coordinate system. - - Parameters - ---------- - origin : list - List of ``[x, y, z]`` coordinates for the origin of the - coordinate system. The default is ``None``, in which case - ``[0, 0, 0]`` is used. - reference_cs : str, optional - Name of the reference coordinate system. The default is - ``"Global"``. - name : str - Name of the coordinate system. The default is ``None``. - mode : str, optional - Definition mode. Options are ``"view"``, ``"axis"``, - ``"zxz"``, ``"zyz"``, and ``"axisrotation"``. The default - is ``"axis"``. Enumerator ``pyaedt.generic.constants.CSMODE`` can be used. - - * If ``mode="view"``, specify ``view``. - * If ``mode="axis"``, specify ``x_pointing`` and ``y_pointing``. - * If ``mode="zxz"`` or ``mode="zyz"``, specify ``phi``, ``theta``, and ``psi``. - * If ``mode="axisrotation"``, specify ``theta`` and ``u``. - - Parameters not needed by the specified mode are ignored. - The default mode, ``"axis"``, is a coordinate system parallel to the - global coordinate system centered in the global origin. - - view : str, int optional - View for the coordinate system if ``mode="view"``. Options - are ``"XY"``, ``"XZ"``, ``"XY"``, ``"iso"``, ``None``, and - ``"rotate"`` (obsolete). The default is ``"iso"``. - Enumerator ``pyaedt.generic.constants.VIEW`` can be used. - - .. note:: - For backward compatibility, ``mode="view"`` and ``view="rotate"`` are the same as - ``mode="axis"``. Because the "rotate" option in the "view" mode is obsolete, use - ``mode="axis"`` instead. - - x_pointing : list, optional - List of the ``[x, y, z]`` coordinates specifying the X axis - pointing in the global coordinate system if ``mode="axis"``. - The default is ``[1, 0, 0]``. - y_pointing : list, optional - List of the ``[x, y, z]`` coordinates specifying the Y axis - pointing in the global coordinate system if ``mode="axis"``. - The default is ``[0, 1, 0]``. - phi : float, optional - Euler angle phi in degrees if ``mode="zxz"`` or ``mode="zyz"``. - The default is ``0``. - theta : float, optional - Euler angle theta or rotation angle in degrees if ``mode="zxz"``, - ``mode="zyz"``, or ``mode="axisrotation"``. The default is ``0``. - psi : float, optional - Euler angle psi in degrees if ``mode="zxz"`` or ``mode="zyz"``. - The default is ``0``. - u : list - List of the ``[ux, uy, uz]`` coordinates for the rotation axis - if ``mode="zxz"``. The default is ``[1, 0, 0]``. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.CoordinateSystem` - Created coordinate system. - - References - ---------- - - >>> oEditor.CreateRelativeCS - """ - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: - raise AttributeError("A coordinate system with the specified name already exists!") - - cs = CoordinateSystem(self) - if cs: - result = cs.create( - origin=origin, - reference_cs=reference_cs, - name=name, - mode=mode, - view=view, - x_pointing=x_pointing, - y_pointing=y_pointing, - phi=phi, - theta=theta, - psi=psi, - u=u, - ) - if result: - return cs - return False - - @pyaedt_function_handler() - def create_face_coordinate_system( - self, face, origin, axis_position, axis="X", name=None, offset=None, rotation=0, always_move_to_end=True - ): - """Create a face coordinate system. - The face coordinate has always the Z axis parallel to face normal. - The X and Y axis lie on the face plane. - - Parameters - ---------- - face : int, FacePrimitive - Face where the coordinate system is defined. - origin : int, FacePrimitive, EdgePrimitive, VertexPrimitive - Specify the coordinate system origin. The origin must belong to the face where the - coordinate system is defined. - If a face is specified, the origin is placed on the face center. It must be the same as ``face``. - If an edge is specified, the origin is placed on the edge midpoint. - If a vertex is specified, the origin is placed on the vertex. - axis_position : int, FacePrimitive, EdgePrimitive, VertexPrimitive - Specify where the X or Y axis is pointing. The position must belong to the face where the - coordinate system is defined. - Select which axis is considered with the option ``axis``. - If a face is specified, the position is placed on the face center. It must be the same as ``face``. - If an edge is specified, the position is placed on the edce midpoint. - If a vertex is specified, the position is placed on the vertex. - axis : str, optional - Select which axis is considered for positioning. Possible values are ``"X"`` and ``"Y"``. - The default is ``"X"``. - name : str, optional - Name of the coordinate system. The default is ``None``. - offset : list, optional - List of the ``[x, y]`` coordinates specifying the offset of the coordinate system origin. - The offset specified in the face coordinate system reference. - The default is ``[0, 0]``. - rotation : float, optional - Rotation angle of the coordinate system around its Z axis. Angle is in degrees. - The default is ``0``. - always_move_to_end : bool, optional - If ``True`` the Face Coordinate System creation operation will always be moved to the end of subsequent - objects operation. This will guarantee that the coordinate system will remain solidal with the object - face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.FaceCoordinateSystem` - - """ - - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: # pragma: no cover - raise AttributeError("A coordinate system with the specified name already exists!") - - cs = FaceCoordinateSystem(self) - if cs: - result = cs.create( - face=face, - origin=origin, - axis_position=axis_position, - axis=axis, - name=name, - offset=offset, - rotation=rotation, - always_move_to_end=always_move_to_end, - ) - - if result: - return cs - return False - - @pyaedt_function_handler() - def create_object_coordinate_system( - self, obj, origin, x_axis, y_axis, move_to_end=True, reverse_x_axis=False, reverse_y_axis=False, name=None - ): - """Create an object coordinate system. - - Parameters - ---------- - obj : str, :class:`pyaedt.modeler.cad.object3d.Object3d` - Object to attach the object coordinate system to. - origin : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Refer to the origin where the object coordinate system is anchored. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the origin coordinate system ``[x, y, z]``. - - x_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Entity that the x axis of the object coordinate system points to. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the point coordinate system ``[x, y, z]`` that the x axis points to. - - y_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Entity that the y axis of the object coordinate system points to. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the point coordinate system ``[x, y, z]`` that the y axis points to. - - move_to_end : bool, optional - If ``True`` the Coordinate System creation operation will always be moved to the end of subsequent - objects operation. This will guarantee that the coordinate system will remain solidal with the object - face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. - reverse_x_axis : bool, optional - Whether the x-axis is in the reverse direction. - The default is ``False``. - reverse_y_axis : bool, optional - Whether the y-axis is in the reverse direction. - The default is ``False``. - name : str, optional - Name of the coordinate system. The default is ``None``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: # pragma: no cover - raise AttributeError("A coordinate system with the specified name already exists.") - - cs = ObjectCoordinateSystem(self, name=name) - if cs: - result = cs.create( - obj=obj, - origin=origin, - x_axis=x_axis, - y_axis=y_axis, - move_to_end=move_to_end, - reverse_x_axis=reverse_x_axis, - reverse_y_axis=reverse_y_axis, - ) - - if result: - return cs - return False - - @pyaedt_function_handler() - def global_to_cs(self, point, ref_cs): - """Transform a point from the global coordinate system to another coordinate system. - - Parameters - ---------- - point : list - List of the ``[x, y, z]`` coordinates to transform. - ref_cs : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be - used. - - Returns - ------- - list - List of the transformed ``[x, y, z]`` coordinates. - - """ - if type(point) is not list or len(point) != 3: - raise AttributeError("Point must be in format [x, y, z].") - try: - point = [float(i) for i in point] - except: - raise AttributeError("Point must be in format [x, y, z].") - if isinstance(ref_cs, BaseCoordinateSystem): - ref_cs_name = ref_cs.name - elif isinstance(ref_cs, str): - ref_cs_name = ref_cs - else: - raise AttributeError("ref_cs must be either a string or a CoordinateSystem object.") - if ref_cs_name == "Global": - return point - cs_names = [i.name for i in self.coordinate_systems] - if ref_cs_name not in cs_names: - raise AttributeError("Specified coordinate system does not exist in the design.") - - def get_total_transformation(p, cs): - idx = cs_names.index(cs) - q = self.coordinate_systems[idx].quaternion - ox = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginX"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - oy = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginY"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - oz = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginZ"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - o = [ox, oy, oz] - refcs = self.coordinate_systems[idx].ref_cs - if refcs == "Global": - p1 = p - else: - p1 = get_total_transformation(p, refcs) - p2 = GeometryOperators.q_rotation_inv(GeometryOperators.v_sub(p1, o), q) - return p2 - - p = get_total_transformation(point, ref_cs_name) - return [round(p[i], 13) for i in range(3)] - - @pyaedt_function_handler() - def set_working_coordinate_system(self, name): - """Set the working coordinate system to another coordinate system. - - Parameters - ---------- - name : str, FaceCoordinateSystem, CoordinateSystem - Name of the coordinate system or ``CoordinateSystem`` object to set as the working - coordinate system. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SetWCS - """ - if isinstance(name, BaseCoordinateSystem): - self.oeditor.SetWCS( - ["NAME:SetWCS Parameter", "Working Coordinate System:=", name.name, "RegionDepCSOk:=", False] - ) - else: - self.oeditor.SetWCS( - ["NAME:SetWCS Parameter", "Working Coordinate System:=", name, "RegionDepCSOk:=", False] - ) - return True - - @pyaedt_function_handler() - def invert_cs(self, coordinate_system, to_global=False): - """Get the inverse translation and the conjugate quaternion of the input coordinate system. - - By defining a new coordinate system with this information, the reference coordinate system - of the input coordinate system is obtained. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. A ``CoordinateSystem`` object can also be - used. - to_global : bool, optional - Whether to compute the inverse transformation of the input coordinate system with - respect to the global coordinate system. The default is ``False``. - - Returns - ------- - list - Origin coordinates. - list - Quaternion. - """ - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - cs_names = [i.name for i in self.coordinate_systems] - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - - if to_global: - o, q = self.reference_cs_to_global(coordinate_system) - o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(o, q)) - q = [q[0], -q[1], -q[2], -q[3]] - else: - q = cs.quaternion - q = [q[0], -q[1], -q[2], -q[3]] - o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(cs.origin, q)) - return o, q - - @pyaedt_function_handler() - def reference_cs_to_global(self, coordinate_system): - """Get the origin and quaternion defining the coordinate system in the global coordinates. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be used. - - Returns - ------- - list - Origin coordinates. - list - Quaternion. - """ - cs_names = [i.name for i in self.coordinate_systems] - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - quaternion = cs.quaternion - origin = cs.origin - ref_cs_name = cs.ref_cs - while ref_cs_name != "Global": - ref_cs = self.coordinate_systems[cs_names.index(ref_cs_name)] - quaternion_ref = ref_cs.quaternion - quaternion = GeometryOperators.q_prod(quaternion_ref, quaternion) - origin_ref = ref_cs.origin - origin = GeometryOperators.v_sum(origin_ref, GeometryOperators.q_rotation(origin, quaternion_ref)) - ref_cs_name = ref_cs.ref_cs - return origin, quaternion - - @pyaedt_function_handler() - def duplicate_coordinate_system_to_global(self, coordinate_system): - """Create a duplicate coordinate system referenced to the global coordinate system. - - Having this coordinate system referenced to the global coordinate - system removes all nested coordinate system dependencies. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be used. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.CoordinateSystem` - Created coordinate system. - - References - ---------- - - >>> oEditor.CreateRelativeCS - """ - cs_names = [i.name for i in self.coordinate_systems] - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - if isinstance(cs, CoordinateSystem): - o, q = self.reference_cs_to_global(coordinate_system) - x, y, _ = GeometryOperators.quaternion_to_axis(q) - reference_cs = "Global" - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - cs = CoordinateSystem(self) - if cs: - result = cs.create( - origin=o, - reference_cs=reference_cs, - name=name, - mode="axis", - x_pointing=x, - y_pointing=y, - ) - if result: - return cs - elif isinstance(cs, FaceCoordinateSystem): - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - face_cs = FaceCoordinateSystem(self, props=cs.props, name=name, face_id=cs.props["FaceID"]) - obj = [obj for obj in self.object_list for face in obj.faces if face.id == face_cs.props["FaceID"]][0] - face = [face for face in obj.faces if face.id == face_cs.props["FaceID"]][0] - if face_cs.props["Origin"]["PositionType"] == "FaceCenter": - origin = face - elif face_cs.props["Origin"]["PositionType"] == "EdgeCenter": - origin = [edge for edge in face.edges if edge.id == face_cs.props["Origin"]["EntityID"]][0] - elif face_cs.props["Origin"]["PositionType"] == "OnVertex": - edge = [ - edge - for edge in face.edges - for vertex in edge.vertices - if vertex.id == face_cs.props["Origin"]["EntityID"] - ][0] - origin = [v for v in edge.vertices if v.id == face_cs.props["Origin"]["EntityID"]][0] - if face_cs.props["AxisPosn"]["PositionType"] == "EdgeCenter": - axis_position = [edge for edge in face.edges if edge.id == face_cs.props["AxisPosn"]["EntityID"]][0] - elif face_cs.props["AxisPosn"]["PositionType"] == "OnVertex": - edge = [ - edge - for edge in face.edges - for vertex in edge.vertices - if vertex.id == face_cs.props["AxisPosn"]["EntityID"] - ][0] - axis_position = [v for v in edge.vertices if v.id == face_cs.props["AxisPosn"]["EntityID"]][0] - if face_cs: - result = face_cs.create( - face=face, - origin=origin, - axis_position=axis_position, - axis=face_cs.props["WhichAxis"], - name=name, - offset=[face_cs["XOffset"], face_cs["YOffset"]], - rotation=decompose_variable_value(face_cs["ZRotationAngle"])[0], - always_move_to_end=face_cs["MoveToEnd"], - ) - if result: - return face_cs - elif isinstance(cs, ObjectCoordinateSystem): - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - obj_cs = ObjectCoordinateSystem(self, props=cs.props, name=name, entity_id=cs.entity_id) - objs_by_name_list = [obj for obj in self.object_list if obj.part_coordinate_system == cs.name] - objs_by_id_list = [o for o in self.object_list if o.id == cs.entity_id] - if objs_by_name_list: - obj = objs_by_name_list[0] - elif objs_by_id_list: - obj = [o for o in self.object_list if o.id == cs.entity_id][0] - if cs.props["Origin"]["PositionType"] != "AbsolutePosition": - if cs.props["Origin"]["PositionType"] == "FaceCenter": - origin = [f for f in obj.faces if f.id == cs.props["Origin"]["EntityID"]][0] - elif ( - cs.props["Origin"]["PositionType"] == "EdgeCenter" - or cs.props["Origin"]["PositionType"] == "ArcCenter" - ): - origin = [e for e in obj.edges if e.id == cs.props["Origin"]["EntityID"]][0] - elif cs.props["Origin"]["PositionType"] == "OnVertex": - origin = [v for v in obj.vertices if v.id == cs.props["Origin"]["EntityID"]][0] - else: - origin = [ - cs.props["Origin"]["XPosition"], - cs.props["Origin"]["YPosition"], - cs.props["Origin"]["ZPosition"], - ] - if "xAxisPos" in cs.props: - if cs.props["xAxisPos"]["PositionType"] == "FaceCenter": - x_axis = [f for f in obj.faces if f.id == cs.props["xAxisPos"]["EntityID"]][0] - elif ( - cs.props["xAxisPos"]["PositionType"] == "EdgeCenter" - or cs.props["xAxisPos"]["PositionType"] == "ArcCenter" - ): - x_axis = [e for e in obj.edges if e.id == cs.props["xAxisPos"]["EntityID"]][0] - elif cs.props["xAxisPos"]["PositionType"] == "OnVertex": - x_axis = [v for v in obj.vertices if v.id == cs.props["xAxisPos"]["EntityID"]][0] - elif "xAxis" in cs.props: - x_axis = [ - cs.props["xAxis"]["xDirection"], - cs.props["xAxis"]["yDirection"], - cs.props["xAxis"]["zDirection"], - ] - if "yAxisPos" in cs.props: - if cs.props["yAxisPos"]["PositionType"] == "FaceCenter": - y_axis = [f for f in obj.faces if f.id == cs.props["yAxisPos"]["EntityID"]][0] - elif ( - cs.props["yAxisPos"]["PositionType"] == "EdgeCenter" - or cs.props["yAxisPos"]["PositionType"] == "ArcCenter" - ): - y_axis = [e for e in obj.edges if e.id == cs.props["yAxisPos"]["EntityID"]][0] - elif cs.props["yAxisPos"]["PositionType"] == "OnVertex": - y_axis = [v for v in obj.vertices if v.id == cs.props["yAxisPos"]["EntityID"]][0] - elif "yAxis" in cs.props: - y_axis = [ - cs.props["yAxis"]["xDirection"], - cs.props["yAxis"]["yDirection"], - cs.props["yAxis"]["zDirection"], - ] - if obj_cs: - result = obj_cs.create( - obj=obj, - origin=origin, - x_axis=x_axis, - y_axis=y_axis, - move_to_end=cs.props["MoveToEnd"], - reverse_x_axis=cs.props["ReverseXAxis"], - reverse_y_axis=cs.props["ReverseYAxis"], - ) - if result: - return obj_cs - return False - - @pyaedt_function_handler() - def set_objects_deformation(self, objects): - """Assign deformation objects to a Workbench link. - - Parameters - ---------- - objects : list - List of the deformation objects to assign to the Workbench link. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oDesign.SetObjectDeformation - """ - self.logger.info("Enabling deformation feedback") - try: - self._odesign.SetObjectDeformation(["EnabledObjects:=", objects]) - except: - self.logger.error("Failed to enable the deformation dependence") - return False - else: - self.logger.info("Successfully enabled deformation feedback") - return True - - @pyaedt_function_handler() - def set_objects_temperature(self, objects, ambient_temp=22, create_project_var=False): - """Assign temperatures to objects. - - The materials assigned to the objects must have a thermal modifier. - - Parameters - ---------- - objects : list - List of objects. - ambient_temp : float, optional - Ambient temperature. The default is ``22``. - create_project_var : bool, optional - Whether to create a project variable for the ambient temperature. - The default is ``False``. If ``True,`` ``$AmbientTemp`` is created. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oDesign.SetObjectTemperature - """ - self.logger.info("Set model temperature and enabling Thermal Feedback") - if create_project_var: - self._app.variable_manager["$AmbientTemp"] = str(ambient_temp) + "cel" - var = "$AmbientTemp" - else: - var = str(ambient_temp) + "cel" - vargs1 = [ - "NAME:TemperatureSettings", - "IncludeTemperatureDependence:=", - True, - "EnableFeedback:=", - True, - "Temperatures:=", - ] - vargs2 = [] - for obj in objects: - mat = self[obj].material_name - th = self._app.materials.check_thermal_modifier(mat) - if th: - vargs2.append(obj) - vargs2.append(var) - if not vargs2: - return False - else: - vargs1.append(vargs2) - try: - self._odesign.SetObjectTemperature(vargs1) - except: - self.logger.error("Failed to enable the temperature dependence") - return False - else: - self.logger.info("Assigned Objects Temperature") - return True - - @pyaedt_function_handler() - def _create_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, portonplane): - """Create a sheet from the edge closest to the object. - - Parameters - ---------- - startobj : str - Name of the starting object. - endobject : str - Name of the ending object. - axisdir : int - Axis direction. Options are ``0`` through ``5``. - portonplane : bool - Whether edges are to be on the plane orthogonal to the axis - direction. - - Returns - ------- - str - Name of the sheet. - list - List of float values of the first edge midpoint. - Point in ``[x, y, z]`` coordinates. - list - List of float values of the second edge midpoint. - Point in ``[x, y, z]`` coordinates. - - """ - out, parallel = self.find_closest_edges(startobj, endobject, axisdir) - port_edges = self.get_equivalent_parallel_edges(out, portonplane, axisdir, startobj, endobject) - if port_edges is None or port_edges is False: - port_edges = [] - for e in out: - edge = self.create_object_from_edge(e) - port_edges.append(edge) - edge_0 = port_edges[0].edges[0] - edge_1 = port_edges[1].edges[0] - sheet_name = port_edges[0].name - point0 = edge_0.midpoint - point1 = edge_1.midpoint - self.connect(port_edges) - return sheet_name, point0, point1 - - @pyaedt_function_handler() - def find_point_around(self, objectname, startposition, offset, plane): - """Find the point around an object. - - Parameters - ---------- - objectname : str - Name of the object. - startposition : list - List of the ``[x, y, z]`` coordinates for the starting - position of the object. - offset : - Offset to apply. - plane : str - Coordinate plane of the arc. Choices are ``"YZ"``, - ``"ZX"``, and ``"XY"``. - - - Returns - ------- - list - List of the ``[x, y, z]`` coordinates for the point. - - """ - position = [0, 0, 0] - angle = 0 - if plane == 0: - while angle <= 360: - position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) - position[1] = startposition[1] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - elif plane == 1: - while angle <= 360: - position[1] = startposition[1] + offset * math.cos(math.pi * angle / 180) - position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - elif plane == 2: - while angle <= 360: - position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) - position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - return position - - @pyaedt_function_handler() - def create_sheet_to_ground(self, objectname, groundname=None, axisdir=0, sheet_dim=1): - """Create a sheet between an object and a ground plane. - - The ground plane must be bigger than the object and perpendicular - to one of the three axes. - - Parameters - ---------- - objectname : str - Name of the object. - groundname : str, optional - Name of the ground. The default is ``None``, in which case the - bounding box is used. - axisdir : int, optional - Axis direction. Options are ``0`` through ``5``. The default is ``0``. - sheet_dim : optional - Sheet dimension in millimeters. The default is ``1``. - - Returns - ------- - int - ID of the sheet created. - - References - ---------- - - >>> oEditor.CreatePolyline - """ - if axisdir > 2: - obj_cent = [-1e6, -1e6, -1e6] - else: - obj_cent = [1e6, 1e6, 1e6] - face_ob = None - for face in self[objectname].faces: - center = face.center - if not center: - continue - if axisdir > 2 and center[axisdir - 3] > obj_cent[axisdir - 3]: - obj_cent = center - face_ob = face - elif axisdir <= 2 and center[axisdir] < obj_cent[axisdir]: - obj_cent = center - face_ob = face - vertex = face_ob.vertices - start = vertex[0].position - - if not groundname: - gnd_cent = [] - bounding = self.get_model_bounding_box() - if axisdir < 3: - for i in bounding[0:3]: - gnd_cent.append(float(i)) - else: - for i in bounding[3:]: - gnd_cent.append(float(i)) - else: - ground_plate = self[groundname] - if axisdir > 2: - gnd_cent = [1e6, 1e6, 1e6] - else: - gnd_cent = [-1e6, -1e6, -1e6] - face_gnd = ground_plate.faces - for face in face_gnd: - center = face.center - if not center: - continue - if axisdir > 2 and center[axisdir - 3] < gnd_cent[axisdir - 3]: - gnd_cent = center - elif axisdir <= 2 and center[axisdir] > gnd_cent[axisdir]: - gnd_cent = center - - axisdist = obj_cent[divmod(axisdir, 3)[1]] - gnd_cent[divmod(axisdir, 3)[1]] - if axisdir < 3: - axisdist = -axisdist - - if divmod(axisdir, 3)[1] == 0: - cs = self._app.PLANE.YZ - vector = [axisdist, 0, 0] - elif divmod(axisdir, 3)[1] == 1: - cs = self._app.PLANE.ZX - vector = [0, axisdist, 0] - elif divmod(axisdir, 3)[1] == 2: - cs = self._app.PLANE.XY - vector = [0, 0, axisdist] - - offset = self.find_point_around(objectname, start, sheet_dim, cs) - p1 = self.create_polyline([start, offset]) - p2 = p1.clone().move(vector) - self.connect([p1, p2]) - - return p1 - - @pyaedt_function_handler() - def _get_faceid_on_axis(self, objname, axisdir): - """Get the ID of the face on the axis. - - Parameters - ---------- - objname : str - Name of the object. - axisdir : int - Axis direction. Options are ``1`` through ``5``. - - Returns - ------- - int - ID of the face. - - """ - faces = self.get_object_faces(objname) - face = None - center = None - for f in faces: - try: - c = self.get_face_center(f) - if not face and c: - face = f - center = c - elif axisdir < 3 and c[axisdir] < center[axisdir]: - face = f - center = c - elif axisdir > 2 and c[axisdir - 3] > center[axisdir - 3]: - face = f - center = c - except: - pass - return face - - @pyaedt_function_handler() - def _create_microstrip_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, vfactor=3, hfactor=5): - def duplicate_and_unite(sheet_name, array1, array2, dup_factor): - status, list = self.duplicate_along_line(sheet_name, array1, dup_factor + 1) - status, list2 = self.duplicate_along_line(sheet_name, array2, dup_factor + 1) - list_unite.extend(list) - list_unite.extend(list2) - self.unite(list_unite) - - tol = 1e-6 - out, parallel = self.find_closest_edges(startobj, endobject, axisdir) - port_edges = self.get_equivalent_parallel_edges(out, True, axisdir, startobj, endobject) - if port_edges is None: - return False - sheet_name = port_edges[0].name - point0 = port_edges[0].edges[0].midpoint - point1 = port_edges[1].edges[0].midpoint - len = port_edges[0].edges[0].length - vect = GeometryOperators.v_points(point1, point0) - l1 = out[0].length - l2 = out[1].length - if l1 < l2: - vect_t = [i * (vfactor - 1) for i in vect] - self.move(port_edges[0], vect_t) - else: - vect_t = [i * (1 - vfactor) for i in vect] - self.move(port_edges[1], vect_t) - - self.connect(port_edges) - list_unite = [sheet_name] - dup_factor = divmod((hfactor + 1), 2)[0] - coeff = float(hfactor - 1) / 2 / dup_factor - - if divmod(axisdir, 3)[1] == 0 and abs(vect[1]) < tol: - duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 0 and abs(vect[2]) < tol: - duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) - elif divmod(axisdir, 3)[1] == 1 and abs(vect[0]) < tol: - duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 1 and abs(vect[2]) < tol: - duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) - elif divmod(axisdir, 3)[1] == 2 and abs(vect[0]) < tol: - duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 2 and abs(vect[1]) < tol: - duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) - - return sheet_name, point0, point1 - - @pyaedt_function_handler() - def get_boundaries_name(self): - """Retrieve all boundary names. - - Returns - ------- - list - List of boundary names. Boundaries with multiple modes will return one - boundary for each mode. - - References - ---------- - - >>> oModule.GetBoundaries - """ - if self._app.design_type == "Icepak": - return list(self._app.odesign.GetChildObject("Thermal").GetChildNames()) - else: - return list(self._app.odesign.GetChildObject("Boundaries").GetChildNames()) - - @pyaedt_function_handler() - def set_object_model_state(self, obj_list, model=True): - """Set a list of objects to either models or non-models. - - Parameters - ---------- - obj_list : list - List of objects IDs or names. - model : bool, optional - Whether to set the objects as models. The default is ``True``. - If ``False``, the objects are set as non-models. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ChangeProperty - """ - selections = self.convert_to_selections(obj_list, True) - arguments = [ - "NAME:AllTabs", - [ - "NAME:Geometry3DAttributeTab", - ["NAME:PropServers"] + selections, - ["NAME:ChangedProps", ["NAME:Model", "Value:=", model]], - ], - ] - self._modeler.oeditor.ChangeProperty(arguments) - return True - - @pyaedt_function_handler() - def get_objects_in_group(self, group): - """Retrieve a list of objects belonging to a group. - - Parameters - ---------- - group : str - Name of the group. - - Returns - ------- - list - List of objects belonging to the group. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - """ - if type(group) is not str: - raise ValueError("Group name must be a string") - group_objs = list(self.oeditor.GetObjectsInGroup(group)) - if not group_objs: - return None - return group_objs - - @pyaedt_function_handler() - def get_group_bounding_box(self, group): - """Retrieve the bounding box of a group. - - Parameters - ---------- - group : str - Name of the group. - - Returns - ------- - list - List of six float values representing the bounding box - in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - >>> oEditor.GetModelBoundingBox - """ - if type(group) is not str: - raise ValueError("Group name must be a string") - group_objs = list(self.oeditor.GetObjectsInGroup(group)) - if not group_objs: - return None - all_objs = self.object_names - objs_to_unmodel = [i for i in all_objs if i not in group_objs] - if objs_to_unmodel: - vArg1 = ["NAME:Model", "Value:=", False] - self._change_geometry_property(vArg1, objs_to_unmodel) - bounding = self.get_model_bounding_box() - self._odesign.Undo() - else: - bounding = self.get_model_bounding_box() - return bounding - - @pyaedt_function_handler() - def convert_to_selections(self, object_id, return_list=False): - """Convert modeler objects. - - This method converts modeler object or IDs to the corresponding - output according to the following scheme: - - ==================== =========================== - ``object_id`` Return value - ==================== =========================== - - ``int`` object name (str) - ``Object3D`` object name (str) - ``FacePrimitive`` int, face ID - ``EdgePrimitive`` int, edge ID - ``str`` return the same ``str`` - - - - If ``object_id`` is a list, a list is returned according - to the table. If ``object_id`` is a single value, a list - of ``length == 1`` is returned (default). - - - If the second argument, ``return_list``, is set to `False` (default), a - string is returned with elements separated by a comma (,)". - - - Parameters - ---------- - object_id : str, int, list - One or more object IDs whose name will be returned. A list can contain - both strings (object names) and integers (object IDs). - return_list : bool, option - Whether to return a list of the selections. The default is - ``False``, in which case a string of the selections is returned. - If ``True``, a list of the selections is returned. - - Returns - ------- - str or list - Name of the objects corresponding to the one or more object IDs passed as arguments. - - """ - if not isinstance(object_id, list): - object_id = [object_id] - objnames = [] - for el in object_id: - if isinstance(el, int) and el in self.objects: - objnames.append(self.objects[el].name) - elif isinstance(el, int): - objnames.append(el) - elif isinstance(el, Object3d): - objnames.append(el.name) - elif isinstance(el, FacePrimitive) or isinstance(el, EdgePrimitive) or isinstance(el, VertexPrimitive): - objnames.append(el.id) - elif isinstance(el, str): - objnames.append(el) - if return_list: - return objnames - else: - return ",".join([str(i) for i in objnames]) - - @pyaedt_function_handler() - def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_objs=False, delete_invalid_objs=True): - """Split a list of objects. - In case of 3D design possible splitting options are plane, Face Primitive, Edge Primitive or Polyline. - In case of 2D design possible splitting option is plane. - - Parameters - ---------- - objects : str, int, or list - One or more objects to split. A list can contain - both strings (object names) and integers (object IDs). - plane : str, optional - Coordinate plane of the cut or the Application.PLANE object. - The default value is ``None``. - Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``. - If plane or tool parameter are not provided the method returns ``False``. - sides : str, optional - Which side to keep. The default is ``"Both"``, in which case - all objects are kept after the split. Options are ``"Both"``, - ``"NegativeOnly"``, and ``"PositiveOnly"``. - tool : str, int, :class:`pyaedt.modeler.cad.elements3d.FacePrimitive`or - :class:`pyaedt.modeler.cad.elements3d.EdgePrimitive`, optional - For 3D design types is the name, ID, face, edge or polyline used to split the objects. - For 2D design types is the name of the plane used to split the objects. - The default value is ``None``. - If plane or tool parameter are not provided the method returns ``False``. - split_crossing_objs : bool, optional - Whether to split crossing plane objects. - The default is ``False``. - delete_invalid_objs : bool, optional - Whether to delete invalid objects. - The default is ``True``. - - Returns - ------- - list of str - List of split object names. - - References - ---------- - - >>> oEditor.Split - """ - if plane is None and not tool or plane and tool: - self.logger.info("One method to split the objects has to be defined.") - return False - objects = self.convert_to_selections(objects) - all_objs = [i for i in self.object_names] - if self._is3d: - if plane is not None and not tool: - tool_type = "PlaneTool" - tool_entity_id = -1 - planes = GeometryOperators.cs_plane_to_plane_str(plane) - selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] - elif tool and plane is None: - if isinstance(tool, str): - obj = [f for f in self.object_list if f.name == tool][0] - obj_name = obj.name - if isinstance(obj, Object3d) and obj.object_type != "Line": - obj = obj.faces[0] - tool_type = "FaceTool" - elif obj.object_type == "Line": - obj = obj.edges[0] - tool_type = "EdgeTool" - elif isinstance(tool, int): - # check whether tool it's an object Id - if tool in self.objects.keys(): - obj = self.objects[tool] - else: - # check whether tool is an Id of an object face - objs = [o for o in self.object_list for f in o.faces if f.id == tool] - if objs: - obj = objs[0] - else: - self.logger.info("Tool must be a sheet object or a face of an object.") - return False - if isinstance(obj, FacePrimitive) or isinstance(obj, Object3d) and obj.object_type != "Line": - obj_name = obj.name - obj = obj.faces[0] - tool_type = "FaceTool" - elif obj.object_type == "Line": - obj_name = obj.name - obj = obj.edges[0] - tool_type = "EdgeTool" - elif isinstance(tool, FacePrimitive): - for o in self.object_list: - for f in o.faces: - if f.id == tool.id: - obj_name = o.name - obj = f - tool_type = "FaceTool" - elif isinstance(tool, EdgePrimitive): - for o in self.object_list: - for e in o.edges: - if e.id == tool.id: - obj_name = o.name - obj = e - tool_type = "EdgeTool" - elif isinstance(tool, Polyline) or tool.object_type != "Line": - for o in self.object_list: - if o.name == tool.name: - obj_name = tool.name - obj = o.edges[0] - tool_type = "EdgeTool" - else: - self.logger.error("Face tool part has to be provided as a string (name) or an int (face id).") - return False - planes = "Dummy" - tool_type = tool_type - tool_entity_id = obj.id - selections = [ - "NAME:Selections", - "Selections:=", - objects, - "NewPartsModelFlag:=", - "Model", - "ToolPart:=", - obj_name, - ] - else: - if plane is None and tool or not plane: - self.logger.info("For 2D design types only planes can be defined.") - return False - elif plane is not None: - tool_type = "PlaneTool" - tool_entity_id = -1 - planes = GeometryOperators.cs_plane_to_plane_str(plane) - selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] - self.oeditor.Split( - selections, - [ - "NAME:SplitToParameters", - "SplitPlane:=", - planes, - "WhichSide:=", - sides, - "ToolType:=", - tool_type, - "ToolEntityID:=", - tool_entity_id, - "SplitCrossingObjectsOnly:=", - split_crossing_objs, - "DeleteInvalidObjects:=", - delete_invalid_objs, - ], - ) - self.refresh_all_ids() - return [objects] + [i for i in self.object_names if i not in all_objs] - - @pyaedt_function_handler() # TODO: Deprecate this and add duplicate as an option in the mirror method. - def duplicate_and_mirror( - self, - objid, - position, - vector, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate and mirror a selection. - - Parameters - ---------- - objid : str, int, or Object3d - Name or ID of the object. - position : float - List of the ``[x, y, z]`` coordinates or - Application.Position object for the selection. - vector : float - List of the ``[x1, y1, z1]`` coordinates or - Application.Position object for the vector. - is_3d_comp : bool, optional - If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - list - List of objects created or an empty list. - - References - ---------- - - >>> oEditor.DuplicateMirror - """ - return self.mirror( - objid, position, vector, duplicate=True, is_3d_comp=is_3d_comp, duplicate_assignment=duplicate_assignment - ) - # selections = self.convert_to_selections(objid) - - @pyaedt_function_handler() - def mirror(self, objid, position, vector, duplicate=False, is_3d_comp=False, duplicate_assignment=True): - """Mirror a selection. - - Parameters - ---------- - objid : str, int, or Object3d - Name or ID of the object. - position : int or float - List of the ``[x, y, z]`` coordinates or the - ``Application.Position`` object for the selection. - duplicate : bool, optional - Whether if duplicate the object before mirror or not. Default is ``False``. - is_3d_comp : bool, optional - Whether the component is 3D. The default is ``False``. If ``True``, the method - tries to return the duplicated list of 3D components. - vector : float - List of the ``[x1, y1, z1]`` coordinates or - the ``Application.Position`` object for the vector. - duplicate_assignment : bool, optional - Whether to duplicate selection assignments. The default is ``True``. - - Returns - ------- - bool, list - List of objects created or ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Mirror - >>> oEditor.DuplicateMirror - """ - selections = self.convert_to_selections(objid) - Xpos, Ypos, Zpos = self._pos_with_arg(position) - Xnorm, Ynorm, Znorm = self._pos_with_arg(vector) - if duplicate: - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:DuplicateToMirrorParameters"] - vArg2.append("DuplicateMirrorBaseX:="), vArg2.append(Xpos) - vArg2.append("DuplicateMirrorBaseY:="), vArg2.append(Ypos) - vArg2.append("DuplicateMirrorBaseZ:="), vArg2.append(Zpos) - vArg2.append("DuplicateMirrorNormalX:="), vArg2.append(Xnorm) - vArg2.append("DuplicateMirrorNormalY:="), vArg2.append(Ynorm) - vArg2.append("DuplicateMirrorNormalZ:="), vArg2.append(Znorm) - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - if is_3d_comp: - orig_3d = [i for i in self.user_defined_component_names] - added_objs = self.oeditor.DuplicateMirror(vArg1, vArg2, vArg3) - self.add_new_objects() - if is_3d_comp: - added_3d_comps = [i for i in self.user_defined_component_names if i not in orig_3d] - if added_3d_comps: - self.logger.info("Found 3D Components Duplication") - return added_3d_comps - return added_objs - else: - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:MirrorParameters"] - vArg2.append("MirrorBaseX:="), vArg2.append(Xpos) - vArg2.append("MirrorBaseY:="), vArg2.append(Ypos) - vArg2.append("MirrorBaseZ:="), vArg2.append(Zpos) - vArg2.append("MirrorNormalX:="), vArg2.append(Xnorm) - vArg2.append("MirrorNormalY:="), vArg2.append(Ynorm) - vArg2.append("MirrorNormalZ:="), vArg2.append(Znorm) - - self.oeditor.Mirror(vArg1, vArg2) - return True - - @pyaedt_function_handler() - def move(self, objid, vector): - """Move objects from a list. - - Parameters - ---------- - objid : list, Position object - List of object IDs. - vector : list - Vector of the direction move. It can be a list of the ``[x, y, z]`` - coordinates or a Position object. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Move - """ - Xvec, Yvec, Zvec = self._pos_with_arg(vector) - szSelections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", szSelections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:TranslateParameters"] - vArg2.append("TranslateVectorX:="), vArg2.append(Xvec) - vArg2.append("TranslateVectorY:="), vArg2.append(Yvec) - vArg2.append("TranslateVectorZ:="), vArg2.append(Zvec) - - if self.oeditor is not None: - self.oeditor.Move(vArg1, vArg2) - return True - - @pyaedt_function_handler() - def duplicate_around_axis( - self, - objid, - cs_axis, - angle=90, - nclones=2, - create_new_objects=True, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate a selection around an axis. - - Parameters - ---------- - objid : list, str, int, Object3d or UserDefinedComponent - Name or ID of the object. - cs_axis : - Coordinate system axis or the Application.AXIS object. - angle : float, optional - Angle rotation in degees. The default is ``90``. - nclones : int, optional - Number of clones. The default is ``2``. - create_new_objects : - Whether to create the copies as new objects. The - default is ``True``. - is_3d_comp : bool, optional - If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - tuple - - References - ---------- - - >>> oEditor.DuplicateAroundAxis - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = [ - "NAME:DuplicateAroundAxisParameters", - "CreateNewObjects:=", - create_new_objects, - "WhichAxis:=", - GeometryOperators.cs_axis_str(cs_axis), - "AngleStr:=", - self._arg_with_dim(angle, "deg"), - "Numclones:=", - str(nclones), - ] - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - added_objs = self.oeditor.DuplicateAroundAxis(vArg1, vArg2, vArg3) - self._duplicate_added_objects_tuple() - if is_3d_comp: - return self._duplicate_added_components_tuple() - return True, list(added_objs) - - def _duplicate_added_objects_tuple(self): - added_objects = self.add_new_objects() - if added_objects: - return True, added_objects - else: - return False, [] - - def _duplicate_added_components_tuple(self): - added_component = self.add_new_user_defined_component() - if added_component: - return True, added_component - else: - return False, [] - - @pyaedt_function_handler() - def duplicate_along_line( - self, - objid, - vector, - nclones=2, - attachObject=False, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate a selection along a line. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - vector : list - List of ``[x1,y1,z1]`` coordinates or the Application.Position object for - the vector. - attachObject : bool, optional - The default is ``False``. - nclones : int, optional - Number of clones. The default is ``2``. - is_3d_comp : bool, optional - If True, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - tuple - - References - ---------- - - >>> oEditor.DuplicateAlongLine - """ - selections = self.convert_to_selections(objid) - Xpos, Ypos, Zpos = self._pos_with_arg(vector) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:DuplicateToAlongLineParameters"] - vArg2.append("CreateNewObjects:="), vArg2.append(not attachObject) - vArg2.append("XComponent:="), vArg2.append(Xpos) - vArg2.append("YComponent:="), vArg2.append(Ypos) - vArg2.append("ZComponent:="), vArg2.append(Zpos) - vArg2.append("Numclones:="), vArg2.append(str(nclones)) - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - self.oeditor.DuplicateAlongLine(vArg1, vArg2, vArg3) - if is_3d_comp: - return self._duplicate_added_components_tuple() - if attachObject: - return True, [] - return self._duplicate_added_objects_tuple() - - @pyaedt_function_handler() - def thicken_sheet(self, objid, thickness, bBothSides=False): - """Thicken the sheet of the selection. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - thickness : float, str - Amount to thicken the sheet by. - bBothSides : bool, optional - Whether to thicken the sheet on both side. The default is ``False``. - - Returns - ------- - pyaedt.modeler.cad.object3d.Object3d - - References - ---------- - - >>> oEditor.ThickenSheet - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:SheetThickenParameters"] - vArg2.append("Thickness:="), vArg2.append(self._arg_with_dim(thickness)) - vArg2.append("BothSides:="), vArg2.append(bBothSides) - - self.oeditor.ThickenSheet(vArg1, vArg2) - - if isinstance(objid, list): - obj_list = [] - for objl in objid: - obj_list.append(self.update_object(objl)) - return obj_list - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_along_normal(self, obj_name, face_id, sweep_value=0.1): - """Sweep the selection along the vector. - - Parameters - ---------- - obj_name : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - face_id : int or list - Face or list of faces to sweep. - sweep_value : float, optional - Sweep value. The default is ``0.1``. - - Returns - ------- - pyaedt.modeler.cad.object3d.Object3d - - References - ---------- - - >>> oEditor.SweepFacesAlongNormal - """ - if not isinstance(face_id, list): - face_id = [face_id] - selections = self.convert_to_selections(obj_name) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:Parameters"] - vArg2.append( - [ - "NAME:SweepFaceAlongNormalToParameters", - "FacesToDetach:=", - face_id, - "LengthOfSweep:=", - self._arg_with_dim(sweep_value), - ] - ) - - objs = self._all_object_names - self.oeditor.SweepFacesAlongNormal(vArg1, vArg2) - self.cleanup_objects() - objs2 = self._all_object_names - obj = [i for i in objs2 if i not in objs] - for el in obj: - self._create_object(el) - if obj: - if len(obj) > 1: - return [self.update_object(self[o]) for o in obj] - else: - return self.update_object(self[obj[0]]) - return False - - @pyaedt_function_handler() - def sweep_along_vector(self, objid, sweep_vector, draft_angle=0, draft_type="Round"): - """Sweep the selection along a vector. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - sweep_vector : float - List of ``[x1, y1, z1]`` coordinates or Application.Position object for - the vector. - draft_angle : float, optional - Draft angle in degrees. The default is ``0``. - draft_type : str - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAlongVector - """ - selections = self.convert_to_selections(objid) - vectorx, vectory, vectorz = self._pos_with_arg(sweep_vector) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:VectorSweepParameters"] - vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) - vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) - vArg2.append("SweepVectorX:="), vArg2.append(vectorx) - vArg2.append("SweepVectorY:="), vArg2.append(vectory) - vArg2.append("SweepVectorZ:="), vArg2.append(vectorz) - - self.oeditor.SweepAlongVector(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_along_path( - self, objid, sweep_object, draft_angle=0, draft_type="Round", is_check_face_intersection=False, twist_angle=0 - ): - """Sweep the selection along a path. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - sweep_object : str, int - Name or ID of the sweep. - draft_angle : float, optional - Draft angle in degrees. The default is ``0``. - draft_type : str - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - is_check_face_intersection : bool, optional - The default is ``False``. - twist_angle : float, optional - Twist angle in degrees. The default is ``0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAlongPath - """ - selections = self.convert_to_selections(objid) + "," + self.convert_to_selections(sweep_object) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:PathSweepParameters"] - vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) - vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) - vArg2.append("CheckFaceFaceIntersection:="), vArg2.append(is_check_face_intersection) - vArg2.append("TwistAngle:="), vArg2.append(str(twist_angle) + "deg") - - self.oeditor.SweepAlongPath(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_around_axis(self, objid, cs_axis, sweep_angle=360, draft_angle=0, number_of_segments=0): - """Sweep the selection around the axis. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - cs_axis : - Coordinate system axis or the Application.AXIS object. - sweep_angle : float - Sweep angle in degrees. The default is ``360``. - draft_angle : float - Draft angle in degrees. The default is ``0``. - number_of_segments : int, optional - Number of segments of the sweep operation. Default is ``0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAroundAxis - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = [ - "NAME:AxisSweepParameters", - "DraftAngle:=", - self._arg_with_dim(draft_angle, "deg"), - "DraftType:=", - "Round", - "CheckFaceFaceIntersection:=", - False, - "SweepAxis:=", - GeometryOperators.cs_axis_str(cs_axis), - "SweepAngle:=", - self._arg_with_dim(sweep_angle, "deg"), - "NumOfSegments:=", - str(number_of_segments), - ] - - self.oeditor.SweepAroundAxis(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def section(self, object_list, plane, create_new=True, section_cross_object=False): - """Section the selection. - - Parameters - ---------- - object_list : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` - One or more objects to section. - plane : str - Coordinate plane or Application.PLANE object. - Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``.' - create_new : bool, optional - The default is ``True``, but this parameter has no effect. - section_cross_object : bool, optional - The default is ``False``, but this parameter has no effect. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Section - """ - section_plane = GeometryOperators.cs_plane_to_plane_str(plane) - - selections = self.convert_to_selections(object_list) - - self.oeditor.Section( - ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], - [ - "NAME:SectionToParameters", - "CreateNewObjects:=", - create_new, - "SectionPlane:=", - section_plane, - "SectionCrossObject:=", - section_cross_object, - ], - ) - self.refresh_all_ids() - return True - - @pyaedt_function_handler() - def separate_bodies(self, object_list, create_group=False): - """Separate bodies of the selection. - - Parameters - ---------- - object_list : list - List of objects to separate. - create_group : bool, optional - Whether to create a group. The default is ``False``. - - Returns - ------- - pyaedt.modeler.Object3d.Object3d, bool - 3D object. - ``False`` when failed. - - References - ---------- - - >>> oEditor.SeparateBody - """ - try: - selections = self.convert_to_selections(object_list) - all_objs = [i for i in self.object_names] - self.oeditor.SeparateBody( - ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], - ["CreateGroupsForNewObjects:=", create_group], - ) - self.refresh_all_ids() - new_objects_list_names = [selections] + [i for i in self.object_names if i not in all_objs] - new_objects_list = [] - for obj in self.object_list: - for new_obj in new_objects_list_names: - if obj.name == new_obj: - new_objects_list.append(obj) - return new_objects_list - except: - return False - - @pyaedt_function_handler() - def rotate(self, objid, cs_axis, angle=90.0, unit="deg"): - """Rotate the selection. - - Parameters - ---------- - objid : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` - ID of the object. - cs_axis - Coordinate system axis or the Application.AXIS object. - angle : float - Angle of rotation. The units, defined by ``unit``, can be either - degrees or radians. The default is ``90.0``. - unit : text, optional - Units for the angle. Options are ``"deg"`` or ``"rad"``. - The default is ``"deg"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Rotate - """ - selections = self.convert_to_selections(objid) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:RotateParameters"] - vArg2.append("RotateAxis:="), vArg2.append(GeometryOperators.cs_axis_str(cs_axis)) - vArg2.append("RotateAngle:="), vArg2.append(self._arg_with_dim(angle, unit)) - - if self.oeditor is not None: - self.oeditor.Rotate(vArg1, vArg2) - - return True - - @pyaedt_function_handler() - def subtract(self, blank_list, tool_list, keep_originals=True, **kwargs): - """Subtract objects. - - Parameters - ---------- - blank_list : str, Object3d, int or List of str, int and Object3d. - List of objects to subtract from. The list can be of - either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. - tool_list : list - List of objects to subtract. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Subtract - """ - if "keepOriginals" in kwargs: - warnings.warn("keepOriginals has been deprecated. use keep_originals.", DeprecationWarning) - keep_originals = kwargs["keepOriginals"] - szList = self.convert_to_selections(blank_list) - szList1 = self.convert_to_selections(tool_list) - - vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] - vArg2 = ["NAME:SubtractParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Subtract(vArg1, vArg2) - if not keep_originals: - self.cleanup_objects() - - return True - - @pyaedt_function_handler() - def imprint(self, blank_list, tool_list, keep_originals=True): - """Imprin an object list on another object list. - - Parameters - ---------- - blank_list : list of Object3d or list of int - List of objects to imprint from. The list can be of - either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. - tool_list : list of Object3d or list of int - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Imprint - """ - szList = self.convert_to_selections(blank_list) - szList1 = self.convert_to_selections(tool_list) - - vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] - vArg2 = ["NAME:ImprintParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Imprint(vArg1, vArg2) - if not keep_originals: - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def _imprint_projection(self, tool_list, keep_originals=True, normal=True, vector_direction=None, distance="1mm"): - szList1 = self.convert_to_selections(tool_list) - - varg1 = ["NAME:Selections", "Selections:=", szList1] - varg2 = [ - "NAME:ImprintProjectionParameters", - "KeepOriginals:=", - keep_originals, - "NormalProjection:=", - normal, - ] - if not normal: - varg2.append("Distance:=") - varg2.append(self._app.value_with_units(distance)) - varg2.append("DirectionX:=") - varg2.append(self._app.value_with_units(vector_direction[0])) - varg2.append("DirectionY:=") - varg2.append(self._app.value_with_units(vector_direction[1])) - varg2.append("DirectionZ:=") - varg2.append(self._app.value_with_units(vector_direction[2])) - - self.oeditor.ImprintProjection(varg1, varg2) - if not keep_originals: - self.cleanup_objects() - return True - - @pyaedt_function_handler - def imprint_normal_projection( - self, - tool_list, - keep_originals=True, - ): - """Imprint the normal projection of objects over a sheet. - - Parameters - ---------- - tool_list : list - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ImprintProjection - """ - return self._imprint_projection(tool_list, keep_originals, True) - - @pyaedt_function_handler - def imprint_vector_projection( - self, - tool_list, - vector_points, - distance, - keep_originals=True, - ): - """Imprint the projection of objects over a sheet with a specified vector and distance. - - Parameters - ---------- - tool_list : list - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - vector_points : list - List of [x,y,z] vector projection. - distance : str, int - Distance of Projection. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ImprintProjection - """ - return self._imprint_projection(tool_list, keep_originals, False, vector_points, distance) - - @pyaedt_function_handler() - def purge_history(self, theList): - """Purge history objects from object names. - - Parameters - ---------- - theList : list - List of object names to purge. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.PurgeHistory - """ - szList = self.convert_to_selections(theList) - - vArg1 = ["NAME:Selections", "Selections:=", szList, "NewPartsModelFlag:=", "Model"] - - self.oeditor.PurgeHistory(vArg1) - return True - - @pyaedt_function_handler() - def get_model_bounding_box(self): - """Retrieve the model bounding box. - - - Returns - ------- - List - List of six float values representing the bounding box - in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - bb = list(self.oeditor.GetModelBoundingBox()) - bound = [float(b) for b in bb] - return bound - - @pyaedt_function_handler() - def unite(self, unite_list, purge=False, keep_originals=False): - """Unite objects from a list. - - Parameters - ---------- - unite_list : list - List of objects. - purge : bool, optional - Purge history after unite. Default is False. - keep_originals : bool, optional - Keep original objects used for the operation. Default is False. - - Returns - ------- - str - The united object that is the first in the list. - - References - ---------- - - >>> oEditor.Unite - """ - slice = min(100, len(unite_list)) - num_objects = len(unite_list) - remaining = num_objects - objs_groups = [] - while remaining > 1: - objs = unite_list[:slice] - szSelections = self.convert_to_selections(objs) - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - vArg2 = ["NAME:UniteParameters", "KeepOriginals:=", keep_originals] - if settings.aedt_version > "2022.2": - vArg2.append("TurnOnNBodyBoolean:=") - vArg2.append(True) - self.oeditor.Unite(vArg1, vArg2) - if szSelections.split(",")[0] in self.unclassified_names: - self.logger.error("Error in uniting objects.") - self._odesign.Undo() - self.cleanup_objects() - return False - elif purge: - self.purge_history(objs[0]) - objs_groups.append(objs[0]) - remaining -= slice - if remaining > 0: - unite_list = unite_list[slice:] - if remaining > 0: - objs_groups.extend(unite_list) - self.cleanup_objects() - if len(objs_groups) > 1: - return self.unite(objs_groups, purge=purge) - self.logger.info("Union of {} objects has been executed.".format(num_objects)) - return self.convert_to_selections(unite_list[0], False) - - @pyaedt_function_handler() - def clone(self, objid): - """Clone objects from a list of object IDs. - - Parameters - ---------- - objid : list - List of object IDs. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - List - List of names of objects cloned when successful. - - References - ---------- - - >>> oEditor.Copy - >>> oEditor.Paste - """ - self.copy(objid) - new_objects = self.paste() - return True, new_objects - - @pyaedt_function_handler() - def copy(self, object_list): - """Copy objects to the clipboard. - - Parameters - ---------- - object_list : list - List of objects (IDs or names). - - Returns - ------- - list - List of names of the objects copied when successful. - - References - ---------- - - >>> oEditor.Copy - """ - # convert to string - - try: - selections = self.convert_to_selections(object_list) - vArg1 = ["NAME:Selections", "Selections:=", selections] - self.oeditor.Copy(vArg1) - return selections - except AttributeError: - self.logger.error("Unable to copy selections to clipboard.") - return None - - @pyaedt_function_handler() - def paste(self): - """Paste objects from the clipboard. - - Returns - ------- - list - List of passed objects. - - References - ---------- - - >>> oEditor.Paste - """ - self.oeditor.Paste() - new_objects = self.add_new_objects() - return new_objects - - @pyaedt_function_handler() - def intersect(self, theList, keep_originals=False, **kwargs): - """Intersect objects from a list. - - Parameters - ---------- - theList : list - List of objects. - keep_originals : bool, optional - Whether to keep the original object. The default is ``False``. - - Returns - ------- - str - Retrieve the resulting 3D Object when succeeded. - - References - ---------- - - >>> oEditor.Intersect - """ - if "keeporiginal" in kwargs: - warnings.warn("keeporiginal has been deprecated. use keep_originals.", DeprecationWarning) - keep_originals = kwargs["keeporiginal"] - unclassified = list(self.oeditor.GetObjectsInGroup("Unclassified")) - szSelections = self.convert_to_selections(theList) - - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - vArg2 = ["NAME:IntersectParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Intersect(vArg1, vArg2) - unclassified1 = list(self.oeditor.GetObjectsInGroup("Unclassified")) - if unclassified != unclassified1: - self._odesign.Undo() - self.logger.error("Error in intersection. Reverting Operation") - return - self.cleanup_objects() - self.logger.info("Intersection Succeeded") - return self.convert_to_selections(theList[0], False) - - @pyaedt_function_handler() - def connect(self, theList): - """Connect objects from a list. - - Parameters - ---------- - theList : list - List of objects. - - Returns - ------- - pyaedt.modeler.Object3d.Object3d, bool - 3D object. - ``False`` when failed. - - References - ---------- - - >>> oEditor.Connect - """ - try: - unclassified_before = list(self.unclassified_names) - szSelections = self.convert_to_selections(theList) - szSelections_list = szSelections.split(",") - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - - self.oeditor.Connect(vArg1) - if unclassified_before != self.unclassified_names: - self._odesign.Undo() - self.logger.error("Error in connection. Reverting Operation") - return False - - self.cleanup_objects() - self.logger.info("Connection Correctly created") - - self.refresh_all_ids() - objects_list_after_connection = [ - obj - for obj in self.object_list - for sel in set(szSelections_list).intersection(self.object_names) - if obj.name == sel - ] - return objects_list_after_connection - except: - return False - - @pyaedt_function_handler() - def chassis_subtraction(self, chassis_part): - """Subtract all non-vacuum objects from the main chassis object. - - Parameters - ---------- - chassis_part : str - Name of the main chassis object. - - References - ---------- - - >>> oEditor.Subtract - """ - self.logger.info("Subtract all objects from Chassis object - exclude vacuum objs") - mat_names = self._omaterial_manager.GetNames() - num_obj_start = self.oeditor.GetNumObjects() - blank_part = chassis_part - # in main code this object will need to be determined automatically eg by name such as chassis or sheer size - self.logger.info("Blank Part in Subtraction = " + str(blank_part)) - """ - check if blank part exists, if not, skip subtraction - """ - tool_parts = list(self.oeditor.GetObjectsInGroup("Solids")) - tool_parts.remove(blank_part) - for mat in mat_names: - if str(mat).lower() == "vacuum": - objnames = self.oeditor.GetObjectsByMaterial(mat) - for obj in objnames: - tool_parts.remove(obj) - # tool_parts_final=list(set(tool_parts).difference(set(objnames))) - tool_parts = ",".join(tool_parts) - num_obj_end = self.oeditor.GetNumObjects() - self.subtract(blank_part, tool_parts, True) - - self.logger.info("Subtraction Objs - Initial: " + str(num_obj_start) + " , Final: " + str(num_obj_end)) - - @pyaedt_function_handler() - def _offset_on_plane(self, i, offset): - """Offset the object on a plane. - - Parameters - ---------- - i : - - offset : - Offset to apply. - - Returns - ------- - tuple - Position of object after offset is applied. - - """ - if i > 7: - off1 = 0 - elif i % 4 == 0 or i % 4 == 1: - off1 = offset - else: - off1 = -offset - if 3 < i < 8: - off2 = 0 - elif i % 2 == 0: - off2 = offset - else: - off2 = -offset - if i < 4: - off3 = 0 - elif i != 4 and i != 7 and i != 8 and i != 11: - off3 = -offset - else: - off3 = +offset - return off1, off2, off3 - - @pyaedt_function_handler() - def check_plane(self, obj, faceposition, offset=1): - """Check for the plane that is defined as the face for an object. - - Parameters - ---------- - obj : str - Name of the object. - faceposition : list - List of the ``[x, y, z]`` coordinates for the position of the face. - offset : optional - Offset to apply. The default is ``1``. - - Returns - ------- - str - Name of the plane. It can be "XY", "XZ" or "YZ". - - """ - - Xvec, Yvec, Zvec = self._pos_with_arg(faceposition) - - if isinstance(obj, int): - obj = self.objects[obj].name - plane = None - found = False - i = 0 - while not found: - off1, off2, off3 = self._offset_on_plane(i, offset) - vArg1 = ["NAME:FaceParameters"] - vArg1.append("BodyName:="), vArg1.append(obj) - vArg1.append("XPosition:="), vArg1.append(Xvec + "+" + self._arg_with_dim(off1)) - vArg1.append("YPosition:="), vArg1.append(Yvec + "+" + self._arg_with_dim(off2)) - vArg1.append("ZPosition:="), vArg1.append(Zvec + "+" + self._arg_with_dim(off3)) - try: - face_id = self.oeditor.GetFaceByPosition(vArg1) - if i < 4: - plane = "XY" - elif i < 8: - plane = "XZ" - else: - plane = "YZ" - found = True - except: - i = i + 1 - if i > 11: - found = True - - return plane - - @pyaedt_function_handler() - def get_matched_object_name(self, search_string): - """Retrieve the name of the matched object. - - Parameters - ---------- - search_string : str - Text string to search for. - - - Returns - ------- - str - Name of the matched object. - - References - ---------- - - >>> oEditor.GetMatchedObjectName - """ - return self.oeditor.GetMatchedObjectName(search_string) - - @pyaedt_function_handler() - def clean_objects_name(self, main_part_name): - """Clean the names of the objects for a main part. - - Parameters - ---------- - main_part_name : str - Name of the main part. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.RenamePart - """ - # import os.path - # (CADPath, CADFilename) = os.path.split(CADFile) - # (CADName, CADExt) = os.path.splitext(CADFilename) - CADSuffix = main_part_name + "_" - objNames = self.oeditor.GetMatchedObjectName(CADSuffix + "*") - for name in objNames: - RenameArgs = {} - RenameArgs["NAME"] = "Rename Data" - RenameArgs["Old Name"] = name - RenameArgs["New Name"] = name.replace(CADSuffix, "") - self.oeditor.RenamePart(RenameArgs) - return True - - @pyaedt_function_handler() - def create_airbox(self, offset=0, offset_type="Absolute", defname="AirBox_Auto"): - """Create an airbox that is as big as the bounding extension of the project. - - Parameters - ---------- - offset : - Double offset value to apply on the airbox faces versus the bounding box. - The default is ``0``. - offset_type : str - Type of the offset. Options are ``"Absolute"`` and ``"Relative"``. - The default is ``"Absolute"``. If ``"Relative"``, the offset input - is between 0 and 100. - defname : str, optional - Name of the airbox. The default is ``"AirBox_Auto"``. - - Returns - ------- - int - ID of the airbox created. - - References - ---------- - - >>> oEditor.CreateBox - """ - self.logger.info("Adding Airbox to the Bounding ") - - bound = self.get_model_bounding_box() - if offset_type == "Absolute": - offset1 = offset2 = offset3 = offset - else: - offset1 = (bound[3] - bound[0]) * offset / 100 - offset2 = (bound[4] - bound[1]) * offset / 100 - offset3 = (bound[5] - bound[2]) * offset / 100 - startpos = self.Position(bound[0] - offset1, bound[1] - offset2, bound[2] - offset3) - - dim = [] - dim.append(bound[3] - bound[0] + 2 * offset1) - dim.append(bound[4] - bound[1] + 2 * offset2) - dim.append(bound[5] - bound[2] + 2 * offset3) - airid = self.create_box(startpos, dim, defname) - return airid - - @pyaedt_function_handler() - def create_air_region(self, x_pos=0, y_pos=0, z_pos=0, x_neg=0, y_neg=0, z_neg=0, is_percentage=True): - """Create an air region. - - Parameters - ---------- - x_pos : float or str, optional - If float, padding in the +X direction in modeler units. - If str, padding with units in the +X direction. - The default is ``0``. - y_pos : float or str, optional - If float, padding in the +Y direction in modeler units. - If str, padding with units in the +Y direction. - The default is ``0``. - z_pos : float or str, optional - If float, padding in the +Z direction in modeler units. - If str, padding with units in the +Z direction. - The default is ``0``. - x_neg : float or str, optional - If float, padding in the -X direction in modeler units. - If str, padding with units in the -X direction. - The default is ``0``. - y_neg : float or str, optional - If float, padding in the -Y direction in modeler units. - If str, padding with units in the -Y direction. - The default is ``0``. - z_neg : float or str, optional - If float, padding in the -Z direction in modeler units. - If str, padding with units in the -Z direction. - The default is ``0``. - is_percentage : bool, optional - Region definition in percentage or absolute value. The default is `True``. - - Returns - ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - 3D object. - - References - ---------- - - >>> oEditor.CreateRegion - """ - return self.create_region([x_pos, y_pos, z_pos, x_neg, y_neg, z_neg], is_percentage) - - @pyaedt_function_handler() - def edit_region_dimensions(self, listvalues): - """Modify the dimensions of the region. - - Parameters - ---------- - listvalues : list - List of the padding percentages along all six directions in - the form ``[+X, -X, +Y, -Y, +Z, -Z]``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ChangeProperty - """ - arg = ["NAME:AllTabs"] - arg2 = ["NAME:Geometry3DCmdTab", ["NAME:PropServers", "Region:CreateRegion:1"]] - arg3 = ["NAME:ChangedProps"] - p = ["+X", "-X", "+Y", "-Y", "+Z", "-Z"] - for label, value in zip(p, listvalues): - padding = [] - padding.append("NAME:" + label + " Padding Data") - padding.append("Value:=") - padding.append(str(value)) - arg3.append(padding) - arg2.append(arg3) - arg.append(arg2) - self.oeditor.ChangeProperty(arg) - return True - - @pyaedt_function_handler() - def create_face_list(self, face_list, name=None): - """Create a list of faces given a list of face ID or a list of objects. - - Parameters - ---------- - face_list : list - List of face ID or list of objects - - name : str, optional - Name of the new list. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.Lists` - List object when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateEntityList - """ - if name: - for i in self.user_lists: - if i.name == name: - self.logger.warning("A List with the specified name already exists!") - return i - face_list = self.convert_to_selections(face_list, True) - user_list = Lists(self) - list_type = "Face" - if user_list: - result = user_list.create( - object_list=face_list, - name=name, - type=list_type, - ) - if result: - return user_list - else: - self._app.logger.error("Wrong object definition. Review object list and type") - return False - else: - self._app.logger.error("User list object could not be created") - return False - - @pyaedt_function_handler() - def create_object_list(self, object_list, name=None): - """Create an object list given a list of object names. - - Parameters - ---------- - object_list : list - List of object names. - name : str, optional - Name of the new object list. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.Lists` - List object when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateEntityList - """ - if name: - for i in self.user_lists: - if i.name == name: - self.logger.warning("A List with the specified name already exists!") - return i - object_list = self.convert_to_selections(object_list, True) - user_list = Lists(self) - list_type = "Object" - if user_list: - result = user_list.create( - object_list=object_list, - name=name, - type=list_type, - ) - if result: - return user_list - else: - self._app.logger.error("Wrong object definition. Review object list and type") - return False - else: - self._app.logger.error("User list object could not be created") - return False - - @pyaedt_function_handler() - def generate_object_history(self, objectname): - """Generate history for the object. - - Parameters - ---------- - objectname : str - Name of the history object. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.GenerateHistory - """ - objectname = self.convert_to_selections(objectname) - self.oeditor.GenerateHistory( - ["NAME:Selections", "Selections:=", objectname, "NewPartsModelFlag:=", "Model", "UseCurrentCS:=", True] - ) - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def create_faceted_bondwire_from_true_surface(self, bondname, bond_direction, min_size=0.2, numberofsegments=8): - """Create a faceted bondwire from an existing true surface bondwire. - - Parameters - ---------- - bondname : str - Name of the bondwire to replace. - bond_direction : list - List of the ``[x, y, z]`` coordinates for the axis direction - of the bondwire. For example, ``[0, 1, 2]``. - min_size : float - Minimum size of the subsegment of the new polyline. The default is ``0.2``. - numberofsegments : int, optional - Number of segments. The default is ``8``. - - Returns - ------- - str - Name of the bondwire created. - """ - old_bondwire = self.get_object_from_name(bondname) - if not old_bondwire: - return False - edges = old_bondwire.edges - faces = old_bondwire.faces - centers = [] - for el in faces: - center = el.center - if center: - centers.append(center) - edgelist = [] - verlist = [] - for el in edges: - ver = el.vertices - if len(ver) < 2: - continue - p1 = ver[0].position - p2 = ver[1].position - p3 = [abs(i - j) for i, j in zip(p1, p2)] - - dir = p3.index(max(p3)) - if dir == bond_direction: - edgelist.append(el) - verlist.append([p1, p2]) - if not edgelist: - self.logger.error("No edges found specified direction. Check again") - return False - connected = [edgelist[0]] - tol = 1e-6 - for edge in edgelist[1:]: - ver = edge.vertices - p1 = ver[0].position - p2 = ver[1].position - for el in connected: - ver1 = el.vertices - p3 = ver1[0].position - p4 = ver1[1].position - dist = GeometryOperators.points_distance(p1, p3) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p1, p4) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p2, p3) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p2, p4) - if dist < tol: - connected.append(edge) - break - new_edges = [] - for edge in connected: - edge_object = self.create_object_from_edge(edge) - new_edges.append(edge_object) - - self.unite(new_edges) - self.generate_object_history(new_edges[0]) - self.convert_segments_to_line(new_edges[0].name) - - edges = new_edges[0].edges - i = 0 - edge_to_delete = [] - first_vert = None - for edge in edges: - ver = edge.vertices - p1 = ver[0].position - p2 = ver[1].position - if not first_vert: - first_vert = p1 - dist = GeometryOperators.points_distance(p1, p2) - if dist < min_size: - edge_to_delete.append(i) - i += 1 - - rad = 1e6 - move_vector = None - for fc in centers: - dist = GeometryOperators.points_distance(fc, first_vert) - if dist < rad: - rad = dist - move_vector = GeometryOperators.v_sub(fc, first_vert) - - P = self.get_existing_polyline(object=new_edges[0]) - - if edge_to_delete: - P.remove_edges(edge_to_delete) - - angle = math.pi * (180 - 360 / numberofsegments) / 360 - - status = P.set_crosssection_properties( - type="Circle", num_seg=numberofsegments, width=(rad * (2 - math.sin(angle))) * 2 - ) - if status: - self.move(new_edges[0], move_vector) - old_bondwire.model = False - return new_edges[0] - else: - return False - - @pyaedt_function_handler() - def get_entitylist_id(self, name): - """Retrieve the ID of an entity list. - - Parameters - ---------- - name : str - Name of the entity list. - - Returns - ------- - int - ID of the entity list. - - References - ---------- - - >>> oEditor.GetEntityListIDByName - """ - id = self.oeditor.GetEntityListIDByName(name) - return id - - @pyaedt_function_handler() - def create_outer_facelist(self, externalobjects, name="outer_faces"): - """Create a face list from a list of outer objects. - - Parameters - ---------- - externalobjects : list - List of outer objects. - name : str, optional - Name of the new list. The default is ``"outer_faces"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - """ - list2 = self.select_allfaces_fromobjects(externalobjects) # find ALL faces of outer objects - self.create_face_list(list2, name) - self.logger.info("Extfaces of thermal model = " + str(len(list2))) - return True - - @pyaedt_function_handler() - def explicitly_subtract(self, diellist, metallist): - """Explicitly subtract all elements in a SolveInside list and a SolveSurface list. - - Parameters - ---------- - diellist : list - List of dielectrics. - metallist : list - List of metals. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Subtract - >>> oEditor.PurgeHistory - """ - self.logger.info("Creating explicit subtraction between objects.") - for el in diellist: - list1 = el - list2 = "" - for el1 in metallist: - list2 = list2 + el1 + "," - for el1 in diellist: - if el1 is not el: - list2 = list2 + el1 + "," - if list2: - list2 = list2[:-1] - self.subtract(list1, list2, True) - self.purge_history(list1) - self.purge_history(list2) - for el in metallist: - list1 = el - list2 = "" - for el1 in metallist: - if el1 is not el: - list2 = list2 + el1 + "," - if list2: - list2 = list2[:-1] - self.subtract(list1, list2, True) - self.purge_history(list1) - self.purge_history(list2) - self.logger.info("Explicit subtraction is completed.") - return True - - @pyaedt_function_handler() - def find_port_faces(self, port_sheets): - """Find the vacuums given a list of input sheets. - - Starting from a list of input sheets, this method creates a list of output sheets - that represent the blank parts (vacuums) and the tool parts of all the intersections - of solids on the sheets. After a vacuum on a sheet is found, a port can be - created on it. - - Parameters - ---------- - port_sheets : list - List of input sheets names. - - Returns - ------- - List - List of output sheets (`2x len(port_sheets)`). - - """ - faces = [] - solids = [s for s in self.solid_objects if s.material_name not in ["vacuum", "air"] and s.model] - for sheet_name in port_sheets: - sheet = self[sheet_name] # get the sheet object - _, cloned = self.clone(sheet) - cloned = self[cloned[0]] - cloned.subtract(solids) - sheet.subtract(cloned) - cloned.name = sheet.name + "_Face1Vacuum" - faces.append(sheet.name) - faces.append(cloned.name) - return faces - - @pyaedt_function_handler() - def get_line_ids(self): - """Create a dictionary of object IDs for the lines in the design with the line name as the key.""" - line_ids = {} - line_list = list(self.oeditor.GetObjectsInGroup("Lines")) - for line_object in line_list: - # TODO Problem with GetObjectIDByName - try: - line_ids[line_object] = str(self.oeditor.GetObjectIDByName(line_object)) - except: - self.logger.warning("Line {} has an invalid ID!".format(line_object)) - return line_ids - - @pyaedt_function_handler() - def get_bounding_dimension(self): - """Retrieve the dimension array of the bounding box. - - Returns - ------- - list - List of three float values representing the bounding box dimensions - in the form ``[dim_x, dim_y, dim_z]``. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - oBoundingBox = list(self.oeditor.GetModelBoundingBox()) - dimensions = [] - dimensions.append(abs(float(oBoundingBox[0]) - float(oBoundingBox[3]))) - dimensions.append(abs(float(oBoundingBox[1]) - float(oBoundingBox[4]))) - dimensions.append(abs(float(oBoundingBox[2]) - float(oBoundingBox[5]))) - return dimensions - - @pyaedt_function_handler() - def get_object_name_from_edge_id(self, edge_id): - """Retrieve the object name for a predefined edge ID. - - Parameters - ---------- - edge_id : int - ID of the edge. - - Returns - ------- - str - Name of the edge if it exists, ``False`` otherwise. - - References - ---------- - - >>> oEditor.GetEdgeIDsFromObject - """ - for object in list(self._object_names_to_ids.keys()): - try: - oEdgeIDs = self.oeditor.GetEdgeIDsFromObject(object) - if str(edge_id) in oEdgeIDs: - return object - except: - return False - return False - - @pyaedt_function_handler() - def get_solving_volume(self): - """Generate a mesh for a setup. - - Returns - ------- - int - ``1`` when successful, ``0`` when failed. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - bound = self.get_model_bounding_box() - volume = abs(bound[3] - bound[0]) * abs(bound[4] - bound[1]) * abs(bound[5] - bound[2]) - volume = str(round(volume, 0)) - return volume - - @pyaedt_function_handler() - def vertex_data_of_lines(self, txtfilter=None): - """Generate a dictionary of line vertex data for all lines contained within the design. - - Parameters - ---------- - txtfilter : str, optional - Text string for filtering. The default is ``None``. When a text string is specified, - line data is generated only if this text string is contained within the line name. - - Returns - ------- - dict - Dictionary of the line name with a list of vertex positions in either 2D or 3D. - - """ - line_data = {} - lines = self.get_line_ids() - if txtfilter is not None: - lines = [n for n in lines if txtfilter in n] - for x in lines: - line_data[x] = self.get_vertices_of_line(x) - - return line_data - - @pyaedt_function_handler() - def get_vertices_of_line(self, sLineName): - """Generate a list of vertex positions for a line object from AEDT in model units. - - Parameters - ---------- - sLineName : str - Name of the line object in AEDT. - - Returns - ------- - list - List of the ``[x, y, (z)]`` coordinates for the 2D or 3D line object. - - References - ---------- - - >>> oEditor.GetVertexIDsFromObject - """ - position_list = [] - - # Get all vertices in the line - vertices_on_line = self.oeditor.GetVertexIDsFromObject(sLineName) - - if settings.aedt_version > "2022.2": - vertices_on_line = vertices_on_line[::-1] - - for x in vertices_on_line: - pos = self.oeditor.GetVertexPosition(x) - if self.design_type == "Maxwell 2D": - if self.geometry_mode == "XY": - position_list.append([float(pos[0]), float(pos[1])]) - else: - position_list.append([float(pos[0]), float(pos[2])]) - else: - position_list.append([float(pos[0]), float(pos[1]), float(pos[2])]) - - return position_list - - @pyaedt_function_handler() - def import_3d_cad( - self, - filename, - healing=False, - refresh_all_ids=True, - import_materials=False, - create_lightweigth_part=False, - group_by_assembly=False, - create_group=True, - separate_disjoints_lumped_object=False, - import_free_surfaces=False, - point_coicidence_tolerance=1e-6, - ): - """Import a CAD model. - - Parameters - ---------- - filename : str - Full path and name of the CAD file. - healing : bool, optional - Whether to perform healing. The default is ``False``, in which - case healing is not performed. - healing : int, optional - Whether to perform healing. The default is ``0``, in which - case healing is not performed. - refresh_all_ids : bool, optional - Whether to refresh all IDs after the CAD file is loaded. The - default is ``True``. Refreshing IDs can take a lot of time in - a big project. - import_materials : bool optional - Either to import material names from the file or not if presents. - create_lightweigth_part : bool ,optional - Either to import lightweight or not. - group_by_assembly : bool, optional - Either import by sub-assembly or individual parts. The default is ``False``. - create_group : bool, optional - Either to create a new group of imported objects. The default is ``True``. - separate_disjoints_lumped_object : bool, optional - Either to automatically separate disjoint parts. The default is ``False``. - import_free_surfaces : bool, optional - Either to import free surfaces parts. The default is ``False``. - point_coicidence_tolerance : float, optional - Tolerance on point. Default is ``1e-6``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Import - """ - - if str(healing) in ["0", "1"]: - warnings.warn( - "Assigning `0` or `1` to `healing` option is deprecated. Assign `True` or `False` instead.", - DeprecationWarning, - ) - vArg1 = ["NAME:NativeBodyParameters"] - vArg1.append("HealOption:="), vArg1.append(int(healing)) - vArg1.append("Options:="), vArg1.append("-1") - vArg1.append("FileType:="), vArg1.append("UnRecognized") - vArg1.append("MaxStitchTol:="), vArg1.append(-1) - vArg1.append("ImportFreeSurfaces:="), vArg1.append(import_free_surfaces) - vArg1.append("GroupByAssembly:="), vArg1.append(group_by_assembly) - vArg1.append("CreateGroup:="), vArg1.append(create_group) - vArg1.append("STLFileUnit:="), vArg1.append("Auto") - vArg1.append("MergeFacesAngle:="), vArg1.append(-1) - vArg1.append("PointCoincidenceTol:="), vArg1.append(point_coicidence_tolerance) - vArg1.append("CreateLightweightPart:="), vArg1.append(create_lightweigth_part) - vArg1.append("ImportMaterialNames:="), vArg1.append(import_materials) - vArg1.append("SeparateDisjointLumps:="), vArg1.append(separate_disjoints_lumped_object) - vArg1.append("SourceFile:="), vArg1.append(filename) - self.oeditor.Import(vArg1) - if refresh_all_ids: - self.refresh_all_ids() - self.logger.info("Step file {} imported".format(filename)) - return True - - @pyaedt_function_handler() - def import_spaceclaim_document(self, SCFile): - """Import a SpaceClaim document. - - Parameters - ---------- - SCFile : - Full path and name of the SpaceClaim file. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateUserDefinedModel - """ - environlist = os.environ - latestversion = "" - for l in environlist: - if "AWP_ROOT" in l: - if l > latestversion: - latestversion = l - if not latestversion: - self.logger.error("SpaceClaim is not found.") - else: - scdm_path = os.path.join(os.environ[latestversion], "scdm") - self.oeditor.CreateUserDefinedModel( - [ - "NAME:UserDefinedModelParameters", - [ - "NAME:Definition", - [ - "NAME:UDMParam", - "Name:=", - "GeometryFilePath", - "Value:=", - '"' + SCFile + '"', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 1, - ], - [ - "NAME:UDMParam", - "Name:=", - "IsSpaceClaimLinkUDM", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - ], - [ - "NAME:Options", - [ - "NAME:UDMParam", - "Name:=", - "Solid Bodies", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Surface Bodies", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Parameters", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Parameter Key", - "Value:=", - '""', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Named Selections", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "Rendering Attributes", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Material Assignment", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Import suppressed for physics objects", - "Value:=", - "0", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Explode Multi-Body Parts", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "SpaceClaim Installation Path", - "Value:=", - '"' + scdm_path + '"', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "Smart CAD Update", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - ], - ["NAME:GeometryParams"], - "DllName:=", - "SCIntegUDM", - "Library:=", - "installLib", - "Version:=", - "2.0", - "ConnectionID:=", - "", - ] - ) - self.refresh_all_ids() - return True - - @pyaedt_function_handler() - def modeler_variable(self, value): - """Modeler variable. - - Parameters - ---------- - value : - - - Returns - ------- - - """ - if isinstance(value, str): - return value - else: - return str(value) + self.model_units - - @pyaedt_function_handler() - def break_spaceclaim_connection(self): # TODO: Need to change this name. Don't use "break". - """Disconnect from the running SpaceClaim instance. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.BreakUDMConnection - """ - args = ["NAME:Selections", "Selections:=", "SpaceClaim1"] - self.oeditor.BreakUDMConnection(args) - return True - - @pyaedt_function_handler() - def load_scdm_in_hfss(self, SpaceClaimFile): - """Load a SpaceClaim file in HFSS. - - Parameters - ---------- - SpaceClaimFile : str - Full path and name of the SpaceClaim file. - - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateUserDefinedModel - >>> oEditor.BreakUDMConnection - """ - self.import_spaceclaim_document(SpaceClaimFile) - self.break_spaceclaim_connection() - return True - - @pyaedt_function_handler() - def get_faces_from_materials(self, mats): - """Select all outer faces given a list of materials. - - Parameters - ---------- - mats : list - List of materials to include in the search for outer - faces. - - Returns - ------- - list - List of all outer faces of the specified materials. - - References - ---------- - - >>> oEditor.GetObjectsByMaterial - >>> oEditor.GetFaceIDs - """ - self.logger.info("Selecting outer faces.") - - sel = [] - objs = [] - if type(mats) is str: - mats = [mats] - for mat in mats: - objs.extend(list(self.oeditor.GetObjectsByMaterial(mat.lower()))) - - for i in objs: - oFaceIDs = self.oeditor.GetFaceIDs(i) - - for face in oFaceIDs: - sel.append(int(face)) - return sel - - @pyaedt_function_handler() - def scale(self, obj_list, x=2.0, y=2.0, z=2.0): - """Scale a list of objects. - - Parameters - ---------- - obj_list : list - List of objects IDs or names. - x : float, optional - Scale factor for X. - y : float, optional - Scale factor for Y. - z : float, optional - Scale factor for Z. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Scale - """ - selections = self.convert_to_selections(obj_list, True) - arg1 = ["NAME:Selections", "Selections:=", ", ".join(selections), "NewPartsModelFlag:=", "Model"] - arg2 = ["NAME:ScaleParameters", "ScaleX:=", str(x), "ScaleY:=", str(y), "ScaleZ:=", str(z)] - self.oeditor.Scale(arg1, arg2) - return True - - @pyaedt_function_handler() - def select_allfaces_fromobjects(self, elements): - """Select all outer faces given a list of objects. - - Parameters - ---------- - elements : list - List of objects to include in the search for outer faces. - - Returns - ------- - List - List of outer faces in the given list of objects. - - References - ---------- - - >>> oEditor.GetFaceIDs - """ - self.logger.info("Selecting outer faces.") - - sel = [] - - for i in elements: - oFaceIDs = self.oeditor.GetFaceIDs(i) - - for face in oFaceIDs: - sel.append(int(face)) - return sel - - @pyaedt_function_handler() - def setunassigned_mats(self): - """Find unassagned objects and set them to non-model. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SetPropertyValue - """ - oObjects = list(self.oeditor.GetObjectsInGroup("Solids")) - for obj in oObjects: - pro = self.oeditor.GetPropertyValue("Geometry3DAttributeTab", obj, "Material") - if pro == '""': - self.oeditor.SetPropertyValue("Geometry3DAttributeTab", obj, "Model", False) - return True - - @pyaedt_function_handler() - def automatic_thicken_sheets(self, inputlist, value, internalExtr=True, internalvalue=1): - """Create thickened sheets for a list of input faces. - - This method automatically checks the direction in which to thicken the sheets. - - Parameters - ---------- - inputlist : list - List of faces. - value : float - Value in millimeters to thicken the sheets. - internalExtr : bool, optional - Whether to extrude sheets internally. The default is ``True``. - internalvalue : float, optional - Value in millimeters to thicken the sheets internally (vgoing into the model). - The default is ``1``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ThickenSheet - """ - aedt_bounding_box = self.get_model_bounding_box() - directions = {} - inputlist = self.convert_to_selections(inputlist, True) - for el in inputlist: - objID = self.oeditor.GetFaceIDs(el) - faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) - directionfound = False - l = 10 - while not directionfound: - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", str(l) + "mm", "BothSides:=", False], - ) - aedt_bounding_box2 = self.get_model_bounding_box() - self._odesign.Undo() - if aedt_bounding_box != aedt_bounding_box2: - directions[el] = "External" - directionfound = True - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(l) + "mm", "BothSides:=", False], - ) - aedt_bounding_box2 = self.get_model_bounding_box() - - self._odesign.Undo() - - if aedt_bounding_box != aedt_bounding_box2: - directions[el] = "Internal" - directionfound = True - else: - l = l + 10 - for el in inputlist: - objID = self.oeditor.GetFaceIDs(el) - faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) - if directions[el] == "Internal": - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(value) + "mm", "BothSides:=", False], - ) - else: - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", str(value) + "mm", "BothSides:=", False], - ) - if internalExtr: - objID2 = self.oeditor.GetFaceIDs(el) - for fid in objID2: - try: - faceCenter2 = self.oeditor.GetFaceCenter(int(fid)) - if faceCenter2 == faceCenter: - self.oeditor.MoveFaces( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - [ - "NAME:Parameters", - [ - "NAME:MoveFacesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(internalvalue) + "mm", - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "FacesToMove:=", - [int(fid)], - ], - ], - ) - except: - self.logger.info("done") - # self.modeler_oproject.ClearMessages() - return True - - @pyaedt_function_handler() - def move_face(self, faces, offset=1.0): - """Move an input face or a list of input faces of a specific object. - - This method moves a face or a list of faces which belong to the same solid. - - Parameters - ---------- - faces : list - List of Face ID or List of :class:`pyaedt.modeler.Object3d.FacePrimitive` object or mixed. - offset : float, optional - Offset to apply in model units. The default is ``1.0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.MoveFaces - - """ - face_selection = self.convert_to_selections(faces, True) - selection = {} - for f in face_selection: - if self.oeditor.GetObjectNameByFaceID(f) in selection: - selection[self.oeditor.GetObjectNameByFaceID(f)].append(f) - else: - selection[self.oeditor.GetObjectNameByFaceID(f)] = [f] - - arg1 = [ - "NAME:Selections", - "Selections:=", - self.convert_to_selections(list(selection.keys()), False), - "NewPartsModelFlag:=", - "Model", - ] - arg2 = ["NAME:Parameters"] - for el in list(selection.keys()): - arg2.append( - [ - "NAME:MoveFacesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(offset) + self.model_units, - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "FacesToMove:=", - selection[el], - ] - ) - self.oeditor.MoveFaces(arg1, arg2) - return True - - @pyaedt_function_handler() - def move_edge(self, edges, offset=1.0): - """Move an input edge or a list of input edges of a specific object. - - This method moves an edge or a list of edges which belong to the same solid. - - Parameters - ---------- - edges : list - List of Edge ID or List of :class:`pyaedt.modeler.Object3d.EdgePrimitive` object or mixed. - offset : float, optional - Offset to apply in model units. The default is ``1.0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.MoveEdges - - """ - edge_selection = self.convert_to_selections(edges, True) - selection = {} - for f in edge_selection: - if self.oeditor.GetObjectNameByEdgeID(f) in selection: - selection[self.oeditor.GetObjectNameByEdgeID(f)].append(f) - else: - selection[self.oeditor.GetObjectNameByEdgeID(f)] = [f] - - arg1 = [ - "NAME:Selections", - "Selections:=", - self.convert_to_selections(list(selection.keys()), False), - "NewPartsModelFlag:=", - "Model", - ] - arg2 = ["NAME:Parameters"] - for el in list(selection.keys()): - arg2.append( - [ - "NAME:MoveEdgesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(offset) + self.model_units, - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "EdgesToMove:=", - selection[el], - ] - ) - self.oeditor.MoveEdges(arg1, arg2) - return True - - class Position: - """Position. - - Parameters - ---------- - args : list or int - Position of the item as either a list of the ``[x, y, z]`` coordinates - or three separate values. If no or insufficient arguments - are specified, ``0`` is applied. - - """ - - @pyaedt_function_handler() - def __getitem__(self, item): - if item == 0: - return self.X - elif item == 1: - return self.Y - elif item == 2: - return self.Z - else: - raise IndexError - - @pyaedt_function_handler() - def __setitem__(self, item, value): - if item == 0: - self.X = value - elif item == 1: - self.Y = value - elif item == 2: - self.Z = value - - def __len__(self): - return 3 - - def __init__(self, *args): - if len(args) == 1 and type(args[0]) is list: - try: - self.X = args[0][0] - except: - self.X = 0 - try: - self.Y = args[0][1] - except: - self.Y = 0 - try: - self.Z = args[0][2] - except: - self.Z = 0 - else: - try: - self.X = args[0] - except: - self.X = 0 - try: - self.Y = args[1] - except: - self.Y = 0 - try: - self.Z = args[2] - except: - self.Z = 0 - - class SweepOptions(object): - """Manages sweep options. - - Parameters - ---------- - draftType : str, optional - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - draftAngle : str, optional - Draft angle with units. The default is ``"0deg"``. - twistAngle : str, optional - Twist angle with units. The default is ``"0deg"``. - - """ - - @pyaedt_function_handler() - def __init__(self, draftType="Round", draftAngle="0deg", twistAngle="0deg"): - self.DraftType = draftType - self.DraftAngle = draftAngle - self.TwistAngle = twistAngle - - @pyaedt_function_handler() - def create_group(self, objects=None, components=None, groups=None, group_name=None): - """Group objects or groups into one group. - - At least one between ``objects``, ``components``, ``groups`` has to be defined. - - Parameters - ---------- - objects : list, optional - List of objects. The default is ``None``, in which case a group - with all objects is created. - components : list, optional - List of 3d components to group. The default is ``None``. - groups : list, optional - List of groups. The default is ``None``. - group_name : str, optional - Name of the new group. The default is ``None``. - It is not possible to choose the name but a name is - assigned automatically. - - Returns - ------- - str - Name assigned to the new group. - - References - ---------- - - >>> oEditor.CreateGroup - """ - if components is None and groups is None and objects is None: - raise AttributeError("At least one between ``objects``, ``components``, ``groups`` has to be defined.") - - all_objects = self.object_names - if objects: - object_selection = self.convert_to_selections(objects, return_list=False) - else: - object_selection = "" - if groups: - group_selection = self.convert_to_selections(groups, return_list=False) - else: - group_selection = "" - if components: - component_selection = self.convert_to_selections(components, return_list=False) - else: - component_selection = "" - - arg = [ - "NAME:GroupParameter", - "ParentGroupID:=", - "Model", - "Parts:=", - object_selection, - "SubmodelInstances:=", - component_selection, - "Groups:=", - group_selection, - ] - assigned_name = self.oeditor.CreateGroup(arg) - if group_name and group_name not in all_objects: - self.oeditor.ChangeProperty( - [ - "NAME:AllTabs", - [ - "NAME:Attributes", - ["NAME:PropServers", assigned_name], - ["NAME:ChangedProps", ["NAME:Name", "Value:=", group_name]], - ], - ] - ) - return group_name - else: - return assigned_name - - @pyaedt_function_handler() - def ungroup(self, groups): - """Ungroup one or more groups. - - Parameters - ---------- - groups : list - List of group names. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Ungroup - """ - group_list = self.convert_to_selections(groups, return_list=True) - arg = ["Groups:=", group_list] - self.oeditor.Ungroup(arg) - return True - - @pyaedt_function_handler() - def flatten_assembly(self): - """Flatten the assembly, removing all group trees. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.FlattenGroup - """ - self.oeditor.FlattenGroup(["Groups:=", ["Model"]]) - return True - - @pyaedt_function_handler() - def wrap_sheet(self, sheet_name, object_name, imprinted=False): - """Execute the sheet wrapping around an object. - If wrapping produces an unclassified operation it will be reverted. - - Parameters - ---------- - sheet_name : str, :class:`pyaedt.modeler.Object3d.Object3d` - Sheet name or sheet object. - object_name : str, :class:`pyaedt.modeler.Object3d.Object3d` - Object name or solid object. - imprinted : bool, optional - Either if imprint or not over the sheet. Default is ``False``. - - Returns - ------- - bool - Command execution status. - """ - sheet_name = self.convert_to_selections(sheet_name, False) - object_name = self.convert_to_selections(object_name, False) - - if sheet_name not in self.sheet_names: - self.logger.error("{} is not a valid sheet.".format(sheet_name)) - return False - if object_name not in self.solid_names: - self.logger.error("{} is not a valid solid body.".format(object_name)) - return False - unclassified = [i for i in self.unclassified_objects] - self.oeditor.WrapSheet( - ["NAME:Selections", "Selections:=", "{},{}".format(sheet_name, object_name)], - ["NAME:WrapSheetParameters", "Imprinted:=", imprinted], - ) - is_unclassified = [i for i in self.unclassified_objects if i not in unclassified] - if is_unclassified: - self.logger.error("Failed to Wrap sheet. Reverting to original objects.") - self._odesign.Undo() - return False - if imprinted: - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def heal_objects( - self, - input_objects_list, - auto_heal=True, - tolerant_stitch=True, - simplify_geometry=True, - tighten_gaps=True, - heal_to_solid=False, - stop_after_first_stitch_error=False, - max_stitch_tolerance=0.001, - explode_and_stitch=True, - geometry_simplification_tolerance=1, - maximum_generated_radius=1, - simplify_type=0, - tighten_gaps_width=0.00001, - remove_silver_faces=True, - remove_small_edges=True, - remove_small_faces=True, - silver_face_tolerance=1, - small_edge_tolerance=1, - small_face_area_tolerance=1, - bounding_box_scale_factor=0, - remove_holes=True, - remove_chamfers=True, - remove_blends=True, - hole_radius_tolerance=1, - chamfer_width_tolerance=1, - blend_radius_tolerance=1, - allowable_surface_area_change=5, - allowable_volume_change=5, - ): - """Repair invalid geometry entities for the selected objects within the specified tolerance settings. - - Parameters - ---------- - input_objects_list : str - List of object names to analyze. - auto_heal : bool, optional - Auto heal option. Default value is ``True``. - tolerant_stitch : bool, optional - Tolerant stitch for manual healing. The default is ``True``. - simplify_geometry : bool, optional - Simplify geometry for manual healing. The default is ``True``. - tighten_gaps : bool, optional - Tighten gaps for manual healing. The default is ``True``. - heal_to_solid : bool, optional - Heal to solid for manual healing. The default is ``False``. - stop_after_first_stitch_error : bool, optional - Stop after first stitch error for manual healing. The default is ``False``. - max_stitch_tolerance : float, str, optional - Max stitch tolerance for manual healing. The default is ``0.001``. - explode_and_stitch : bool, optional - Explode and stitch for manual healing. The default is ``True``. - geometry_simplification_tolerance : float, str, optional - Geometry simplification tolerance for manual healing in mm. The default is ``1``. - maximum_generated_radius : float, str, optional - Maximum generated radius for manual healing in mm. The default is ``1``. - simplify_type : int, optional - Simplify type for manual healing. The default is ``0`` which refers to ``Curves``. - Other available values are ``1`` for ``Surfaces`` and ``2`` for ``Both``. - tighten_gaps_width : float, str, optional - Tighten gaps width for manual healing in mm. The default is ``0.00001``. - remove_silver_faces : bool, optional - Remove silver faces for manual healing. The default is ``True``. - remove_small_edges : bool, optional - Remove small edges faces for manual healing. The default is ``True``. - remove_small_faces : bool, optional - Remove small faces for manual healing. The default is ``True``. - silver_face_tolerance : float, str, optional - Silver face tolerance for manual healing in mm. The default is ``1``. - small_edge_tolerance : float, str, optional - Silver face tolerance for manual healing in mm. The default is ``1``. - small_face_area_tolerance : float, str, optional - Silver face tolerance for manual healing in mm^2. The default is ``1``. - bounding_box_scale_factor : int, optional - Bounding box scaling factor for manual healing. The default is ``0``. - remove_holes : bool, optional - Remove holes for manual healing. The default is ``True``. - remove_chamfers : bool, optional - Remove chamfers for manual healing. The default is``True``. - remove_blends : bool, optional - Remove blends for manual healing. The default is ``True``. - hole_radius_tolerance : float, str, optional - Hole radius tolerance for manual healing in mm. The default is ``1``. - chamfer_width_tolerance : float, str, optional - Chamfer width tolerance for manual healing in mm. The default is ``1``. - blend_radius_tolerance : float, str, optional - Blend radius tolerance for manual healing in mm. The default is ``1``. - allowable_surface_area_change : float, str, optional - Allowable surface area for manual healing in mm. The default is ``1``. - allowable_volume_change : float, str, optional - Allowable volume change for manual healing in mm. The default is ``1``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if not input_objects_list: - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif not isinstance(input_objects_list, str): - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif "," in input_objects_list: - input_objects_list = input_objects_list.strip() - if ", " in input_objects_list: - input_objects_list_split = input_objects_list.split(", ") - else: - input_objects_list_split = input_objects_list.split(",") - for obj in input_objects_list_split: - if obj not in self.modeler.object_names: - self.logger.error("Provide an object name or a list of object names that exists in current design.") - return False - objects_selection = ",".join(input_objects_list_split) - else: - objects_selection = input_objects_list - - if simplify_type not in [0, 1, 2]: - self.logger.error("Invalid simplify type.") - return False - - selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] - healing_parameters = [ - "NAME:ObjectHealingParameters", - "Version:=", - 1, - "AutoHeal:=", - auto_heal, - "TolerantStitch:=", - tolerant_stitch, - "SimplifyGeom:=", - simplify_geometry, - "TightenGaps:=", - tighten_gaps, - "HealToSolid:=", - heal_to_solid, - "StopAfterFirstStitchError:=", - stop_after_first_stitch_error, - "MaxStitchTol:=", - max_stitch_tolerance, - "ExplodeAndStitch:=", - explode_and_stitch, - "GeomSimplificationTol:=", - geometry_simplification_tolerance, - "MaximumGeneratedRadiusForSimplification:=", - maximum_generated_radius, - "SimplifyType:=", - simplify_type, - "TightenGapsWidth:=", - tighten_gaps_width, - "RemoveSliverFaces:=", - remove_silver_faces, - "RemoveSmallEdges:=", - remove_small_edges, - "RemoveSmallFaces:=", - remove_small_faces, - "SliverFaceTol:=", - silver_face_tolerance, - "SmallEdgeTol:=", - small_edge_tolerance, - "SmallFaceAreaTol:=", - small_face_area_tolerance, - "SpikeTol:=", - -1, - "GashWidthBound:=", - -1, - "GashAspectBound:=", - -1, - "BoundingBoxScaleFactor:=", - bounding_box_scale_factor, - "RemoveHoles:=", - remove_holes, - "RemoveChamfers:=", - remove_chamfers, - "RemoveBlends:=", - remove_blends, - "HoleRadiusTol:=", - hole_radius_tolerance, - "ChamferWidthTol:=", - chamfer_width_tolerance, - "BlendRadiusTol:=", - blend_radius_tolerance, - "AllowableSurfaceAreaChange:=", - allowable_surface_area_change, - "AllowableVolumeChange:=", - allowable_volume_change, - ] - self.oeditor.HealObject(selections_args, healing_parameters) - return True - - @pyaedt_function_handler() - def simplify_objects( - self, - input_objects_list, - simplify_type="Polygon Fit", - extrusion_axis="Auto", - clean_up=True, - allow_splitting=True, - separate_bodies=True, - clone_body=True, - generate_primitive_history=False, - interior_points_on_arc=5, - length_threshold_percentage=25, - create_group_for_new_objects=False, - ): - """Simplify command to converts complex objects into simpler primitives which are easy to mesh and solve. - - Parameters - ---------- - input_objects_list : str - List of object names to simplify. - simplify_type : str, optional - Simplify type. Default value is ``Polygon Fit``. - Available values are ``Polygon Fit`` ``Primitive Fit`` or ``Bounding Box``. - extrusion_axis : str, optional - Extrusion axis. Default value is ``Auto``. - Available values are ``Auto`` ``X``, ``Y`` or ``Z``. - clean_up : bool, optional - Clean up. The default is ``True``. - allow_splitting : bool, optional - Allow splitting. The default is ``True``. - separate_bodies : bool, optional - Separate bodies. The default is ``True``. - clone_body : bool, optional - Clone body. The default is ``True``. - generate_primitive_history : bool, optional - Generate primitive history. - This option will purge the history for selected objects. - The default is ``False``. - interior_points_on_arc : float, optional - Number points on curve. The default is ``5``. - length_threshold_percentage : float, optional - Number points on curve. The default is ``25``. - create_group_for_new_objects : bool, optional - Create group for new objects. The default is ``False``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if not input_objects_list: - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif not isinstance(input_objects_list, str): - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif "," in input_objects_list: - input_objects_list = input_objects_list.strip() - if ", " in input_objects_list: - input_objects_list_split = input_objects_list.split(", ") - else: - input_objects_list_split = input_objects_list.split(",") - for obj in input_objects_list_split: - if obj not in self.modeler.object_names: - self.logger.error("Provide an object name or a list of object names that exists in current design.") - return False - objects_selection = ",".join(input_objects_list_split) - else: - objects_selection = input_objects_list - - if simplify_type not in ["Polygon Fit", "Primitive Fit", "Bounding Box"]: - self.logger.error("Invalid simplify type.") - return False - - if extrusion_axis not in ["Auto", "X", "Y", "Z"]: - self.logger.error("Invalid extrusion axis.") - return False - - selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] - simplify_parameters = [ - "NAME:SimplifyParameters", - "Type:=", - simplify_type, - "ExtrusionAxis:=", - extrusion_axis, - "Cleanup:=", - clean_up, - "Splitting:=", - allow_splitting, - "SeparateBodies:=", - separate_bodies, - "CloneBody:=", - clone_body, - "Generate Primitive History:=", - generate_primitive_history, - "NumberPointsCurve:=", - interior_points_on_arc, - "LengthThresholdCurve:=", - length_threshold_percentage, - ] - groups_for_new_object = ["CreateGroupsForNewObjects:=", create_group_for_new_objects] - - try: - self.oeditor.Simplify(selections_args, simplify_parameters, groups_for_new_object) - return True - except: - self.logger.error("Simplify objects failed.") - return False - - @pyaedt_function_handler - def get_face_by_id(self, id): - """Give the face object given its Id. - - Parameters - ---------- - id : int - Id of the face to retrieve. - - Returns - ------- - modeler.cad.elements3d.FacePrimitive - Face object. - - """ - obj = [o for o in self.object_list for face in o.faces if face.id == id] - if obj: - face_obj = [face for face in obj[0].faces if face.id == id][0] - return face_obj - else: - return False diff --git a/pyaedt/modeler/cad/Primitives.py b/pyaedt/modeler/cad/Primitives.py index f5a1a371b30..4bfbd707212 100644 --- a/pyaedt/modeler/cad/Primitives.py +++ b/pyaedt/modeler/cad/Primitives.py @@ -10,17 +10,29 @@ import random import string import time +import warnings from pyaedt.application.Variables import Variable from pyaedt.application.Variables import decompose_variable_value +from pyaedt.generic.constants import AEDT_UNITS from pyaedt.generic.general_methods import _dim_arg from pyaedt.generic.general_methods import _uname +from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import is_number from pyaedt.generic.general_methods import pyaedt_function_handler +from pyaedt.generic.general_methods import settings +from pyaedt.modeler.cad.Modeler import BaseCoordinateSystem +from pyaedt.modeler.cad.Modeler import CoordinateSystem +from pyaedt.modeler.cad.Modeler import FaceCoordinateSystem +from pyaedt.modeler.cad.Modeler import Lists +from pyaedt.modeler.cad.Modeler import Modeler +from pyaedt.modeler.cad.Modeler import ObjectCoordinateSystem from pyaedt.modeler.cad.components_3d import UserDefinedComponent +from pyaedt.modeler.cad.elements3d import EdgePrimitive from pyaedt.modeler.cad.elements3d import FacePrimitive from pyaedt.modeler.cad.elements3d import Plane from pyaedt.modeler.cad.elements3d import Point +from pyaedt.modeler.cad.elements3d import VertexPrimitive from pyaedt.modeler.cad.object3d import Object3d from pyaedt.modeler.cad.polylines import Polyline from pyaedt.modeler.cad.polylines import PolylineSegment @@ -41,30 +53,330 @@ aedt_wait_time = 0.1 -class Primitives(object): - """Provides common functionalities for primitives. +class GeometryModeler(Modeler): + """Manages the main AEDT Modeler functionalities for geometry-based designs. Parameters ---------- - application : :class:`pyaedt.modeler.Model3D.Modeler3D`, :class:`pyaedt.modeler.Model2D.Modeler2D` - Pointer to the parent object. + app : + Inherited parent object. + is3d : bool, optional + Whether the model is 3D. The default is ``True``. + """ - Examples - -------- - Basic usage demonstrated with an HFSS design: + @pyaedt_function_handler() + def __getitem__(self, partId): + """Get the object ``Object3D`` for a given object ID or object name. - >>> from pyaedt import Hfss - >>> aedtapp = Hfss() - >>> prim = aedtapp.modeler - """ + Parameters + ---------- + partId : int or str + Object ID or object name from the 3D modeler. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + Returns ``None`` if the part ID or the object name is not found. + + """ + if isinstance(partId, (int, str)) and not ( + partId in self.objects or partId in self._object_names_to_ids or partId in self.user_defined_components + ): + self.refresh_all_ids() + if isinstance(partId, int): + if partId in self.objects: + return self.objects[partId] + elif partId in self._object_names_to_ids: + return self.objects[self._object_names_to_ids[partId]] + elif partId in self.user_defined_components: + return self.user_defined_components[partId] + elif isinstance(partId, Object3d) or isinstance(partId, UserDefinedComponent): + return partId + return None - def __init__(self): + def __init__(self, app, is3d=True): + self._app = app + Modeler.__init__(self, app) + # TODO Refactor this as a dictionary with names as key + self._coordinate_systems = [] + self._user_lists = [] + self._planes = [] + self._is3d = is3d + self._solids = [] + self._sheets = [] + self._lines = [] + self._points = [] + self._unclassified = [] + self._all_object_names = [] + self.objects = {} + self.user_defined_components = {} + self._object_names_to_ids = {} self.points = {} self.refresh() + class Position: + """Position. + + Parameters + ---------- + args : list or int + Position of the item as either a list of the ``[x, y, z]`` coordinates + or three separate values. If no or insufficient arguments + are specified, ``0`` is applied. + + """ + + @pyaedt_function_handler() + def __getitem__(self, item): + if item == 0: + return self.X + elif item == 1: + return self.Y + elif item == 2: + return self.Z + else: + raise IndexError + + @pyaedt_function_handler() + def __setitem__(self, item, value): + if item == 0: + self.X = value + elif item == 1: + self.Y = value + elif item == 2: + self.Z = value + + def __len__(self): + return 3 + + def __init__(self, *args): + if len(args) == 1 and type(args[0]) is list: + try: + self.X = args[0][0] + except: + self.X = 0 + try: + self.Y = args[0][1] + except: + self.Y = 0 + try: + self.Z = args[0][2] + except: + self.Z = 0 + else: + try: + self.X = args[0] + except: + self.X = 0 + try: + self.Y = args[1] + except: + self.Y = 0 + try: + self.Z = args[2] + except: + self.Z = 0 + + class SweepOptions(object): + """Manages sweep options. + + Parameters + ---------- + draftType : str, optional + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + draftAngle : str, optional + Draft angle with units. The default is ``"0deg"``. + twistAngle : str, optional + Twist angle with units. The default is ``"0deg"``. + + """ + + @pyaedt_function_handler() + def __init__(self, draftType="Round", draftAngle="0deg", twistAngle="0deg"): + self.DraftType = draftType + self.DraftAngle = draftAngle + self.TwistAngle = twistAngle + + @property + def _design_properties(self): + return self._app.design_properties + + @property + def _odefinition_manager(self): + return self._app.odefinition_manager + + @property + def _omaterial_manager(self): + return self._app.omaterial_manager + + @property + def coordinate_systems(self): + """Coordinate systems.""" + if settings.aedt_version > "2022.2": + cs_names = [i for i in self.oeditor.GetChildNames("CoordinateSystems") if i != "Global"] + for cs_name in cs_names: + props = {} + local_names = [i.name for i in self._coordinate_systems] + if cs_name not in local_names: + if self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Relative": + self._coordinate_systems.append(CoordinateSystem(self, props, cs_name)) + elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Face": + self._coordinate_systems.append(FaceCoordinateSystem(self, props, cs_name)) + elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Object": + self._coordinate_systems.append(ObjectCoordinateSystem(self, props, cs_name)) + return self._coordinate_systems + if not self._coordinate_systems: + self._coordinate_systems = self._get_coordinates_data() + return self._coordinate_systems + + @property + def user_lists(self): + """User lists.""" + if not self._user_lists: + self._user_lists = self._get_lists_data() + return self._user_lists + + @property + def planes(self): + """Planes.""" + if not self._planes: + self._planes = self._get_planes_data() + return self._planes + + @property + def oeditor(self): + """AEDT ``oEditor`` module. + + References + ---------- + + >>> oEditor = oDesign.SetActiveEditor("3D Modeler")""" + + return self._app.oeditor + + @property + def materials(self): + """Material library used in the project. + + Returns + ------- + :class:`pyaedt.modules.MaterialLib.Materials` + + """ + return self._app.materials + + @property + def model_units(self): + """Model units as a string. For example, ``"mm"``. + + References + ---------- + + >>> oEditor.GetModelUnits + >>> oEditor.SetModelUnits + """ + return self.oeditor.GetModelUnits() + + @model_units.setter + def model_units(self, units): + assert units in AEDT_UNITS["Length"], "Invalid units string {0}.".format(units) + self.oeditor.SetModelUnits(["NAME:Units Parameter", "Units:=", units, "Rescale:=", False]) + + @property + def selections(self): + """Selections. + + References + ---------- + + >>> oEditor.GetSelections + """ + return self.oeditor.GetSelections() + + @property + def obounding_box(self): + """Bounding box. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + return self.oeditor.GetModelBoundingBox() + + @property + def dimension(self): + """Dimensions. + + Returns + ------- + str + Dimensionality, which is either ``"2D"`` or ``"3D"``. + + References + ---------- + + >>> oDesign.Is2D + """ + try: + if self._odesign.Is2D(): + return "2D" + else: + return "3D" + except: + if self.design_type == "2D Extractor": + return "2D" + else: + return "3D" + + @property + def design_type(self): + """Design type. + + References + ---------- + + >>> oDesign.GetDesignType + """ + return self._app.design_type + + @property + def geometry_mode(self): + """Geometry mode. + + References + ---------- + + >>> oDesign.GetGeometryMode""" + return self._odesign.GetGeometryMode() + + @property + def solid_bodies(self): + """List of object names. + + .. note:: + Non-model objects are also returned. + + Returns + ------- + list os str + List of object names with the object name as the key. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + """ + if self.dimension == "3D": + objects = self.oeditor.GetObjectsInGroup("Solids") + else: + objects = self.oeditor.GetObjectsInGroup("Sheets") + return list(objects) + @property def _modeler(self): - return self._app.modeler + return self @property def solid_objects(self): @@ -269,51 +581,4937 @@ def logger(self): """Logger.""" return self._app.logger - @property - def version(self): - """Version.""" - return self._app._aedt_version + @property + def version(self): + """Version.""" + return self._app._aedt_version + + @property + def model_objects(self): + """List of the names of all model objects.""" + return self._get_model_objects(model=True) + + @property + def non_model_objects(self): + """List of objects of all non-model objects.""" + return list(self.oeditor.GetObjectsInGroup("Non Model")) + + @property + def model_consistency_report(self): + """Summary of detected inconsistencies between the AEDT modeler and PyAEDT structures. + + Returns + ------- + dict + + """ + obj_names = self.object_names + missing = [] + for name in obj_names: + if name not in self._object_names_to_ids: + missing.append(name) + non_existent = [] + for name in self._object_names_to_ids: + if name not in obj_names and name not in self.unclassified_names: + non_existent.append(name) + report = {"Missing Objects": missing, "Non-Existent Objects": non_existent} + return report + + @property + def objects_by_name(self): + """Object dictionary organized by name. + + Returns + ------- + dict + """ + obj_dict = {} + for _, v in self.objects.items(): + obj_dict[v._m_name] = v + return obj_dict + + @pyaedt_function_handler() + def refresh(self): + """Refresh this object.""" + self._solids = [] + self._sheets = [] + self._lines = [] + self._points = [] + self._unclassified = [] + self._all_object_names = [] + self.objects = {} + self.user_defined_components = {} + self._object_names_to_ids = {} + self._currentId = 0 + self._refresh_object_types() + self._refresh_all_ids_from_aedt_file() + self.refresh_all_ids() + + @pyaedt_function_handler() + def _get_commands(self, name): + try: + return self.oeditor.GetChildObject(name).GetChildNames() + except: + return [] + + @pyaedt_function_handler() + def _create_user_defined_component(self, name): + if name not in list(self.user_defined_components.keys()): + native_component_properties = self._get_native_component_properties(name) + if native_component_properties: + component_type = native_component_properties["NativeComponentDefinitionProvider"]["Type"] + o = UserDefinedComponent(self, name, native_component_properties, component_type) + else: + o = UserDefinedComponent(self, name) + self.user_defined_components[name] = o + else: + o = self.user_defined_components[name] + return o + + @pyaedt_function_handler() + def _create_point(self, name): + point = Point(self, name) + self.refresh_all_ids() + + return point + + @pyaedt_function_handler() + def _refresh_all_ids_from_aedt_file(self): + if not self._design_properties or "ModelSetup" not in self._design_properties: + return False + + try: + groups = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["Groups"]["Group"] + except KeyError: + groups = [] + if not isinstance(groups, list): + groups = [groups] + try: + self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"]["GeometryPart"] + except KeyError: + return 0 + for el in self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ + "GeometryPart" + ]: + if isinstance(el, (OrderedDict, dict)): + attribs = el["Attributes"] + operations = el.get("Operations", None) + else: + attribs = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ + "GeometryPart" + ]["Attributes"] + operations = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + "ToplevelParts" + ]["GeometryPart"]["Operations"] + if attribs["Name"] in self._all_object_names: + pid = 0 + + if operations and isinstance(operations.get("Operation", None), (OrderedDict, dict)): + try: + pid = operations["Operation"]["ParentPartID"] + except: # pragma: no cover + pass + elif operations and isinstance(operations.get("Operation", None), list): + try: + pid = operations["Operation"][0]["ParentPartID"] + except: + pass + o = self._create_object(name=attribs["Name"], pid=pid, use_cached=True) + o._part_coordinate_system = attribs["PartCoordinateSystem"] + if "NonModel" in attribs["Flags"]: + o._model = False + else: + o._model = True + if "Wireframe" in attribs["Flags"]: + o._wireframe = True + else: + o._wireframe = False + groupname = "" + for group in groups: + if attribs["GroupId"] == group["GroupID"]: + groupname = group["Attributes"]["Name"] + + o._m_groupName = groupname + try: + o._color = tuple(int(x) for x in attribs["Color"][1:-1].split(" ")) + except: + o._color = None + o._surface_material = attribs.get("SurfaceMaterialValue", None) + if o._surface_material: + o._surface_material = o._surface_material[1:-1].lower() + if "MaterialValue" in attribs: + o._material_name = attribs["MaterialValue"][1:-1].lower() + + o._is_updated = True + return len(self.objects) + + @pyaedt_function_handler() + def cleanup_objects(self): + """Clean up objects that no longer exist in the modeler because + they were removed by previous operations. + + This method also updates object IDs that may have changed via + a modeler operation such as :func:`pyaedt.modeler.Model3D.Modeler3D.unite` + or :func:`pyaedt.modeler.Model2D.Modeler2D.unite`. + + Returns + ------- + dict + Dictionary of updated object IDs. + + """ + new_object_dict = {} + new_object_id_dict = {} + new_points_dict = {} + + all_objects = self.object_names + all_unclassified = self.unclassified_names + all_objs = all_objects + all_unclassified + for old_id, obj in self.objects.items(): + if obj.name in all_objs: + # Check if ID can change in boolean operations + # updated_id = obj.id # By calling the object property we get the new id + new_object_id_dict[obj.name] = old_id + new_object_dict[old_id] = obj + for old_id, obj in self.points.items(): + if obj.name in self._points: + new_points_dict[obj.name] = obj + self.objects = new_object_dict + self._object_names_to_ids = new_object_id_dict + self.points = new_points_dict + + @pyaedt_function_handler() + def find_new_objects(self): + """Find any new objects in the modeler that were created + by previous operations. + + Returns + ------- + dict + Dictionary of new objects. + + """ + new_objects = [] + for obj_name in self.object_names: + if obj_name not in self._object_names_to_ids: + new_objects.append(obj_name) + return new_objects + + @pyaedt_function_handler() + def add_new_objects(self): + """Add objects that have been created in the modeler by + previous operations. + + Returns + ------- + list + List of added objects. + + """ + # TODO: Need to improve documentation for this method. + added_objects = [] + + for obj_name in self.object_names: + if obj_name not in self._object_names_to_ids: + self._create_object(obj_name) + added_objects.append(obj_name) + for obj_name in self.unclassified_names: + if obj_name not in self._object_names_to_ids: + self._create_object(obj_name) + added_objects.append(obj_name) + for obj_name in self.point_names: + if obj_name not in self.points.keys(): + self._create_object(obj_name) + added_objects.append(obj_name) + return added_objects + + @pyaedt_function_handler() + def add_new_user_defined_component(self): + """Add 3D components and user-defined models that have been created in the modeler by + previous operations. + + Returns + ------- + list + List of added components. + + """ + added_component = [] + for comp_name in self.user_defined_component_names: + if comp_name not in self.user_defined_components: + self._create_user_defined_component(comp_name) + added_component.append(comp_name) + return added_component + + # TODO Eliminate this - check about import_3d_cad + # Should no longer be a problem + @pyaedt_function_handler() + def refresh_all_ids(self): + """Refresh all IDs.""" + + self.add_new_objects() + self.add_new_user_defined_component() + self.cleanup_objects() + + return len(self.objects) + + @pyaedt_function_handler() + def get_objects_by_material(self, materialname=None): + """Get a list of objects either of a specified material or classified by material. + + Parameters + ---------- + materialname : str + Name of the material. The default is ``None``. + + Returns + ------- + list of class:`pyaedt.modeler.cad.object3d.Object3d` + If a material name is not provided, the method returns + a list of dictionaries where keys are material names + of conductors, dielectrics, gases, and liquids respectively + in the design and values are objects assigned to these materials. + If a material name is provided, the method returns a list + of objects assigned to the material. + + References + ---------- + + >>> oEditor.GetObjectsByMaterial + + """ + obj_lst = [] + if materialname is not None: + for obj in self.object_list: + if obj and ("[" in obj.material_name or "(" in obj.material_name) and obj.object_type == "Solid": + material = ( + self._app.odesign.GetChildObject("3D Modeler") + .GetChildObject(obj.name) + .GetPropEvaluatedValue("Material") + .lower() + ) + if materialname.lower() == material: + obj_lst.append(obj) + elif obj and (obj.material_name == materialname or obj.material_name == materialname.lower()): + obj_lst.append(obj) + else: + obj_lst = [ + self._get_object_dict_by_material(self.materials.conductors), + self._get_object_dict_by_material(self.materials.dielectrics), + self._get_object_dict_by_material(self.materials.gases), + self._get_object_dict_by_material(self.materials.liquids), + ] + return obj_lst + + @pyaedt_function_handler() + def _get_coordinates_data(self): # pragma: no cover + coord = [] + id2name = {1: "Global"} + name2refid = {} + if self._design_properties and "ModelSetup" in self._design_properties: + cs = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] + for ds in cs: + try: + if isinstance(cs[ds], (OrderedDict, dict)): + if cs[ds]["OperationType"] == "CreateRelativeCoordinateSystem": + props = cs[ds]["RelativeCSParameters"] + name = cs[ds]["Attributes"]["Name"] + cs_id = cs[ds]["ID"] + id2name[cs_id] = name + name2refid[name] = cs[ds]["ReferenceCoordSystemID"] + coord.append(CoordinateSystem(self, props, name)) + if "ZXZ" in props["Mode"]: + coord[-1].mode = "zxz" + elif "ZYZ" in props["Mode"]: + coord[-1].mode = "zyz" + else: + coord[-1].mode = "axis" + elif cs[ds]["OperationType"] == "CreateFaceCoordinateSystem": + name = cs[ds]["Attributes"]["Name"] + cs_id = cs[ds]["ID"] + id2name[cs_id] = name + op_id = cs[ds]["PlaceHolderOperationID"] + geometry_part = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + "ToplevelParts" + ]["GeometryPart"] + if isinstance(geometry_part, (OrderedDict, dict)): + op = geometry_part["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(geometry_part, list): + for gp in geometry_part: + op = gp["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(cs[ds], list): + for el in cs[ds]: + if el["OperationType"] == "CreateRelativeCoordinateSystem": + props = el["RelativeCSParameters"] + name = el["Attributes"]["Name"] + cs_id = el["ID"] + id2name[cs_id] = name + name2refid[name] = el["ReferenceCoordSystemID"] + coord.append(CoordinateSystem(self, props, name)) + if "ZXZ" in props["Mode"]: + coord[-1].mode = "zxz" + elif "ZYZ" in props["Mode"]: + coord[-1].mode = "zyz" + else: + coord[-1].mode = "axis" + elif el["OperationType"] == "CreateFaceCoordinateSystem": + name = el["Attributes"]["Name"] + cs_id = el["ID"] + id2name[cs_id] = name + op_id = el["PlaceHolderOperationID"] + geometry_part = self._design_properties["ModelSetup"]["GeometryCore"][ + "GeometryOperations" + ]["ToplevelParts"]["GeometryPart"] + if isinstance(geometry_part, (OrderedDict, dict)): + op = geometry_part["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(geometry_part, list): + for gp in geometry_part: + try: + op = gp["Operations"]["FaceCSHolderOperation"] + except KeyError: + continue + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + except: + pass + for cs in coord: + if isinstance(cs, CoordinateSystem): + try: + cs._ref_cs = id2name[name2refid[cs.name]] + except: + pass + coord.reverse() + return coord + + def _get_lists_data(self): + """Retrieve user object list data. + + Returns + ------- + [Dict with List information] + """ + design_lists = [] + if self._design_properties and self._design_properties.get("ModelSetup", None): + key1 = "GeometryOperations" + key2 = "GeometryEntityLists" + key3 = "GeometryEntityListOperation" + try: + entity_list = self._design_properties["ModelSetup"]["GeometryCore"][key1][key2] + if entity_list: + geom_entry = copy.deepcopy(entity_list[key3]) + if isinstance(geom_entry, (dict, OrderedDict)): + geom_entry = [geom_entry] + for data in geom_entry: + props = {} + name = data["Attributes"]["Name"] + props["ID"] = data["ID"] + props["Type"] = data["GeometryEntityListParameters"]["EntityType"] + if props["Type"] == "Object": + name_list = [] + for element in data["GeometryEntityListParameters"]["EntityList"]: + element_name = self.oeditor.GetObjectNameByID(int(element)) + name_list.append(element_name) + props["List"] = name_list + else: + props["List"] = data["GeometryEntityListParameters"]["EntityList"] + design_lists.append(Lists(self, props, name)) + except: + self.logger.info("Lists were not retrieved from AEDT file") + return design_lists + + def _get_planes_data(self): + """Get the plane's data. + + Returns + ------- + [Dict with List information] + """ + try: + return { + plane_name: self.oeditor.GetChildObject(plane_name) + for plane_name in self.oeditor.GetChildNames("Planes") + } + except TypeError: + return {} + + def __get__(self, instance, owner): + self._app = instance + return self + + @pyaedt_function_handler() + def fit_all(self): + """Fit all. + + References + ---------- + + >>> oEditor.FitAll + + Examples + -------- + + >>> from pyaedt import hfss + >>> hfss = Hfss() + >>> point_object = hfss.modeler.fit_all + """ + self.oeditor.FitAll() + + @pyaedt_function_handler() + def _find_perpendicular_points(self, face): + if isinstance(face, str): + vertices = [i.position for i in self[face].vertices] + else: + vertices = [] + for vertex in list(self.oeditor.GetVertexIDsFromFace(face)): + vertices.append([float(i) for i in list(self.oeditor.GetVertexPosition(vertex))]) + assert len(vertices) > 2, "Automatic A-B Assignment can be done only on face with more than 2 vertices." + origin = vertices[0] + a_end = [] + b_end = [] + tol = 1e-10 + for v in vertices[1:]: + edge1 = GeometryOperators.v_points(origin, v) + for v2 in vertices[1:]: + if v2 != v: + edge2 = GeometryOperators.v_points(origin, v2) + if abs(GeometryOperators.v_dot(edge1, edge2)) < tol: + a_end = v + b_end = v2 + break + if a_end: + break + if not a_end: + a_end = vertices[1] + b_end = vertices[2] + return False, (origin, a_end, b_end) + return True, (origin, a_end, b_end) + + @pyaedt_function_handler() + def cover_lines(self, selection): + """Cover closed lines and transform them to a sheet. + + Parameters + ---------- + selection : str, int + Polyline object to cover. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CoverLines + """ + obj_to_cover = self.convert_to_selections(selection, False) + self.oeditor.CoverLines(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) + return True + + @pyaedt_function_handler() + def cover_faces(self, selection): + """Cover a face. + + Parameters + ---------- + selection : str, int + Sheet object to cover. + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CoverLines + """ + obj_to_cover = self.convert_to_selections(selection, False) + self.oeditor.CoverSurfaces(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) + return True + + @pyaedt_function_handler() + def create_coordinate_system( + self, + origin=None, + reference_cs="Global", + name=None, + mode="axis", + view="iso", + x_pointing=None, + y_pointing=None, + psi=0, + theta=0, + phi=0, + u=None, + ): + """Create a coordinate system. + + Parameters + ---------- + origin : list, optional + List of ``[x, y, z]`` coordinates for the origin of the + coordinate system. The default is ``None``, in which case + ``[0, 0, 0]`` is used. + reference_cs : str, optional + Name of the reference coordinate system. The default is + ``"Global"``. + name : str, optional + Name of the coordinate system. The default is ``None``. + mode : str, optional + Definition mode. Options are ``"axis"``, ``"axisrotation"``, + ``"view"``, ``"zxz"``, and ``"zyz"`` The default + is ``"axis"``. You can also use the ``pyaedt.generic.constants.CSMODE`` + enumerator. + + * If ``mode="axis"``, specify the ``x_pointing`` and ``y_pointing`` parameters. + * If ``mode="axisrotation"``, specify the ``theta`` and ``u`` parameters. + * If ``mode="view"``, specify the ``view`` parameter. + * If ``mode="zxz"`` or ``mode="zyz"``, specify the ``phi``, ``theta``, + and ``psi`` parameters. + + + Parameters not needed by the specified mode are ignored. + The default mode, ``"axis"``, is a coordinate system parallel to the + global coordinate system centered in the global origin. + + view : str, int optional + View for the coordinate system if ``mode="view"``. Options + are ``"iso"``, ``None``, ``"XY"``, ``"XZ"``, and ``"XY"``. The + default is ``"iso"``. the ``"rotate"`` option is obsolete. You can + also use the ``pyaedt.generic.constants.VIEW`` enumerator. + + .. note:: + For backward compatibility, ``mode="view"`` and ``view="rotate"`` are the same as + ``mode="axis"``. Because the "rotate" option in the "view" mode is obsolete, use + ``mode="axis"`` instead. + + x_pointing : list, optional + List of the ``[x, y, z]`` coordinates specifying the X axis + pointing in the global coordinate system if ``mode="axis"``. + The default is ``[1, 0, 0]``. + y_pointing : list, optional + List of the ``[x, y, z]`` coordinates specifying the Y axis + pointing in the global coordinate system if ``mode="axis"``. + The default is ``[0, 1, 0]``. + phi : float, optional + Euler angle phi in degrees if ``mode="zxz"`` or ``mode="zyz"``. + The default is ``0``. + theta : float, optional + Euler angle theta or rotation angle in degrees if ``mode="zxz"``, + ``mode="zyz"``, or ``mode="axisrotation"``. The default is ``0``. + psi : float, optional + Euler angle psi in degrees if ``mode="zxz"`` or ``mode="zyz"``. + The default is ``0``. + u : list + List of the ``[ux, uy, uz]`` coordinates for the rotation axis + if ``mode="zxz"``. The default is ``[1, 0, 0]``. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.CoordinateSystem` + Created coordinate system. + + References + ---------- + + >>> oEditor.CreateRelativeCS + """ + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: + raise AttributeError("A coordinate system with the specified name already exists.") + + cs = CoordinateSystem(self) + if cs: + result = cs.create( + origin=origin, + reference_cs=reference_cs, + name=name, + mode=mode, + view=view, + x_pointing=x_pointing, + y_pointing=y_pointing, + phi=phi, + theta=theta, + psi=psi, + u=u, + ) + if result: + return cs + return False + + @pyaedt_function_handler() + def create_face_coordinate_system( + self, face, origin, axis_position, axis="X", name=None, offset=None, rotation=0, always_move_to_end=True + ): + """Create a face coordinate system. + + The face coordinate has always the Z axis parallel to face normal. + The X and Y axis lie on the face plane. + + Parameters + ---------- + face : int, FacePrimitive + Face where the coordinate system is defined. + origin : int, FacePrimitive, EdgePrimitive, VertexPrimitive + Coordinate system origin. The origin must belong to the face where the + coordinate system is defined. + + - If a face is specified, the origin is placed on the face center. It must be + the same as the ``face`` parameter. + - If an edge is specified, the origin is placed on the edge midpoint. + - If a vertex is specified, the origin is placed on the vertex. + + axis_position : int, FacePrimitive, EdgePrimitive, VertexPrimitive + Specify where the X or Y axis is pointing. The position must belong to the face where the + coordinate system is defined. + Select which axis is considered with the option ``axis``. + If a face is specified, the position is placed on the face center. It must be the same as ``face``. + If an edge is specified, the position is placed on the edce midpoint. + If a vertex is specified, the position is placed on the vertex. + axis : str, optional + Select which axis is considered for positioning. Possible values are ``"X"`` and ``"Y"``. + The default is ``"X"``. + name : str, optional + Name of the coordinate system. The default is ``None``. + offset : list, optional + List of the ``[x, y]`` coordinates specifying the offset of the coordinate system origin. + The offset specified in the face coordinate system reference. + The default is ``[0, 0]``. + rotation : float, optional + Rotation angle of the coordinate system around its Z axis. Angle is in degrees. + The default is ``0``. + always_move_to_end : bool, optional + If ``True`` the Face Coordinate System creation operation will always be moved to the end of subsequent + objects operation. This will guarantee that the coordinate system will remain solidal with the object + face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.FaceCoordinateSystem` + + """ + + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: # pragma: no cover + raise AttributeError("A coordinate system with the specified name already exists!") + + cs = FaceCoordinateSystem(self) + if cs: + result = cs.create( + face=face, + origin=origin, + axis_position=axis_position, + axis=axis, + name=name, + offset=offset, + rotation=rotation, + always_move_to_end=always_move_to_end, + ) + + if result: + return cs + return False + + @pyaedt_function_handler() + def create_object_coordinate_system( + self, obj, origin, x_axis, y_axis, move_to_end=True, reverse_x_axis=False, reverse_y_axis=False, name=None + ): + """Create an object coordinate system. + + Parameters + ---------- + obj : str, :class:`pyaedt.modeler.cad.object3d.Object3d` + Object to attach the object coordinate system to. + origin : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Refer to the origin where the object coordinate system is anchored. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the origin coordinate system ``[x, y, z]``. + + x_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Entity that the x axis of the object coordinate system points to. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the point coordinate system ``[x, y, z]`` that the x axis points to. + + y_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Entity that the y axis of the object coordinate system points to. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the point coordinate system ``[x, y, z]`` that the y axis points to. + + move_to_end : bool, optional + If ``True`` the Coordinate System creation operation will always be moved to the end of subsequent + objects operation. This will guarantee that the coordinate system will remain solidal with the object + face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. + reverse_x_axis : bool, optional + Whether the x-axis is in the reverse direction. + The default is ``False``. + reverse_y_axis : bool, optional + Whether the y-axis is in the reverse direction. + The default is ``False``. + name : str, optional + Name of the coordinate system. The default is ``None``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: # pragma: no cover + raise AttributeError("A coordinate system with the specified name already exists.") + + cs = ObjectCoordinateSystem(self, name=name) + if cs: + result = cs.create( + obj=obj, + origin=origin, + x_axis=x_axis, + y_axis=y_axis, + move_to_end=move_to_end, + reverse_x_axis=reverse_x_axis, + reverse_y_axis=reverse_y_axis, + ) + + if result: + return cs + return False + + @pyaedt_function_handler() + def global_to_cs(self, point, ref_cs): + """Transform a point from the global coordinate system to another coordinate system. + + Parameters + ---------- + point : list + List of the ``[x, y, z]`` coordinates to transform. + ref_cs : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be + used. + + Returns + ------- + list + List of the transformed ``[x, y, z]`` coordinates. + + """ + if type(point) is not list or len(point) != 3: + raise AttributeError("Point must be in format [x, y, z].") + try: + point = [float(i) for i in point] + except: + raise AttributeError("Point must be in format [x, y, z].") + if isinstance(ref_cs, BaseCoordinateSystem): + ref_cs_name = ref_cs.name + elif isinstance(ref_cs, str): + ref_cs_name = ref_cs + else: + raise AttributeError("ref_cs must be either a string or a CoordinateSystem object.") + if ref_cs_name == "Global": + return point + cs_names = [i.name for i in self.coordinate_systems] + if ref_cs_name not in cs_names: + raise AttributeError("Specified coordinate system does not exist in the design.") + + def get_total_transformation(p, cs): + idx = cs_names.index(cs) + q = self.coordinate_systems[idx].quaternion + ox = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginX"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + oy = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginY"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + oz = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginZ"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + o = [ox, oy, oz] + refcs = self.coordinate_systems[idx].ref_cs + if refcs == "Global": + p1 = p + else: + p1 = get_total_transformation(p, refcs) + p2 = GeometryOperators.q_rotation_inv(GeometryOperators.v_sub(p1, o), q) + return p2 + + p = get_total_transformation(point, ref_cs_name) + return [round(p[i], 13) for i in range(3)] + + @pyaedt_function_handler() + def set_working_coordinate_system(self, name): + """Set the working coordinate system to another coordinate system. + + Parameters + ---------- + name : str, FaceCoordinateSystem, CoordinateSystem + Name of the coordinate system or ``CoordinateSystem`` object to set as the working + coordinate system. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SetWCS + """ + if isinstance(name, BaseCoordinateSystem): + self.oeditor.SetWCS( + ["NAME:SetWCS Parameter", "Working Coordinate System:=", name.name, "RegionDepCSOk:=", False] + ) + else: + self.oeditor.SetWCS( + ["NAME:SetWCS Parameter", "Working Coordinate System:=", name, "RegionDepCSOk:=", False] + ) + return True + + @pyaedt_function_handler() + def invert_cs(self, coordinate_system, to_global=False): + """Get the inverse translation and the conjugate quaternion of the input coordinate system. + + By defining a new coordinate system with this information, the reference coordinate system + of the input coordinate system is obtained. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. A ``CoordinateSystem`` object can also be + used. + to_global : bool, optional + Whether to compute the inverse transformation of the input coordinate system with + respect to the global coordinate system. The default is ``False``. + + Returns + ------- + list + Origin coordinates. + list + Quaternion. + """ + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + cs_names = [i.name for i in self.coordinate_systems] + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + + if to_global: + o, q = self.reference_cs_to_global(coordinate_system) + o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(o, q)) + q = [q[0], -q[1], -q[2], -q[3]] + else: + q = cs.quaternion + q = [q[0], -q[1], -q[2], -q[3]] + o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(cs.origin, q)) + return o, q + + @pyaedt_function_handler() + def reference_cs_to_global(self, coordinate_system): + """Get the origin and quaternion defining the coordinate system in the global coordinates. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be used. + + Returns + ------- + list + Origin coordinates. + list + Quaternion. + """ + cs_names = [i.name for i in self.coordinate_systems] + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + quaternion = cs.quaternion + origin = cs.origin + ref_cs_name = cs.ref_cs + while ref_cs_name != "Global": + ref_cs = self.coordinate_systems[cs_names.index(ref_cs_name)] + quaternion_ref = ref_cs.quaternion + quaternion = GeometryOperators.q_prod(quaternion_ref, quaternion) + origin_ref = ref_cs.origin + origin = GeometryOperators.v_sum(origin_ref, GeometryOperators.q_rotation(origin, quaternion_ref)) + ref_cs_name = ref_cs.ref_cs + return origin, quaternion + + @pyaedt_function_handler() + def duplicate_coordinate_system_to_global(self, coordinate_system): + """Create a duplicate coordinate system referenced to the global coordinate system. + + Having this coordinate system referenced to the global coordinate + system removes all nested coordinate system dependencies. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be used. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.CoordinateSystem` + Created coordinate system. + + References + ---------- + + >>> oEditor.CreateRelativeCS + """ + cs_names = [i.name for i in self.coordinate_systems] + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + if isinstance(cs, CoordinateSystem): + o, q = self.reference_cs_to_global(coordinate_system) + x, y, _ = GeometryOperators.quaternion_to_axis(q) + reference_cs = "Global" + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + cs = CoordinateSystem(self) + if cs: + result = cs.create( + origin=o, + reference_cs=reference_cs, + name=name, + mode="axis", + x_pointing=x, + y_pointing=y, + ) + if result: + return cs + elif isinstance(cs, FaceCoordinateSystem): + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + face_cs = FaceCoordinateSystem(self, props=cs.props, name=name, face_id=cs.props["FaceID"]) + obj = [obj for obj in self.object_list for face in obj.faces if face.id == face_cs.props["FaceID"]][0] + face = [face for face in obj.faces if face.id == face_cs.props["FaceID"]][0] + if face_cs.props["Origin"]["PositionType"] == "FaceCenter": + origin = face + elif face_cs.props["Origin"]["PositionType"] == "EdgeCenter": + origin = [edge for edge in face.edges if edge.id == face_cs.props["Origin"]["EntityID"]][0] + elif face_cs.props["Origin"]["PositionType"] == "OnVertex": + edge = [ + edge + for edge in face.edges + for vertex in edge.vertices + if vertex.id == face_cs.props["Origin"]["EntityID"] + ][0] + origin = [v for v in edge.vertices if v.id == face_cs.props["Origin"]["EntityID"]][0] + if face_cs.props["AxisPosn"]["PositionType"] == "EdgeCenter": + axis_position = [edge for edge in face.edges if edge.id == face_cs.props["AxisPosn"]["EntityID"]][0] + elif face_cs.props["AxisPosn"]["PositionType"] == "OnVertex": + edge = [ + edge + for edge in face.edges + for vertex in edge.vertices + if vertex.id == face_cs.props["AxisPosn"]["EntityID"] + ][0] + axis_position = [v for v in edge.vertices if v.id == face_cs.props["AxisPosn"]["EntityID"]][0] + if face_cs: + result = face_cs.create( + face=face, + origin=origin, + axis_position=axis_position, + axis=face_cs.props["WhichAxis"], + name=name, + offset=[face_cs["XOffset"], face_cs["YOffset"]], + rotation=decompose_variable_value(face_cs["ZRotationAngle"])[0], + always_move_to_end=face_cs["MoveToEnd"], + ) + if result: + return face_cs + elif isinstance(cs, ObjectCoordinateSystem): + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + obj_cs = ObjectCoordinateSystem(self, props=cs.props, name=name, entity_id=cs.entity_id) + objs_by_name_list = [obj for obj in self.object_list if obj.part_coordinate_system == cs.name] + objs_by_id_list = [o for o in self.object_list if o.id == cs.entity_id] + if objs_by_name_list: + obj = objs_by_name_list[0] + elif objs_by_id_list: + obj = [o for o in self.object_list if o.id == cs.entity_id][0] + if cs.props["Origin"]["PositionType"] != "AbsolutePosition": + if cs.props["Origin"]["PositionType"] == "FaceCenter": + origin = [f for f in obj.faces if f.id == cs.props["Origin"]["EntityID"]][0] + elif ( + cs.props["Origin"]["PositionType"] == "EdgeCenter" + or cs.props["Origin"]["PositionType"] == "ArcCenter" + ): + origin = [e for e in obj.edges if e.id == cs.props["Origin"]["EntityID"]][0] + elif cs.props["Origin"]["PositionType"] == "OnVertex": + origin = [v for v in obj.vertices if v.id == cs.props["Origin"]["EntityID"]][0] + else: + origin = [ + cs.props["Origin"]["XPosition"], + cs.props["Origin"]["YPosition"], + cs.props["Origin"]["ZPosition"], + ] + if "xAxisPos" in cs.props: + if cs.props["xAxisPos"]["PositionType"] == "FaceCenter": + x_axis = [f for f in obj.faces if f.id == cs.props["xAxisPos"]["EntityID"]][0] + elif ( + cs.props["xAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["xAxisPos"]["PositionType"] == "ArcCenter" + ): + x_axis = [e for e in obj.edges if e.id == cs.props["xAxisPos"]["EntityID"]][0] + elif cs.props["xAxisPos"]["PositionType"] == "OnVertex": + x_axis = [v for v in obj.vertices if v.id == cs.props["xAxisPos"]["EntityID"]][0] + elif "xAxis" in cs.props: + x_axis = [ + cs.props["xAxis"]["xDirection"], + cs.props["xAxis"]["yDirection"], + cs.props["xAxis"]["zDirection"], + ] + if "yAxisPos" in cs.props: + if cs.props["yAxisPos"]["PositionType"] == "FaceCenter": + y_axis = [f for f in obj.faces if f.id == cs.props["yAxisPos"]["EntityID"]][0] + elif ( + cs.props["yAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["yAxisPos"]["PositionType"] == "ArcCenter" + ): + y_axis = [e for e in obj.edges if e.id == cs.props["yAxisPos"]["EntityID"]][0] + elif cs.props["yAxisPos"]["PositionType"] == "OnVertex": + y_axis = [v for v in obj.vertices if v.id == cs.props["yAxisPos"]["EntityID"]][0] + elif "yAxis" in cs.props: + y_axis = [ + cs.props["yAxis"]["xDirection"], + cs.props["yAxis"]["yDirection"], + cs.props["yAxis"]["zDirection"], + ] + if obj_cs: + result = obj_cs.create( + obj=obj, + origin=origin, + x_axis=x_axis, + y_axis=y_axis, + move_to_end=cs.props["MoveToEnd"], + reverse_x_axis=cs.props["ReverseXAxis"], + reverse_y_axis=cs.props["ReverseYAxis"], + ) + if result: + return obj_cs + return False + + @pyaedt_function_handler() + def set_objects_deformation(self, objects): + """Assign deformation objects to a Workbench link. + + Parameters + ---------- + objects : list + List of the deformation objects to assign to the Workbench link. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oDesign.SetObjectDeformation + """ + self.logger.info("Enabling deformation feedback") + try: + self._odesign.SetObjectDeformation(["EnabledObjects:=", objects]) + except: + self.logger.error("Failed to enable the deformation dependence") + return False + else: + self.logger.info("Successfully enabled deformation feedback") + return True + + @pyaedt_function_handler() + def set_objects_temperature(self, objects, ambient_temp=22, create_project_var=False): + """Assign temperatures to objects. + + The materials assigned to the objects must have a thermal modifier. + + Parameters + ---------- + objects : list + List of objects. + ambient_temp : float, optional + Ambient temperature. The default is ``22``. + create_project_var : bool, optional + Whether to create a project variable for the ambient temperature. + The default is ``False``. If ``True,`` ``$AmbientTemp`` is created. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oDesign.SetObjectTemperature + """ + self.logger.info("Set model temperature and enabling Thermal Feedback") + if create_project_var: + self._app.variable_manager["$AmbientTemp"] = str(ambient_temp) + "cel" + var = "$AmbientTemp" + else: + var = str(ambient_temp) + "cel" + vargs1 = [ + "NAME:TemperatureSettings", + "IncludeTemperatureDependence:=", + True, + "EnableFeedback:=", + True, + "Temperatures:=", + ] + vargs2 = [] + for obj in objects: + mat = self[obj].material_name + th = self._app.materials.check_thermal_modifier(mat) + if th: + vargs2.append(obj) + vargs2.append(var) + if not vargs2: + return False + else: + vargs1.append(vargs2) + try: + self._odesign.SetObjectTemperature(vargs1) + except: + self.logger.error("Failed to enable the temperature dependence") + return False + else: + self.logger.info("Assigned Objects Temperature") + return True + + @pyaedt_function_handler() + def _create_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, portonplane): + """Create a sheet from the edge closest to the object. + + Parameters + ---------- + startobj : str + Name of the starting object. + endobject : str + Name of the ending object. + axisdir : int + Axis direction. Options are ``0`` through ``5``. + portonplane : bool + Whether edges are to be on the plane orthogonal to the axis + direction. + + Returns + ------- + str + Name of the sheet. + list + List of float values of the first edge midpoint. + Point in ``[x, y, z]`` coordinates. + list + List of float values of the second edge midpoint. + Point in ``[x, y, z]`` coordinates. + + """ + out, parallel = self.find_closest_edges(startobj, endobject, axisdir) + port_edges = self.get_equivalent_parallel_edges(out, portonplane, axisdir, startobj, endobject) + if port_edges is None or port_edges is False: + port_edges = [] + for e in out: + edge = self.create_object_from_edge(e) + port_edges.append(edge) + edge_0 = port_edges[0].edges[0] + edge_1 = port_edges[1].edges[0] + sheet_name = port_edges[0].name + point0 = edge_0.midpoint + point1 = edge_1.midpoint + self.connect(port_edges) + return sheet_name, point0, point1 + + @pyaedt_function_handler() + def find_point_around(self, objectname, startposition, offset, plane): + """Find the point around an object. + + Parameters + ---------- + objectname : str + Name of the object. + startposition : list + List of the ``[x, y, z]`` coordinates for the starting + position of the object. + offset : + Offset to apply. + plane : str + Coordinate plane of the arc. Choices are ``"YZ"``, + ``"ZX"``, and ``"XY"``. + + + Returns + ------- + list + List of the ``[x, y, z]`` coordinates for the point. + + """ + position = [0, 0, 0] + angle = 0 + if plane == 0: + while angle <= 360: + position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) + position[1] = startposition[1] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + elif plane == 1: + while angle <= 360: + position[1] = startposition[1] + offset * math.cos(math.pi * angle / 180) + position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + elif plane == 2: + while angle <= 360: + position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) + position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + return position + + @pyaedt_function_handler() + def create_sheet_to_ground(self, objectname, groundname=None, axisdir=0, sheet_dim=1): + """Create a sheet between an object and a ground plane. + + The ground plane must be bigger than the object and perpendicular + to one of the three axes. + + Parameters + ---------- + objectname : str + Name of the object. + groundname : str, optional + Name of the ground. The default is ``None``, in which case the + bounding box is used. + axisdir : int, optional + Axis direction. Options are ``0`` through ``5``. The default is ``0``. + sheet_dim : optional + Sheet dimension in millimeters. The default is ``1``. + + Returns + ------- + int + ID of the sheet created. + + References + ---------- + + >>> oEditor.CreatePolyline + """ + if axisdir > 2: + obj_cent = [-1e6, -1e6, -1e6] + else: + obj_cent = [1e6, 1e6, 1e6] + face_ob = None + for face in self[objectname].faces: + center = face.center + if not center: + continue + if axisdir > 2 and center[axisdir - 3] > obj_cent[axisdir - 3]: + obj_cent = center + face_ob = face + elif axisdir <= 2 and center[axisdir] < obj_cent[axisdir]: + obj_cent = center + face_ob = face + vertex = face_ob.vertices + start = vertex[0].position + + if not groundname: + gnd_cent = [] + bounding = self.get_model_bounding_box() + if axisdir < 3: + for i in bounding[0:3]: + gnd_cent.append(float(i)) + else: + for i in bounding[3:]: + gnd_cent.append(float(i)) + else: + ground_plate = self[groundname] + if axisdir > 2: + gnd_cent = [1e6, 1e6, 1e6] + else: + gnd_cent = [-1e6, -1e6, -1e6] + face_gnd = ground_plate.faces + for face in face_gnd: + center = face.center + if not center: + continue + if axisdir > 2 and center[axisdir - 3] < gnd_cent[axisdir - 3]: + gnd_cent = center + elif axisdir <= 2 and center[axisdir] > gnd_cent[axisdir]: + gnd_cent = center + + axisdist = obj_cent[divmod(axisdir, 3)[1]] - gnd_cent[divmod(axisdir, 3)[1]] + if axisdir < 3: + axisdist = -axisdist + + if divmod(axisdir, 3)[1] == 0: + cs = self._app.PLANE.YZ + vector = [axisdist, 0, 0] + elif divmod(axisdir, 3)[1] == 1: + cs = self._app.PLANE.ZX + vector = [0, axisdist, 0] + elif divmod(axisdir, 3)[1] == 2: + cs = self._app.PLANE.XY + vector = [0, 0, axisdist] + + offset = self.find_point_around(objectname, start, sheet_dim, cs) + p1 = self.create_polyline([start, offset]) + p2 = p1.clone().move(vector) + self.connect([p1, p2]) + + return p1 + + @pyaedt_function_handler() + def _get_faceid_on_axis(self, objname, axisdir): + """Get the ID of the face on the axis. + + Parameters + ---------- + objname : str + Name of the object. + axisdir : int + Axis direction. Options are ``1`` through ``5``. + + Returns + ------- + int + ID of the face. + + """ + faces = self.get_object_faces(objname) + face = None + center = None + for f in faces: + try: + c = self.get_face_center(f) + if not face and c: + face = f + center = c + elif axisdir < 3 and c[axisdir] < center[axisdir]: + face = f + center = c + elif axisdir > 2 and c[axisdir - 3] > center[axisdir - 3]: + face = f + center = c + except: + pass + return face + + @pyaedt_function_handler() + def _create_microstrip_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, vfactor=3, hfactor=5): + def duplicate_and_unite(sheet_name, array1, array2, dup_factor): + status, list = self.duplicate_along_line(sheet_name, array1, dup_factor + 1) + status, list2 = self.duplicate_along_line(sheet_name, array2, dup_factor + 1) + list_unite.extend(list) + list_unite.extend(list2) + self.unite(list_unite) + + tol = 1e-6 + out, parallel = self.find_closest_edges(startobj, endobject, axisdir) + port_edges = self.get_equivalent_parallel_edges(out, True, axisdir, startobj, endobject) + if port_edges is None: + return False + sheet_name = port_edges[0].name + point0 = port_edges[0].edges[0].midpoint + point1 = port_edges[1].edges[0].midpoint + len = port_edges[0].edges[0].length + vect = GeometryOperators.v_points(point1, point0) + l1 = out[0].length + l2 = out[1].length + if l1 < l2: + vect_t = [i * (vfactor - 1) for i in vect] + self.move(port_edges[0], vect_t) + else: + vect_t = [i * (1 - vfactor) for i in vect] + self.move(port_edges[1], vect_t) + + self.connect(port_edges) + list_unite = [sheet_name] + dup_factor = divmod((hfactor + 1), 2)[0] + coeff = float(hfactor - 1) / 2 / dup_factor + + if divmod(axisdir, 3)[1] == 0 and abs(vect[1]) < tol: + duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 0 and abs(vect[2]) < tol: + duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) + elif divmod(axisdir, 3)[1] == 1 and abs(vect[0]) < tol: + duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 1 and abs(vect[2]) < tol: + duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) + elif divmod(axisdir, 3)[1] == 2 and abs(vect[0]) < tol: + duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 2 and abs(vect[1]) < tol: + duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) + + return sheet_name, point0, point1 + + @pyaedt_function_handler() + def get_boundaries_name(self): + """Retrieve all boundary names. + + Returns + ------- + list + List of boundary names. Boundaries with multiple modes will return one + boundary for each mode. + + References + ---------- + + >>> oModule.GetBoundaries + """ + if self._app.design_type == "Icepak": + return list(self._app.odesign.GetChildObject("Thermal").GetChildNames()) + else: + return list(self._app.odesign.GetChildObject("Boundaries").GetChildNames()) + + @pyaedt_function_handler() + def set_object_model_state(self, obj_list, model=True): + """Set a list of objects to either models or non-models. + + Parameters + ---------- + obj_list : list + List of objects IDs or names. + model : bool, optional + Whether to set the objects as models. The default is ``True``. + If ``False``, the objects are set as non-models. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ChangeProperty + """ + selections = self.convert_to_selections(obj_list, True) + arguments = [ + "NAME:AllTabs", + [ + "NAME:Geometry3DAttributeTab", + ["NAME:PropServers"] + selections, + ["NAME:ChangedProps", ["NAME:Model", "Value:=", model]], + ], + ] + self._modeler.oeditor.ChangeProperty(arguments) + return True + + @pyaedt_function_handler() + def get_objects_in_group(self, group): + """Retrieve a list of objects belonging to a group. + + Parameters + ---------- + group : str + Name of the group. + + Returns + ------- + list + List of objects belonging to the group. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + """ + if type(group) is not str: + raise ValueError("Group name must be a string") + group_objs = list(self.oeditor.GetObjectsInGroup(group)) + if not group_objs: + return None + return group_objs + + @pyaedt_function_handler() + def get_group_bounding_box(self, group): + """Retrieve the bounding box of a group. + + Parameters + ---------- + group : str + Name of the group. + + Returns + ------- + list + List of six float values representing the bounding box + in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + >>> oEditor.GetModelBoundingBox + """ + if type(group) is not str: + raise ValueError("Group name must be a string") + group_objs = list(self.oeditor.GetObjectsInGroup(group)) + if not group_objs: + return None + all_objs = self.object_names + objs_to_unmodel = [i for i in all_objs if i not in group_objs] + if objs_to_unmodel: + vArg1 = ["NAME:Model", "Value:=", False] + self._change_geometry_property(vArg1, objs_to_unmodel) + bounding = self.get_model_bounding_box() + self._odesign.Undo() + else: + bounding = self.get_model_bounding_box() + return bounding + + @pyaedt_function_handler() + def convert_to_selections(self, object_id, return_list=False): + """Convert modeler objects. + + This method converts modeler object or IDs to the corresponding + output according to the following scheme: + + ==================== =========================== + ``object_id`` Return value + ==================== =========================== + + ``int`` object name (str) + ``Object3D`` object name (str) + ``FacePrimitive`` int, face ID + ``EdgePrimitive`` int, edge ID + ``str`` return the same ``str`` + + + - If ``object_id`` is a list, a list is returned according + to the table. If ``object_id`` is a single value, a list + of ``length == 1`` is returned (default). + + - If the second argument, ``return_list``, is set to `False` (default), a + string is returned with elements separated by a comma (,)". + + + Parameters + ---------- + object_id : str, int, list + One or more object IDs whose name will be returned. A list can contain + both strings (object names) and integers (object IDs). + return_list : bool, option + Whether to return a list of the selections. The default is + ``False``, in which case a string of the selections is returned. + If ``True``, a list of the selections is returned. + + Returns + ------- + str or list + Name of the objects corresponding to the one or more object IDs passed as arguments. + + """ + if not isinstance(object_id, list): + object_id = [object_id] + objnames = [] + for el in object_id: + if isinstance(el, int) and el in self.objects: + objnames.append(self.objects[el].name) + elif isinstance(el, int): + objnames.append(el) + elif isinstance(el, Object3d): + objnames.append(el.name) + elif isinstance(el, FacePrimitive) or isinstance(el, EdgePrimitive) or isinstance(el, VertexPrimitive): + objnames.append(el.id) + elif isinstance(el, str): + objnames.append(el) + if return_list: + return objnames + else: + return ",".join([str(i) for i in objnames]) + + @pyaedt_function_handler() + def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_objs=False, delete_invalid_objs=True): + """Split a list of objects. + In case of 3D design possible splitting options are plane, Face Primitive, Edge Primitive or Polyline. + In case of 2D design possible splitting option is plane. + + Parameters + ---------- + objects : str, int, or list + One or more objects to split. A list can contain + both strings (object names) and integers (object IDs). + plane : str, optional + Coordinate plane of the cut or the Application.PLANE object. + The default value is ``None``. + Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``. + If plane or tool parameter are not provided the method returns ``False``. + sides : str, optional + Which side to keep. The default is ``"Both"``, in which case + all objects are kept after the split. Options are ``"Both"``, + ``"NegativeOnly"``, and ``"PositiveOnly"``. + tool : str, int, :class:`pyaedt.modeler.cad.elements3d.FacePrimitive`or + :class:`pyaedt.modeler.cad.elements3d.EdgePrimitive`, optional + For 3D design types is the name, ID, face, edge or polyline used to split the objects. + For 2D design types is the name of the plane used to split the objects. + The default value is ``None``. + If plane or tool parameter are not provided the method returns ``False``. + split_crossing_objs : bool, optional + Whether to split crossing plane objects. + The default is ``False``. + delete_invalid_objs : bool, optional + Whether to delete invalid objects. + The default is ``True``. + + Returns + ------- + list of str + List of split object names. + + References + ---------- + + >>> oEditor.Split + """ + if plane is None and not tool or plane and tool: + self.logger.info("One method to split the objects has to be defined.") + return False + objects = self.convert_to_selections(objects) + all_objs = [i for i in self.object_names] + selections = [] + planes = "Dummy" + tool_type = "PlaneTool" + tool_entity_id = -1 + if self._is3d: + obj_name = None + obj = [] + if plane is not None and not tool: + tool_type = "PlaneTool" + tool_entity_id = -1 + planes = GeometryOperators.cs_plane_to_plane_str(plane) + selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] + elif tool and plane is None: + if isinstance(tool, str): + obj = [f for f in self.object_list if f.name == tool][0] + obj_name = obj.name + if isinstance(obj, Object3d) and obj.object_type != "Line": + obj = obj.faces[0] + tool_type = "FaceTool" + elif obj.object_type == "Line": + obj = obj.edges[0] + tool_type = "EdgeTool" + elif isinstance(tool, int): + # check whether tool it's an object Id + if tool in self.objects.keys(): + obj = self.objects[tool] + else: + # check whether tool is an ID of an object face + objs = [o for o in self.object_list for f in o.faces if f.id == tool] + if objs: + obj = objs[0] + else: + self.logger.info("Tool must be a sheet object or a face of an object.") + return False + if isinstance(obj, FacePrimitive) or isinstance(obj, Object3d) and obj.object_type != "Line": + obj_name = obj.name + obj = obj.faces[0] + tool_type = "FaceTool" + elif obj.object_type == "Line": + obj_name = obj.name + obj = obj.edges[0] + tool_type = "EdgeTool" + elif isinstance(tool, FacePrimitive): + for o in self.object_list: + for f in o.faces: + if f.id == tool.id: + obj_name = o.name + obj = f + tool_type = "FaceTool" + elif isinstance(tool, EdgePrimitive): + for o in self.object_list: + for e in o.edges: + if e.id == tool.id: + obj_name = o.name + obj = e + tool_type = "EdgeTool" + elif isinstance(tool, Polyline) or tool.object_type != "Line": + for o in self.object_list: + if o.name == tool.name: + obj_name = tool.name + obj = o.edges[0] + tool_type = "EdgeTool" + else: + self.logger.error("Face tool part has to be provided as a string (name) or an int (face id).") + return False + planes = "Dummy" + tool_type = tool_type + tool_entity_id = obj.id + selections = [ + "NAME:Selections", + "Selections:=", + objects, + "NewPartsModelFlag:=", + "Model", + "ToolPart:=", + obj_name, + ] + else: + if plane is None and tool or not plane: + self.logger.info("For 2D design types only planes can be defined.") + return False + elif plane is not None: + tool_type = "PlaneTool" + tool_entity_id = -1 + planes = GeometryOperators.cs_plane_to_plane_str(plane) + selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] + self.oeditor.Split( + selections, + [ + "NAME:SplitToParameters", + "SplitPlane:=", + planes, + "WhichSide:=", + sides, + "ToolType:=", + tool_type, + "ToolEntityID:=", + tool_entity_id, + "SplitCrossingObjectsOnly:=", + split_crossing_objs, + "DeleteInvalidObjects:=", + delete_invalid_objs, + ], + ) + self.refresh_all_ids() + return [objects] + [i for i in self.object_names if i not in all_objs] + + @pyaedt_function_handler() # TODO: Deprecate this and add duplicate as an option in the mirror method. + def duplicate_and_mirror( + self, + objid, + position, + vector, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate and mirror a selection. + + Parameters + ---------- + objid : str, int, or Object3d + Name or ID of the object. + position : float + List of the ``[x, y, z]`` coordinates or + Application.Position object for the selection. + vector : float + List of the ``[x1, y1, z1]`` coordinates or + Application.Position object for the vector. + is_3d_comp : bool, optional + If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + list + List of objects created or an empty list. + + References + ---------- + + >>> oEditor.DuplicateMirror + """ + return self.mirror( + objid, position, vector, duplicate=True, is_3d_comp=is_3d_comp, duplicate_assignment=duplicate_assignment + ) + # selections = self.convert_to_selections(objid) + + @pyaedt_function_handler() + def mirror(self, objid, position, vector, duplicate=False, is_3d_comp=False, duplicate_assignment=True): + """Mirror a selection. + + Parameters + ---------- + objid : str, int, or Object3d + Name or ID of the object. + position : int or float + List of the ``[x, y, z]`` coordinates or the + ``Application.Position`` object for the selection. + duplicate : bool, optional + Whether if duplicate the object before mirror or not. Default is ``False``. + is_3d_comp : bool, optional + Whether the component is 3D. The default is ``False``. If ``True``, the method + tries to return the duplicated list of 3D components. + vector : float + List of the ``[x1, y1, z1]`` coordinates or + the ``Application.Position`` object for the vector. + duplicate_assignment : bool, optional + Whether to duplicate selection assignments. The default is ``True``. + + Returns + ------- + bool, list + List of objects created or ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Mirror + >>> oEditor.DuplicateMirror + """ + selections = self.convert_to_selections(objid) + Xpos, Ypos, Zpos = self._pos_with_arg(position) + Xnorm, Ynorm, Znorm = self._pos_with_arg(vector) + if duplicate: + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:DuplicateToMirrorParameters"] + vArg2.append("DuplicateMirrorBaseX:="), vArg2.append(Xpos) + vArg2.append("DuplicateMirrorBaseY:="), vArg2.append(Ypos) + vArg2.append("DuplicateMirrorBaseZ:="), vArg2.append(Zpos) + vArg2.append("DuplicateMirrorNormalX:="), vArg2.append(Xnorm) + vArg2.append("DuplicateMirrorNormalY:="), vArg2.append(Ynorm) + vArg2.append("DuplicateMirrorNormalZ:="), vArg2.append(Znorm) + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + if is_3d_comp: + orig_3d = [i for i in self.user_defined_component_names] + added_objs = self.oeditor.DuplicateMirror(vArg1, vArg2, vArg3) + self.add_new_objects() + if is_3d_comp: + added_3d_comps = [i for i in self.user_defined_component_names if i not in orig_3d] + if added_3d_comps: + self.logger.info("Found 3D Components Duplication") + return added_3d_comps + return added_objs + else: + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:MirrorParameters"] + vArg2.append("MirrorBaseX:="), vArg2.append(Xpos) + vArg2.append("MirrorBaseY:="), vArg2.append(Ypos) + vArg2.append("MirrorBaseZ:="), vArg2.append(Zpos) + vArg2.append("MirrorNormalX:="), vArg2.append(Xnorm) + vArg2.append("MirrorNormalY:="), vArg2.append(Ynorm) + vArg2.append("MirrorNormalZ:="), vArg2.append(Znorm) + + self.oeditor.Mirror(vArg1, vArg2) + return True + + @pyaedt_function_handler() + def move(self, objid, vector): + """Move objects from a list. + + Parameters + ---------- + objid : list, Position object + List of object IDs. + vector : list + Vector of the direction move. It can be a list of the ``[x, y, z]`` + coordinates or a Position object. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Move + """ + Xvec, Yvec, Zvec = self._pos_with_arg(vector) + szSelections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", szSelections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:TranslateParameters"] + vArg2.append("TranslateVectorX:="), vArg2.append(Xvec) + vArg2.append("TranslateVectorY:="), vArg2.append(Yvec) + vArg2.append("TranslateVectorZ:="), vArg2.append(Zvec) + + if self.oeditor is not None: + self.oeditor.Move(vArg1, vArg2) + return True + + @pyaedt_function_handler() + def duplicate_around_axis( + self, + objid, + cs_axis, + angle=90, + nclones=2, + create_new_objects=True, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate a selection around an axis. + + Parameters + ---------- + objid : list, str, int, Object3d or UserDefinedComponent + Name or ID of the object. + cs_axis : + Coordinate system axis or the Application.AXIS object. + angle : float, optional + Angle rotation in degees. The default is ``90``. + nclones : int, optional + Number of clones. The default is ``2``. + create_new_objects : + Whether to create the copies as new objects. The + default is ``True``. + is_3d_comp : bool, optional + If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + tuple + + References + ---------- + + >>> oEditor.DuplicateAroundAxis + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = [ + "NAME:DuplicateAroundAxisParameters", + "CreateNewObjects:=", + create_new_objects, + "WhichAxis:=", + GeometryOperators.cs_axis_str(cs_axis), + "AngleStr:=", + self._arg_with_dim(angle, "deg"), + "Numclones:=", + str(nclones), + ] + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + added_objs = self.oeditor.DuplicateAroundAxis(vArg1, vArg2, vArg3) + self._duplicate_added_objects_tuple() + if is_3d_comp: + return self._duplicate_added_components_tuple() + return True, list(added_objs) + + def _duplicate_added_objects_tuple(self): + added_objects = self.add_new_objects() + if added_objects: + return True, added_objects + else: + return False, [] + + def _duplicate_added_components_tuple(self): + added_component = self.add_new_user_defined_component() + if added_component: + return True, added_component + else: + return False, [] + + @pyaedt_function_handler() + def duplicate_along_line( + self, + objid, + vector, + nclones=2, + attachObject=False, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate a selection along a line. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + vector : list + List of ``[x1,y1,z1]`` coordinates or the Application.Position object for + the vector. + attachObject : bool, optional + The default is ``False``. + nclones : int, optional + Number of clones. The default is ``2``. + is_3d_comp : bool, optional + If True, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + tuple + + References + ---------- + + >>> oEditor.DuplicateAlongLine + """ + selections = self.convert_to_selections(objid) + Xpos, Ypos, Zpos = self._pos_with_arg(vector) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:DuplicateToAlongLineParameters"] + vArg2.append("CreateNewObjects:="), vArg2.append(not attachObject) + vArg2.append("XComponent:="), vArg2.append(Xpos) + vArg2.append("YComponent:="), vArg2.append(Ypos) + vArg2.append("ZComponent:="), vArg2.append(Zpos) + vArg2.append("Numclones:="), vArg2.append(str(nclones)) + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + self.oeditor.DuplicateAlongLine(vArg1, vArg2, vArg3) + if is_3d_comp: + return self._duplicate_added_components_tuple() + if attachObject: + return True, [] + return self._duplicate_added_objects_tuple() + + @pyaedt_function_handler() + def thicken_sheet(self, objid, thickness, bBothSides=False): + """Thicken the sheet of the selection. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + thickness : float, str + Amount to thicken the sheet by. + bBothSides : bool, optional + Whether to thicken the sheet on both side. The default is ``False``. + + Returns + ------- + pyaedt.modeler.cad.object3d.Object3d + + References + ---------- + + >>> oEditor.ThickenSheet + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:SheetThickenParameters"] + vArg2.append("Thickness:="), vArg2.append(self._arg_with_dim(thickness)) + vArg2.append("BothSides:="), vArg2.append(bBothSides) + + self.oeditor.ThickenSheet(vArg1, vArg2) + + if isinstance(objid, list): + obj_list = [] + for objl in objid: + obj_list.append(self.update_object(objl)) + return obj_list + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_along_normal(self, obj_name, face_id, sweep_value=0.1): + """Sweep the selection along the vector. + + Parameters + ---------- + obj_name : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + face_id : int or list + Face or list of faces to sweep. + sweep_value : float, optional + Sweep value. The default is ``0.1``. + + Returns + ------- + pyaedt.modeler.cad.object3d.Object3d + + References + ---------- + + >>> oEditor.SweepFacesAlongNormal + """ + if not isinstance(face_id, list): + face_id = [face_id] + selections = self.convert_to_selections(obj_name) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:Parameters"] + vArg2.append( + [ + "NAME:SweepFaceAlongNormalToParameters", + "FacesToDetach:=", + face_id, + "LengthOfSweep:=", + self._arg_with_dim(sweep_value), + ] + ) + + objs = self._all_object_names + self.oeditor.SweepFacesAlongNormal(vArg1, vArg2) + self.cleanup_objects() + objs2 = self._all_object_names + obj = [i for i in objs2 if i not in objs] + for el in obj: + self._create_object(el) + if obj: + if len(obj) > 1: + return [self.update_object(self[o]) for o in obj] + else: + return self.update_object(self[obj[0]]) + return False + + @pyaedt_function_handler() + def sweep_along_vector(self, objid, sweep_vector, draft_angle=0, draft_type="Round"): + """Sweep the selection along a vector. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + sweep_vector : float + List of ``[x1, y1, z1]`` coordinates or Application.Position object for + the vector. + draft_angle : float, optional + Draft angle in degrees. The default is ``0``. + draft_type : str + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAlongVector + """ + selections = self.convert_to_selections(objid) + vectorx, vectory, vectorz = self._pos_with_arg(sweep_vector) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:VectorSweepParameters"] + vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) + vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) + vArg2.append("SweepVectorX:="), vArg2.append(vectorx) + vArg2.append("SweepVectorY:="), vArg2.append(vectory) + vArg2.append("SweepVectorZ:="), vArg2.append(vectorz) + + self.oeditor.SweepAlongVector(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_along_path( + self, objid, sweep_object, draft_angle=0, draft_type="Round", is_check_face_intersection=False, twist_angle=0 + ): + """Sweep the selection along a path. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + sweep_object : str, int + Name or ID of the sweep. + draft_angle : float, optional + Draft angle in degrees. The default is ``0``. + draft_type : str + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + is_check_face_intersection : bool, optional + The default is ``False``. + twist_angle : float, optional + Twist angle in degrees. The default is ``0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAlongPath + """ + selections = self.convert_to_selections(objid) + "," + self.convert_to_selections(sweep_object) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:PathSweepParameters"] + vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) + vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) + vArg2.append("CheckFaceFaceIntersection:="), vArg2.append(is_check_face_intersection) + vArg2.append("TwistAngle:="), vArg2.append(str(twist_angle) + "deg") + + self.oeditor.SweepAlongPath(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_around_axis(self, objid, cs_axis, sweep_angle=360, draft_angle=0, number_of_segments=0): + """Sweep the selection around the axis. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + cs_axis : + Coordinate system axis or the Application.AXIS object. + sweep_angle : float + Sweep angle in degrees. The default is ``360``. + draft_angle : float + Draft angle in degrees. The default is ``0``. + number_of_segments : int, optional + Number of segments of the sweep operation. Default is ``0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAroundAxis + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = [ + "NAME:AxisSweepParameters", + "DraftAngle:=", + self._arg_with_dim(draft_angle, "deg"), + "DraftType:=", + "Round", + "CheckFaceFaceIntersection:=", + False, + "SweepAxis:=", + GeometryOperators.cs_axis_str(cs_axis), + "SweepAngle:=", + self._arg_with_dim(sweep_angle, "deg"), + "NumOfSegments:=", + str(number_of_segments), + ] + + self.oeditor.SweepAroundAxis(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def section(self, object_list, plane, create_new=True, section_cross_object=False): + """Section the selection. + + Parameters + ---------- + object_list : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` + One or more objects to section. + plane : str + Coordinate plane or Application.PLANE object. + Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``.' + create_new : bool, optional + The default is ``True``, but this parameter has no effect. + section_cross_object : bool, optional + The default is ``False``, but this parameter has no effect. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Section + """ + section_plane = GeometryOperators.cs_plane_to_plane_str(plane) + + selections = self.convert_to_selections(object_list) + + self.oeditor.Section( + ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], + [ + "NAME:SectionToParameters", + "CreateNewObjects:=", + create_new, + "SectionPlane:=", + section_plane, + "SectionCrossObject:=", + section_cross_object, + ], + ) + self.refresh_all_ids() + return True + + @pyaedt_function_handler() + def separate_bodies(self, object_list, create_group=False): + """Separate bodies of the selection. + + Parameters + ---------- + object_list : list + List of objects to separate. + create_group : bool, optional + Whether to create a group. The default is ``False``. + + Returns + ------- + pyaedt.modeler.Object3d.Object3d, bool + 3D object. + ``False`` when failed. + + References + ---------- + + >>> oEditor.SeparateBody + """ + try: + selections = self.convert_to_selections(object_list) + all_objs = [i for i in self.object_names] + self.oeditor.SeparateBody( + ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], + ["CreateGroupsForNewObjects:=", create_group], + ) + self.refresh_all_ids() + new_objects_list_names = [selections] + [i for i in self.object_names if i not in all_objs] + new_objects_list = [] + for obj in self.object_list: + for new_obj in new_objects_list_names: + if obj.name == new_obj: + new_objects_list.append(obj) + return new_objects_list + except: + return False + + @pyaedt_function_handler() + def rotate(self, objid, cs_axis, angle=90.0, unit="deg"): + """Rotate the selection. + + Parameters + ---------- + objid : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` + ID of the object. + cs_axis + Coordinate system axis or the Application.AXIS object. + angle : float + Angle of rotation. The units, defined by ``unit``, can be either + degrees or radians. The default is ``90.0``. + unit : text, optional + Units for the angle. Options are ``"deg"`` or ``"rad"``. + The default is ``"deg"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Rotate + """ + selections = self.convert_to_selections(objid) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:RotateParameters"] + vArg2.append("RotateAxis:="), vArg2.append(GeometryOperators.cs_axis_str(cs_axis)) + vArg2.append("RotateAngle:="), vArg2.append(self._arg_with_dim(angle, unit)) + + if self.oeditor is not None: + self.oeditor.Rotate(vArg1, vArg2) + + return True + + @pyaedt_function_handler() + def subtract(self, blank_list, tool_list, keep_originals=True, **kwargs): + """Subtract objects. + + Parameters + ---------- + blank_list : str, Object3d, int or List of str, int and Object3d. + List of objects to subtract from. The list can be of + either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. + tool_list : list + List of objects to subtract. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Subtract + """ + if "keepOriginals" in kwargs: + warnings.warn("keepOriginals has been deprecated. use keep_originals.", DeprecationWarning) + keep_originals = kwargs["keepOriginals"] + szList = self.convert_to_selections(blank_list) + szList1 = self.convert_to_selections(tool_list) + + vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] + vArg2 = ["NAME:SubtractParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Subtract(vArg1, vArg2) + if not keep_originals: + self.cleanup_objects() + + return True + + @pyaedt_function_handler() + def imprint(self, blank_list, tool_list, keep_originals=True): + """Imprin an object list on another object list. + + Parameters + ---------- + blank_list : list of Object3d or list of int + List of objects to imprint from. The list can be of + either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. + tool_list : list of Object3d or list of int + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Imprint + """ + szList = self.convert_to_selections(blank_list) + szList1 = self.convert_to_selections(tool_list) + + vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] + vArg2 = ["NAME:ImprintParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Imprint(vArg1, vArg2) + if not keep_originals: + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def _imprint_projection(self, tool_list, keep_originals=True, normal=True, vector_direction=None, distance="1mm"): + szList1 = self.convert_to_selections(tool_list) + + varg1 = ["NAME:Selections", "Selections:=", szList1] + varg2 = [ + "NAME:ImprintProjectionParameters", + "KeepOriginals:=", + keep_originals, + "NormalProjection:=", + normal, + ] + if not normal: + varg2.append("Distance:=") + varg2.append(self._app.value_with_units(distance)) + varg2.append("DirectionX:=") + varg2.append(self._app.value_with_units(vector_direction[0])) + varg2.append("DirectionY:=") + varg2.append(self._app.value_with_units(vector_direction[1])) + varg2.append("DirectionZ:=") + varg2.append(self._app.value_with_units(vector_direction[2])) + + self.oeditor.ImprintProjection(varg1, varg2) + if not keep_originals: + self.cleanup_objects() + return True + + @pyaedt_function_handler + def imprint_normal_projection( + self, + tool_list, + keep_originals=True, + ): + """Imprint the normal projection of objects over a sheet. + + Parameters + ---------- + tool_list : list + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ImprintProjection + """ + return self._imprint_projection(tool_list, keep_originals, True) + + @pyaedt_function_handler + def imprint_vector_projection( + self, + tool_list, + vector_points, + distance, + keep_originals=True, + ): + """Imprint the projection of objects over a sheet with a specified vector and distance. + + Parameters + ---------- + tool_list : list + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + vector_points : list + List of [x,y,z] vector projection. + distance : str, int + Distance of Projection. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ImprintProjection + """ + return self._imprint_projection(tool_list, keep_originals, False, vector_points, distance) + + @pyaedt_function_handler() + def purge_history(self, theList): + """Purge history objects from object names. + + Parameters + ---------- + theList : list + List of object names to purge. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.PurgeHistory + """ + szList = self.convert_to_selections(theList) + + vArg1 = ["NAME:Selections", "Selections:=", szList, "NewPartsModelFlag:=", "Model"] + + self.oeditor.PurgeHistory(vArg1) + return True + + @pyaedt_function_handler() + def get_model_bounding_box(self): + """Retrieve the model bounding box. + + + Returns + ------- + List + List of six float values representing the bounding box + in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + bb = list(self.oeditor.GetModelBoundingBox()) + bound = [float(b) for b in bb] + return bound + + @pyaedt_function_handler() + def unite(self, unite_list, purge=False, keep_originals=False): + """Unite objects from a list. + + Parameters + ---------- + unite_list : list + List of objects. + purge : bool, optional + Purge history after unite. Default is False. + keep_originals : bool, optional + Keep original objects used for the operation. Default is False. + + Returns + ------- + str + The united object that is the first in the list. + + References + ---------- + + >>> oEditor.Unite + """ + slice = min(100, len(unite_list)) + num_objects = len(unite_list) + remaining = num_objects + objs_groups = [] + while remaining > 1: + objs = unite_list[:slice] + szSelections = self.convert_to_selections(objs) + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + vArg2 = ["NAME:UniteParameters", "KeepOriginals:=", keep_originals] + if settings.aedt_version > "2022.2": + vArg2.append("TurnOnNBodyBoolean:=") + vArg2.append(True) + self.oeditor.Unite(vArg1, vArg2) + if szSelections.split(",")[0] in self.unclassified_names: + self.logger.error("Error in uniting objects.") + self._odesign.Undo() + self.cleanup_objects() + return False + elif purge: + self.purge_history(objs[0]) + objs_groups.append(objs[0]) + remaining -= slice + if remaining > 0: + unite_list = unite_list[slice:] + if remaining > 0: + objs_groups.extend(unite_list) + self.cleanup_objects() + if len(objs_groups) > 1: + return self.unite(objs_groups, purge=purge) + self.logger.info("Union of {} objects has been executed.".format(num_objects)) + return self.convert_to_selections(unite_list[0], False) + + @pyaedt_function_handler() + def clone(self, objid): + """Clone objects from a list of object IDs. + + Parameters + ---------- + objid : list + List of object IDs. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + List + List of names of objects cloned when successful. + + References + ---------- + + >>> oEditor.Copy + >>> oEditor.Paste + """ + self.copy(objid) + new_objects = self.paste() + return True, new_objects + + @pyaedt_function_handler() + def copy(self, object_list): + """Copy objects to the clipboard. + + Parameters + ---------- + object_list : list + List of objects (IDs or names). + + Returns + ------- + list + List of names of the objects copied when successful. + + References + ---------- + + >>> oEditor.Copy + """ + # convert to string + + try: + selections = self.convert_to_selections(object_list) + vArg1 = ["NAME:Selections", "Selections:=", selections] + self.oeditor.Copy(vArg1) + return selections + except AttributeError: + self.logger.error("Unable to copy selections to clipboard.") + return None + + @pyaedt_function_handler() + def paste(self): + """Paste objects from the clipboard. + + Returns + ------- + list + List of passed objects. + + References + ---------- + + >>> oEditor.Paste + """ + self.oeditor.Paste() + new_objects = self.add_new_objects() + return new_objects + + @pyaedt_function_handler() + def intersect(self, theList, keep_originals=False, **kwargs): + """Intersect objects from a list. + + Parameters + ---------- + theList : list + List of objects. + keep_originals : bool, optional + Whether to keep the original object. The default is ``False``. + + Returns + ------- + str + Retrieve the resulting 3D Object when succeeded. + + References + ---------- + + >>> oEditor.Intersect + """ + if "keeporiginal" in kwargs: + warnings.warn("keeporiginal has been deprecated. use keep_originals.", DeprecationWarning) + keep_originals = kwargs["keeporiginal"] + unclassified = list(self.oeditor.GetObjectsInGroup("Unclassified")) + szSelections = self.convert_to_selections(theList) + + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + vArg2 = ["NAME:IntersectParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Intersect(vArg1, vArg2) + unclassified1 = list(self.oeditor.GetObjectsInGroup("Unclassified")) + if unclassified != unclassified1: + self._odesign.Undo() + self.logger.error("Error in intersection. Reverting Operation") + return + self.cleanup_objects() + self.logger.info("Intersection Succeeded") + return self.convert_to_selections(theList[0], False) + + @pyaedt_function_handler() + def connect(self, theList): + """Connect objects from a list. + + Parameters + ---------- + theList : list + List of objects. + + Returns + ------- + pyaedt.modeler.Object3d.Object3d, bool + 3D object. + ``False`` when failed. + + References + ---------- + + >>> oEditor.Connect + """ + try: + unclassified_before = list(self.unclassified_names) + szSelections = self.convert_to_selections(theList) + szSelections_list = szSelections.split(",") + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + + self.oeditor.Connect(vArg1) + if unclassified_before != self.unclassified_names: + self._odesign.Undo() + self.logger.error("Error in connection. Reverting Operation") + return False + + self.cleanup_objects() + self.logger.info("Connection Correctly created") + + self.refresh_all_ids() + objects_list_after_connection = [ + obj + for obj in self.object_list + for sel in set(szSelections_list).intersection(self.object_names) + if obj.name == sel + ] + return objects_list_after_connection + except: + return False + + @pyaedt_function_handler() + def chassis_subtraction(self, chassis_part): + """Subtract all non-vacuum objects from the main chassis object. + + Parameters + ---------- + chassis_part : str + Name of the main chassis object. + + References + ---------- + + >>> oEditor.Subtract + """ + self.logger.info("Subtract all objects from Chassis object - exclude vacuum objs") + mat_names = self._omaterial_manager.GetNames() + num_obj_start = self.oeditor.GetNumObjects() + blank_part = chassis_part + # in main code this object will need to be determined automatically eg by name such as chassis or sheer size + self.logger.info("Blank Part in Subtraction = " + str(blank_part)) + """ + check if blank part exists, if not, skip subtraction + """ + tool_parts = list(self.oeditor.GetObjectsInGroup("Solids")) + tool_parts.remove(blank_part) + for mat in mat_names: + if str(mat).lower() == "vacuum": + objnames = self.oeditor.GetObjectsByMaterial(mat) + for obj in objnames: + tool_parts.remove(obj) + # tool_parts_final=list(set(tool_parts).difference(set(objnames))) + tool_parts = ",".join(tool_parts) + num_obj_end = self.oeditor.GetNumObjects() + self.subtract(blank_part, tool_parts, True) + + self.logger.info("Subtraction Objs - Initial: " + str(num_obj_start) + " , Final: " + str(num_obj_end)) + + @pyaedt_function_handler() + def _offset_on_plane(self, i, offset): + """Offset the object on a plane. + + Parameters + ---------- + i : + + offset : + Offset to apply. + + Returns + ------- + tuple + Position of object after offset is applied. + + """ + if i > 7: + off1 = 0 + elif i % 4 == 0 or i % 4 == 1: + off1 = offset + else: + off1 = -offset + if 3 < i < 8: + off2 = 0 + elif i % 2 == 0: + off2 = offset + else: + off2 = -offset + if i < 4: + off3 = 0 + elif i != 4 and i != 7 and i != 8 and i != 11: + off3 = -offset + else: + off3 = +offset + return off1, off2, off3 + + @pyaedt_function_handler() + def check_plane(self, obj, faceposition, offset=1): + """Check for the plane that is defined as the face for an object. + + Parameters + ---------- + obj : str + Name of the object. + faceposition : list + List of the ``[x, y, z]`` coordinates for the position of the face. + offset : optional + Offset to apply. The default is ``1``. + + Returns + ------- + str + Name of the plane. It can be "XY", "XZ" or "YZ". + + """ + + Xvec, Yvec, Zvec = self._pos_with_arg(faceposition) + + if isinstance(obj, int): + obj = self.objects[obj].name + plane = None + found = False + i = 0 + while not found: + off1, off2, off3 = self._offset_on_plane(i, offset) + vArg1 = ["NAME:FaceParameters"] + vArg1.append("BodyName:="), vArg1.append(obj) + vArg1.append("XPosition:="), vArg1.append(Xvec + "+" + self._arg_with_dim(off1)) + vArg1.append("YPosition:="), vArg1.append(Yvec + "+" + self._arg_with_dim(off2)) + vArg1.append("ZPosition:="), vArg1.append(Zvec + "+" + self._arg_with_dim(off3)) + try: + face_id = self.oeditor.GetFaceByPosition(vArg1) + if i < 4: + plane = "XY" + elif i < 8: + plane = "XZ" + else: + plane = "YZ" + found = True + except: + i = i + 1 + if i > 11: + found = True + + return plane + + @pyaedt_function_handler() + def get_matched_object_name(self, search_string): + """Retrieve the name of the matched object. + + Parameters + ---------- + search_string : str + Text string to search for. + + + Returns + ------- + str + Name of the matched object. + + References + ---------- + + >>> oEditor.GetMatchedObjectName + """ + return self.oeditor.GetMatchedObjectName(search_string) + + @pyaedt_function_handler() + def clean_objects_name(self, main_part_name): + """Clean the names of the objects for a main part. + + Parameters + ---------- + main_part_name : str + Name of the main part. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.RenamePart + """ + # import os.path + # (CADPath, CADFilename) = os.path.split(CADFile) + # (CADName, CADExt) = os.path.splitext(CADFilename) + CADSuffix = main_part_name + "_" + objNames = self.oeditor.GetMatchedObjectName(CADSuffix + "*") + for name in objNames: + RenameArgs = {} + RenameArgs["NAME"] = "Rename Data" + RenameArgs["Old Name"] = name + RenameArgs["New Name"] = name.replace(CADSuffix, "") + self.oeditor.RenamePart(RenameArgs) + return True + + @pyaedt_function_handler() + def create_airbox(self, offset=0, offset_type="Absolute", defname="AirBox_Auto"): + """Create an airbox that is as big as the bounding extension of the project. + + Parameters + ---------- + offset : + Double offset value to apply on the airbox faces versus the bounding box. + The default is ``0``. + offset_type : str + Type of the offset. Options are ``"Absolute"`` and ``"Relative"``. + The default is ``"Absolute"``. If ``"Relative"``, the offset input + is between 0 and 100. + defname : str, optional + Name of the airbox. The default is ``"AirBox_Auto"``. + + Returns + ------- + int + ID of the airbox created. + + References + ---------- + + >>> oEditor.CreateBox + """ + self.logger.info("Adding Airbox to the Bounding ") + + bound = self.get_model_bounding_box() + if offset_type == "Absolute": + offset1 = offset2 = offset3 = offset + else: + offset1 = (bound[3] - bound[0]) * offset / 100 + offset2 = (bound[4] - bound[1]) * offset / 100 + offset3 = (bound[5] - bound[2]) * offset / 100 + startpos = self.Position(bound[0] - offset1, bound[1] - offset2, bound[2] - offset3) + + dim = [] + dim.append(bound[3] - bound[0] + 2 * offset1) + dim.append(bound[4] - bound[1] + 2 * offset2) + dim.append(bound[5] - bound[2] + 2 * offset3) + airid = self.create_box(startpos, dim, defname) + return airid + + @pyaedt_function_handler() + def create_air_region(self, x_pos=0, y_pos=0, z_pos=0, x_neg=0, y_neg=0, z_neg=0, is_percentage=True): + """Create an air region. + + Parameters + ---------- + x_pos : float or str, optional + If float, padding in the +X direction in modeler units. + If str, padding with units in the +X direction. + The default is ``0``. + y_pos : float or str, optional + If float, padding in the +Y direction in modeler units. + If str, padding with units in the +Y direction. + The default is ``0``. + z_pos : float or str, optional + If float, padding in the +Z direction in modeler units. + If str, padding with units in the +Z direction. + The default is ``0``. + x_neg : float or str, optional + If float, padding in the -X direction in modeler units. + If str, padding with units in the -X direction. + The default is ``0``. + y_neg : float or str, optional + If float, padding in the -Y direction in modeler units. + If str, padding with units in the -Y direction. + The default is ``0``. + z_neg : float or str, optional + If float, padding in the -Z direction in modeler units. + If str, padding with units in the -Z direction. + The default is ``0``. + is_percentage : bool, optional + Region definition in percentage or absolute value. The default is `True``. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + 3D object. + + References + ---------- + + >>> oEditor.CreateRegion + """ + return self.create_region([x_pos, y_pos, z_pos, x_neg, y_neg, z_neg], is_percentage) + + @pyaedt_function_handler() + def edit_region_dimensions(self, listvalues): + """Modify the dimensions of the region. + + Parameters + ---------- + listvalues : list + List of the padding percentages along all six directions in + the form ``[+X, -X, +Y, -Y, +Z, -Z]``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ChangeProperty + """ + arg = ["NAME:AllTabs"] + arg2 = ["NAME:Geometry3DCmdTab", ["NAME:PropServers", "Region:CreateRegion:1"]] + arg3 = ["NAME:ChangedProps"] + p = ["+X", "-X", "+Y", "-Y", "+Z", "-Z"] + for label, value in zip(p, listvalues): + padding = [] + padding.append("NAME:" + label + " Padding Data") + padding.append("Value:=") + padding.append(str(value)) + arg3.append(padding) + arg2.append(arg3) + arg.append(arg2) + self.oeditor.ChangeProperty(arg) + return True + + @pyaedt_function_handler() + def create_face_list(self, face_list, name=None): + """Create a list of faces given a list of face ID or a list of objects. + + Parameters + ---------- + face_list : list + List of face ID or list of objects + + name : str, optional + Name of the new list. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.Lists` + List object when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateEntityList + """ + if name: + for i in self.user_lists: + if i.name == name: + self.logger.warning("A List with the specified name already exists!") + return i + face_list = self.convert_to_selections(face_list, True) + user_list = Lists(self) + list_type = "Face" + if user_list: + result = user_list.create( + object_list=face_list, + name=name, + type=list_type, + ) + if result: + return user_list + else: + self._app.logger.error("Wrong object definition. Review object list and type") + return False + else: + self._app.logger.error("User list object could not be created") + return False + + @pyaedt_function_handler() + def create_object_list(self, object_list, name=None): + """Create an object list given a list of object names. + + Parameters + ---------- + object_list : list + List of object names. + name : str, optional + Name of the new object list. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.Lists` + List object when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateEntityList + """ + if name: + for i in self.user_lists: + if i.name == name: + self.logger.warning("A List with the specified name already exists!") + return i + object_list = self.convert_to_selections(object_list, True) + user_list = Lists(self) + list_type = "Object" + if user_list: + result = user_list.create( + object_list=object_list, + name=name, + type=list_type, + ) + if result: + return user_list + else: + self._app.logger.error("Wrong object definition. Review object list and type") + return False + else: + self._app.logger.error("User list object could not be created") + return False + + @pyaedt_function_handler() + def generate_object_history(self, objectname): + """Generate history for the object. + + Parameters + ---------- + objectname : str + Name of the history object. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.GenerateHistory + """ + objectname = self.convert_to_selections(objectname) + self.oeditor.GenerateHistory( + ["NAME:Selections", "Selections:=", objectname, "NewPartsModelFlag:=", "Model", "UseCurrentCS:=", True] + ) + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def create_faceted_bondwire_from_true_surface(self, bondname, bond_direction, min_size=0.2, numberofsegments=8): + """Create a faceted bondwire from an existing true surface bondwire. + + Parameters + ---------- + bondname : str + Name of the bondwire to replace. + bond_direction : list + List of the ``[x, y, z]`` coordinates for the axis direction + of the bondwire. For example, ``[0, 1, 2]``. + min_size : float + Minimum size of the subsegment of the new polyline. The default is ``0.2``. + numberofsegments : int, optional + Number of segments. The default is ``8``. + + Returns + ------- + str + Name of the bondwire created. + """ + old_bondwire = self.get_object_from_name(bondname) + if not old_bondwire: + return False + edges = old_bondwire.edges + faces = old_bondwire.faces + centers = [] + for el in faces: + center = el.center + if center: + centers.append(center) + edgelist = [] + verlist = [] + for el in edges: + ver = el.vertices + if len(ver) < 2: + continue + p1 = ver[0].position + p2 = ver[1].position + p3 = [abs(i - j) for i, j in zip(p1, p2)] + + dir = p3.index(max(p3)) + if dir == bond_direction: + edgelist.append(el) + verlist.append([p1, p2]) + if not edgelist: + self.logger.error("No edges found specified direction. Check again") + return False + connected = [edgelist[0]] + tol = 1e-6 + for edge in edgelist[1:]: + ver = edge.vertices + p1 = ver[0].position + p2 = ver[1].position + for el in connected: + ver1 = el.vertices + p3 = ver1[0].position + p4 = ver1[1].position + dist = GeometryOperators.points_distance(p1, p3) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p1, p4) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p2, p3) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p2, p4) + if dist < tol: + connected.append(edge) + break + new_edges = [] + for edge in connected: + edge_object = self.create_object_from_edge(edge) + new_edges.append(edge_object) + + self.unite(new_edges) + self.generate_object_history(new_edges[0]) + self.convert_segments_to_line(new_edges[0].name) + + edges = new_edges[0].edges + i = 0 + edge_to_delete = [] + first_vert = None + for edge in edges: + ver = edge.vertices + p1 = ver[0].position + p2 = ver[1].position + if not first_vert: + first_vert = p1 + dist = GeometryOperators.points_distance(p1, p2) + if dist < min_size: + edge_to_delete.append(i) + i += 1 + + rad = 1e6 + move_vector = None + for fc in centers: + dist = GeometryOperators.points_distance(fc, first_vert) + if dist < rad: + rad = dist + move_vector = GeometryOperators.v_sub(fc, first_vert) + + P = self.get_existing_polyline(object=new_edges[0]) + + if edge_to_delete: + P.remove_edges(edge_to_delete) + + angle = math.pi * (180 - 360 / numberofsegments) / 360 + + status = P.set_crosssection_properties( + type="Circle", num_seg=numberofsegments, width=(rad * (2 - math.sin(angle))) * 2 + ) + if status: + self.move(new_edges[0], move_vector) + old_bondwire.model = False + return new_edges[0] + else: + return False + + @pyaedt_function_handler() + def get_entitylist_id(self, name): + """Retrieve the ID of an entity list. + + Parameters + ---------- + name : str + Name of the entity list. + + Returns + ------- + int + ID of the entity list. + + References + ---------- + + >>> oEditor.GetEntityListIDByName + """ + id = self.oeditor.GetEntityListIDByName(name) + return id + + @pyaedt_function_handler() + def create_outer_facelist(self, externalobjects, name="outer_faces"): + """Create a face list from a list of outer objects. + + Parameters + ---------- + externalobjects : list + List of outer objects. + name : str, optional + Name of the new list. The default is ``"outer_faces"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + """ + list2 = self.select_allfaces_fromobjects(externalobjects) # find ALL faces of outer objects + self.create_face_list(list2, name) + self.logger.info("Extfaces of thermal model = " + str(len(list2))) + return True + + @pyaedt_function_handler() + def explicitly_subtract(self, diellist, metallist): + """Explicitly subtract all elements in a SolveInside list and a SolveSurface list. + + Parameters + ---------- + diellist : list + List of dielectrics. + metallist : list + List of metals. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Subtract + >>> oEditor.PurgeHistory + """ + self.logger.info("Creating explicit subtraction between objects.") + for el in diellist: + list1 = el + list2 = "" + for el1 in metallist: + list2 = list2 + el1 + "," + for el1 in diellist: + if el1 is not el: + list2 = list2 + el1 + "," + if list2: + list2 = list2[:-1] + self.subtract(list1, list2, True) + self.purge_history(list1) + self.purge_history(list2) + for el in metallist: + list1 = el + list2 = "" + for el1 in metallist: + if el1 is not el: + list2 = list2 + el1 + "," + if list2: + list2 = list2[:-1] + self.subtract(list1, list2, True) + self.purge_history(list1) + self.purge_history(list2) + self.logger.info("Explicit subtraction is completed.") + return True + + @pyaedt_function_handler() + def find_port_faces(self, port_sheets): + """Find the vacuums given a list of input sheets. + + Starting from a list of input sheets, this method creates a list of output sheets + that represent the blank parts (vacuums) and the tool parts of all the intersections + of solids on the sheets. After a vacuum on a sheet is found, a port can be + created on it. + + Parameters + ---------- + port_sheets : list + List of input sheets names. + + Returns + ------- + List + List of output sheets (`2x len(port_sheets)`). + + """ + faces = [] + solids = [s for s in self.solid_objects if s.material_name not in ["vacuum", "air"] and s.model] + for sheet_name in port_sheets: + sheet = self[sheet_name] # get the sheet object + _, cloned = self.clone(sheet) + cloned = self[cloned[0]] + cloned.subtract(solids) + sheet.subtract(cloned) + cloned.name = sheet.name + "_Face1Vacuum" + faces.append(sheet.name) + faces.append(cloned.name) + return faces + + @pyaedt_function_handler() + def get_line_ids(self): + """Create a dictionary of object IDs for the lines in the design with the line name as the key.""" + line_ids = {} + line_list = list(self.oeditor.GetObjectsInGroup("Lines")) + for line_object in line_list: + # TODO Problem with GetObjectIDByName + try: + line_ids[line_object] = str(self.oeditor.GetObjectIDByName(line_object)) + except: + self.logger.warning("Line {} has an invalid ID!".format(line_object)) + return line_ids + + @pyaedt_function_handler() + def get_bounding_dimension(self): + """Retrieve the dimension array of the bounding box. + + Returns + ------- + list + List of three float values representing the bounding box dimensions + in the form ``[dim_x, dim_y, dim_z]``. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + oBoundingBox = list(self.oeditor.GetModelBoundingBox()) + dimensions = [] + dimensions.append(abs(float(oBoundingBox[0]) - float(oBoundingBox[3]))) + dimensions.append(abs(float(oBoundingBox[1]) - float(oBoundingBox[4]))) + dimensions.append(abs(float(oBoundingBox[2]) - float(oBoundingBox[5]))) + return dimensions + + @pyaedt_function_handler() + def get_object_name_from_edge_id(self, edge_id): + """Retrieve the object name for a predefined edge ID. + + Parameters + ---------- + edge_id : int + ID of the edge. + + Returns + ------- + str + Name of the edge if it exists, ``False`` otherwise. + + References + ---------- + + >>> oEditor.GetEdgeIDsFromObject + """ + for object in list(self._object_names_to_ids.keys()): + try: + oEdgeIDs = self.oeditor.GetEdgeIDsFromObject(object) + if str(edge_id) in oEdgeIDs: + return object + except: + return False + return False + + @pyaedt_function_handler() + def get_solving_volume(self): + """Generate a mesh for a setup. + + Returns + ------- + int + ``1`` when successful, ``0`` when failed. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + bound = self.get_model_bounding_box() + volume = abs(bound[3] - bound[0]) * abs(bound[4] - bound[1]) * abs(bound[5] - bound[2]) + volume = str(round(volume, 0)) + return volume + + @pyaedt_function_handler() + def vertex_data_of_lines(self, txtfilter=None): + """Generate a dictionary of line vertex data for all lines contained within the design. + + Parameters + ---------- + txtfilter : str, optional + Text string for filtering. The default is ``None``. When a text string is specified, + line data is generated only if this text string is contained within the line name. + + Returns + ------- + dict + Dictionary of the line name with a list of vertex positions in either 2D or 3D. + + """ + line_data = {} + lines = self.get_line_ids() + if txtfilter is not None: + lines = [n for n in lines if txtfilter in n] + for x in lines: + line_data[x] = self.get_vertices_of_line(x) + + return line_data + + @pyaedt_function_handler() + def get_vertices_of_line(self, sLineName): + """Generate a list of vertex positions for a line object from AEDT in model units. + + Parameters + ---------- + sLineName : str + Name of the line object in AEDT. + + Returns + ------- + list + List of the ``[x, y, (z)]`` coordinates for the 2D or 3D line object. + + References + ---------- + + >>> oEditor.GetVertexIDsFromObject + """ + position_list = [] + + # Get all vertices in the line + vertices_on_line = self.oeditor.GetVertexIDsFromObject(sLineName) + + if settings.aedt_version > "2022.2": + vertices_on_line = vertices_on_line[::-1] + + for x in vertices_on_line: + pos = self.oeditor.GetVertexPosition(x) + if self.design_type == "Maxwell 2D": + if self.geometry_mode == "XY": + position_list.append([float(pos[0]), float(pos[1])]) + else: + position_list.append([float(pos[0]), float(pos[2])]) + else: + position_list.append([float(pos[0]), float(pos[1]), float(pos[2])]) + + return position_list + + @pyaedt_function_handler() + def import_3d_cad( + self, + filename, + healing=False, + refresh_all_ids=True, + import_materials=False, + create_lightweigth_part=False, + group_by_assembly=False, + create_group=True, + separate_disjoints_lumped_object=False, + import_free_surfaces=False, + point_coicidence_tolerance=1e-6, + ): + """Import a CAD model. + + Parameters + ---------- + filename : str + Full path and name of the CAD file. + healing : bool, optional + Whether to perform healing. The default is ``False``, in which + case healing is not performed. + healing : int, optional + Whether to perform healing. The default is ``0``, in which + case healing is not performed. + refresh_all_ids : bool, optional + Whether to refresh all IDs after the CAD file is loaded. The + default is ``True``. Refreshing IDs can take a lot of time in + a big project. + import_materials : bool optional + Either to import material names from the file or not if presents. + create_lightweigth_part : bool ,optional + Either to import lightweight or not. + group_by_assembly : bool, optional + Either import by sub-assembly or individual parts. The default is ``False``. + create_group : bool, optional + Either to create a new group of imported objects. The default is ``True``. + separate_disjoints_lumped_object : bool, optional + Either to automatically separate disjoint parts. The default is ``False``. + import_free_surfaces : bool, optional + Either to import free surfaces parts. The default is ``False``. + point_coicidence_tolerance : float, optional + Tolerance on point. Default is ``1e-6``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Import + """ + + if str(healing) in ["0", "1"]: + warnings.warn( + "Assigning `0` or `1` to `healing` option is deprecated. Assign `True` or `False` instead.", + DeprecationWarning, + ) + vArg1 = ["NAME:NativeBodyParameters"] + vArg1.append("HealOption:="), vArg1.append(int(healing)) + vArg1.append("Options:="), vArg1.append("-1") + vArg1.append("FileType:="), vArg1.append("UnRecognized") + vArg1.append("MaxStitchTol:="), vArg1.append(-1) + vArg1.append("ImportFreeSurfaces:="), vArg1.append(import_free_surfaces) + vArg1.append("GroupByAssembly:="), vArg1.append(group_by_assembly) + vArg1.append("CreateGroup:="), vArg1.append(create_group) + vArg1.append("STLFileUnit:="), vArg1.append("Auto") + vArg1.append("MergeFacesAngle:="), vArg1.append(-1) + vArg1.append("PointCoincidenceTol:="), vArg1.append(point_coicidence_tolerance) + vArg1.append("CreateLightweightPart:="), vArg1.append(create_lightweigth_part) + vArg1.append("ImportMaterialNames:="), vArg1.append(import_materials) + vArg1.append("SeparateDisjointLumps:="), vArg1.append(separate_disjoints_lumped_object) + vArg1.append("SourceFile:="), vArg1.append(filename) + self.oeditor.Import(vArg1) + if refresh_all_ids: + self.refresh_all_ids() + self.logger.info("Step file {} imported".format(filename)) + return True + + @pyaedt_function_handler() + def import_spaceclaim_document(self, SCFile): + """Import a SpaceClaim document. + + Parameters + ---------- + SCFile : + Full path and name of the SpaceClaim file. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateUserDefinedModel + """ + environlist = os.environ + latestversion = "" + for l in environlist: + if "AWP_ROOT" in l: + if l > latestversion: + latestversion = l + if not latestversion: + self.logger.error("SpaceClaim is not found.") + else: + scdm_path = os.path.join(os.environ[latestversion], "scdm") + self.oeditor.CreateUserDefinedModel( + [ + "NAME:UserDefinedModelParameters", + [ + "NAME:Definition", + [ + "NAME:UDMParam", + "Name:=", + "GeometryFilePath", + "Value:=", + '"' + SCFile + '"', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 1, + ], + [ + "NAME:UDMParam", + "Name:=", + "IsSpaceClaimLinkUDM", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + ], + [ + "NAME:Options", + [ + "NAME:UDMParam", + "Name:=", + "Solid Bodies", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Surface Bodies", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Parameters", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Parameter Key", + "Value:=", + '""', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Named Selections", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "Rendering Attributes", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Material Assignment", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Import suppressed for physics objects", + "Value:=", + "0", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Explode Multi-Body Parts", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "SpaceClaim Installation Path", + "Value:=", + '"' + scdm_path + '"', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "Smart CAD Update", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + ], + ["NAME:GeometryParams"], + "DllName:=", + "SCIntegUDM", + "Library:=", + "installLib", + "Version:=", + "2.0", + "ConnectionID:=", + "", + ] + ) + self.refresh_all_ids() + return True + + @pyaedt_function_handler() + def modeler_variable(self, value): + """Modeler variable. + + Parameters + ---------- + value : + + + Returns + ------- + + """ + if isinstance(value, str): + return value + else: + return str(value) + self.model_units + + @pyaedt_function_handler() + def break_spaceclaim_connection(self): # TODO: Need to change this name. Don't use "break". + """Disconnect from the running SpaceClaim instance. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.BreakUDMConnection + """ + args = ["NAME:Selections", "Selections:=", "SpaceClaim1"] + self.oeditor.BreakUDMConnection(args) + return True + + @pyaedt_function_handler() + def load_scdm_in_hfss(self, SpaceClaimFile): + """Load a SpaceClaim file in HFSS. + + Parameters + ---------- + SpaceClaimFile : str + Full path and name of the SpaceClaim file. + + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateUserDefinedModel + >>> oEditor.BreakUDMConnection + """ + self.import_spaceclaim_document(SpaceClaimFile) + self.break_spaceclaim_connection() + return True + + @pyaedt_function_handler() + def get_faces_from_materials(self, mats): + """Select all outer faces given a list of materials. + + Parameters + ---------- + mats : list + List of materials to include in the search for outer + faces. + + Returns + ------- + list + List of all outer faces of the specified materials. + + References + ---------- + + >>> oEditor.GetObjectsByMaterial + >>> oEditor.GetFaceIDs + """ + self.logger.info("Selecting outer faces.") + + sel = [] + objs = [] + if type(mats) is str: + mats = [mats] + for mat in mats: + objs.extend(list(self.oeditor.GetObjectsByMaterial(mat.lower()))) + + for i in objs: + oFaceIDs = self.oeditor.GetFaceIDs(i) + + for face in oFaceIDs: + sel.append(int(face)) + return sel + + @pyaedt_function_handler() + def scale(self, obj_list, x=2.0, y=2.0, z=2.0): + """Scale a list of objects. + + Parameters + ---------- + obj_list : list + List of objects IDs or names. + x : float, optional + Scale factor for X. + y : float, optional + Scale factor for Y. + z : float, optional + Scale factor for Z. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Scale + """ + selections = self.convert_to_selections(obj_list, True) + arg1 = ["NAME:Selections", "Selections:=", ", ".join(selections), "NewPartsModelFlag:=", "Model"] + arg2 = ["NAME:ScaleParameters", "ScaleX:=", str(x), "ScaleY:=", str(y), "ScaleZ:=", str(z)] + self.oeditor.Scale(arg1, arg2) + return True + + @pyaedt_function_handler() + def select_allfaces_fromobjects(self, elements): + """Select all outer faces given a list of objects. + + Parameters + ---------- + elements : list + List of objects to include in the search for outer faces. + + Returns + ------- + List + List of outer faces in the given list of objects. + + References + ---------- + + >>> oEditor.GetFaceIDs + """ + self.logger.info("Selecting outer faces.") + + sel = [] + + for i in elements: + oFaceIDs = self.oeditor.GetFaceIDs(i) + + for face in oFaceIDs: + sel.append(int(face)) + return sel + + @pyaedt_function_handler() + def setunassigned_mats(self): + """Find unassagned objects and set them to non-model. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SetPropertyValue + """ + oObjects = list(self.oeditor.GetObjectsInGroup("Solids")) + for obj in oObjects: + pro = self.oeditor.GetPropertyValue("Geometry3DAttributeTab", obj, "Material") + if pro == '""': + self.oeditor.SetPropertyValue("Geometry3DAttributeTab", obj, "Model", False) + return True + + @pyaedt_function_handler() + def automatic_thicken_sheets(self, inputlist, value, internalExtr=True, internalvalue=1): + """Create thickened sheets for a list of input faces. + + This method automatically checks the direction in which to thicken the sheets. + + Parameters + ---------- + inputlist : list + List of faces. + value : float + Value in millimeters to thicken the sheets. + internalExtr : bool, optional + Whether to extrude sheets internally. The default is ``True``. + internalvalue : float, optional + Value in millimeters to thicken the sheets internally (vgoing into the model). + The default is ``1``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ThickenSheet + """ + aedt_bounding_box = self.get_model_bounding_box() + directions = {} + inputlist = self.convert_to_selections(inputlist, True) + for el in inputlist: + objID = self.oeditor.GetFaceIDs(el) + faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) + directionfound = False + l = 10 + while not directionfound: + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", str(l) + "mm", "BothSides:=", False], + ) + aedt_bounding_box2 = self.get_model_bounding_box() + self._odesign.Undo() + if aedt_bounding_box != aedt_bounding_box2: + directions[el] = "External" + directionfound = True + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(l) + "mm", "BothSides:=", False], + ) + aedt_bounding_box2 = self.get_model_bounding_box() + + self._odesign.Undo() + + if aedt_bounding_box != aedt_bounding_box2: + directions[el] = "Internal" + directionfound = True + else: + l = l + 10 + for el in inputlist: + objID = self.oeditor.GetFaceIDs(el) + faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) + if directions[el] == "Internal": + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(value) + "mm", "BothSides:=", False], + ) + else: + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", str(value) + "mm", "BothSides:=", False], + ) + if internalExtr: + objID2 = self.oeditor.GetFaceIDs(el) + for fid in objID2: + try: + faceCenter2 = self.oeditor.GetFaceCenter(int(fid)) + if faceCenter2 == faceCenter: + self.oeditor.MoveFaces( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + [ + "NAME:Parameters", + [ + "NAME:MoveFacesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(internalvalue) + "mm", + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "FacesToMove:=", + [int(fid)], + ], + ], + ) + except: + self.logger.info("done") + # self.modeler_oproject.ClearMessages() + return True + + @pyaedt_function_handler() + def move_face(self, faces, offset=1.0): + """Move an input face or a list of input faces of a specific object. + + This method moves a face or a list of faces which belong to the same solid. + + Parameters + ---------- + faces : list + List of Face ID or List of :class:`pyaedt.modeler.Object3d.FacePrimitive` object or mixed. + offset : float, optional + Offset to apply in model units. The default is ``1.0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.MoveFaces + + """ + face_selection = self.convert_to_selections(faces, True) + selection = {} + for f in face_selection: + if self.oeditor.GetObjectNameByFaceID(f) in selection: + selection[self.oeditor.GetObjectNameByFaceID(f)].append(f) + else: + selection[self.oeditor.GetObjectNameByFaceID(f)] = [f] + + arg1 = [ + "NAME:Selections", + "Selections:=", + self.convert_to_selections(list(selection.keys()), False), + "NewPartsModelFlag:=", + "Model", + ] + arg2 = ["NAME:Parameters"] + for el in list(selection.keys()): + arg2.append( + [ + "NAME:MoveFacesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(offset) + self.model_units, + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "FacesToMove:=", + selection[el], + ] + ) + self.oeditor.MoveFaces(arg1, arg2) + return True + + @pyaedt_function_handler() + def move_edge(self, edges, offset=1.0): + """Move an input edge or a list of input edges of a specific object. + + This method moves an edge or a list of edges which belong to the same solid. + + Parameters + ---------- + edges : list + List of Edge ID or List of :class:`pyaedt.modeler.Object3d.EdgePrimitive` object or mixed. + offset : float, optional + Offset to apply in model units. The default is ``1.0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.MoveEdges + + """ + edge_selection = self.convert_to_selections(edges, True) + selection = {} + for f in edge_selection: + if self.oeditor.GetObjectNameByEdgeID(f) in selection: + selection[self.oeditor.GetObjectNameByEdgeID(f)].append(f) + else: + selection[self.oeditor.GetObjectNameByEdgeID(f)] = [f] + + arg1 = [ + "NAME:Selections", + "Selections:=", + self.convert_to_selections(list(selection.keys()), False), + "NewPartsModelFlag:=", + "Model", + ] + arg2 = ["NAME:Parameters"] + for el in list(selection.keys()): + arg2.append( + [ + "NAME:MoveEdgesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(offset) + self.model_units, + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "EdgesToMove:=", + selection[el], + ] + ) + self.oeditor.MoveEdges(arg1, arg2) + return True + + @pyaedt_function_handler() + def create_group(self, objects=None, components=None, groups=None, group_name=None): + """Group objects or groups into one group. + + At least one between ``objects``, ``components``, ``groups`` has to be defined. + + Parameters + ---------- + objects : list, optional + List of objects. The default is ``None``, in which case a group + with all objects is created. + components : list, optional + List of 3d components to group. The default is ``None``. + groups : list, optional + List of groups. The default is ``None``. + group_name : str, optional + Name of the new group. The default is ``None``. + It is not possible to choose the name but a name is + assigned automatically. + + Returns + ------- + str + Name assigned to the new group. + + References + ---------- + + >>> oEditor.CreateGroup + """ + if components is None and groups is None and objects is None: + raise AttributeError("At least one between ``objects``, ``components``, ``groups`` has to be defined.") + + all_objects = self.object_names + if objects: + object_selection = self.convert_to_selections(objects, return_list=False) + else: + object_selection = "" + if groups: + group_selection = self.convert_to_selections(groups, return_list=False) + else: + group_selection = "" + if components: + component_selection = self.convert_to_selections(components, return_list=False) + else: + component_selection = "" + + arg = [ + "NAME:GroupParameter", + "ParentGroupID:=", + "Model", + "Parts:=", + object_selection, + "SubmodelInstances:=", + component_selection, + "Groups:=", + group_selection, + ] + assigned_name = self.oeditor.CreateGroup(arg) + if group_name and group_name not in all_objects: + self.oeditor.ChangeProperty( + [ + "NAME:AllTabs", + [ + "NAME:Attributes", + ["NAME:PropServers", assigned_name], + ["NAME:ChangedProps", ["NAME:Name", "Value:=", group_name]], + ], + ] + ) + return group_name + else: + return assigned_name + + @pyaedt_function_handler() + def ungroup(self, groups): + """Ungroup one or more groups. + + Parameters + ---------- + groups : list + List of group names. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Ungroup + """ + group_list = self.convert_to_selections(groups, return_list=True) + arg = ["Groups:=", group_list] + self.oeditor.Ungroup(arg) + return True + + @pyaedt_function_handler() + def flatten_assembly(self): + """Flatten the assembly, removing all group trees. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.FlattenGroup + """ + self.oeditor.FlattenGroup(["Groups:=", ["Model"]]) + return True + + @pyaedt_function_handler() + def wrap_sheet(self, sheet_name, object_name, imprinted=False): + """Execute the sheet wrapping around an object. + If wrapping produces an unclassified operation it will be reverted. + + Parameters + ---------- + sheet_name : str, :class:`pyaedt.modeler.Object3d.Object3d` + Sheet name or sheet object. + object_name : str, :class:`pyaedt.modeler.Object3d.Object3d` + Object name or solid object. + imprinted : bool, optional + Either if imprint or not over the sheet. Default is ``False``. + + Returns + ------- + bool + Command execution status. + """ + sheet_name = self.convert_to_selections(sheet_name, False) + object_name = self.convert_to_selections(object_name, False) + + if sheet_name not in self.sheet_names: + self.logger.error("{} is not a valid sheet.".format(sheet_name)) + return False + if object_name not in self.solid_names: + self.logger.error("{} is not a valid solid body.".format(object_name)) + return False + unclassified = [i for i in self.unclassified_objects] + self.oeditor.WrapSheet( + ["NAME:Selections", "Selections:=", "{},{}".format(sheet_name, object_name)], + ["NAME:WrapSheetParameters", "Imprinted:=", imprinted], + ) + is_unclassified = [i for i in self.unclassified_objects if i not in unclassified] + if is_unclassified: + self.logger.error("Failed to Wrap sheet. Reverting to original objects.") + self._odesign.Undo() + return False + if imprinted: + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def heal_objects( + self, + input_objects_list, + auto_heal=True, + tolerant_stitch=True, + simplify_geometry=True, + tighten_gaps=True, + heal_to_solid=False, + stop_after_first_stitch_error=False, + max_stitch_tolerance=0.001, + explode_and_stitch=True, + geometry_simplification_tolerance=1, + maximum_generated_radius=1, + simplify_type=0, + tighten_gaps_width=0.00001, + remove_silver_faces=True, + remove_small_edges=True, + remove_small_faces=True, + silver_face_tolerance=1, + small_edge_tolerance=1, + small_face_area_tolerance=1, + bounding_box_scale_factor=0, + remove_holes=True, + remove_chamfers=True, + remove_blends=True, + hole_radius_tolerance=1, + chamfer_width_tolerance=1, + blend_radius_tolerance=1, + allowable_surface_area_change=5, + allowable_volume_change=5, + ): + """Repair invalid geometry entities for the selected objects within the specified tolerance settings. + + Parameters + ---------- + input_objects_list : str + List of object names to analyze. + auto_heal : bool, optional + Auto heal option. Default value is ``True``. + tolerant_stitch : bool, optional + Tolerant stitch for manual healing. The default is ``True``. + simplify_geometry : bool, optional + Simplify geometry for manual healing. The default is ``True``. + tighten_gaps : bool, optional + Tighten gaps for manual healing. The default is ``True``. + heal_to_solid : bool, optional + Heal to solid for manual healing. The default is ``False``. + stop_after_first_stitch_error : bool, optional + Stop after first stitch error for manual healing. The default is ``False``. + max_stitch_tolerance : float, str, optional + Max stitch tolerance for manual healing. The default is ``0.001``. + explode_and_stitch : bool, optional + Explode and stitch for manual healing. The default is ``True``. + geometry_simplification_tolerance : float, str, optional + Geometry simplification tolerance for manual healing in mm. The default is ``1``. + maximum_generated_radius : float, str, optional + Maximum generated radius for manual healing in mm. The default is ``1``. + simplify_type : int, optional + Simplify type for manual healing. The default is ``0`` which refers to ``Curves``. + Other available values are ``1`` for ``Surfaces`` and ``2`` for ``Both``. + tighten_gaps_width : float, str, optional + Tighten gaps width for manual healing in mm. The default is ``0.00001``. + remove_silver_faces : bool, optional + Remove silver faces for manual healing. The default is ``True``. + remove_small_edges : bool, optional + Remove small edges faces for manual healing. The default is ``True``. + remove_small_faces : bool, optional + Remove small faces for manual healing. The default is ``True``. + silver_face_tolerance : float, str, optional + Silver face tolerance for manual healing in mm. The default is ``1``. + small_edge_tolerance : float, str, optional + Silver face tolerance for manual healing in mm. The default is ``1``. + small_face_area_tolerance : float, str, optional + Silver face tolerance for manual healing in mm^2. The default is ``1``. + bounding_box_scale_factor : int, optional + Bounding box scaling factor for manual healing. The default is ``0``. + remove_holes : bool, optional + Remove holes for manual healing. The default is ``True``. + remove_chamfers : bool, optional + Remove chamfers for manual healing. The default is``True``. + remove_blends : bool, optional + Remove blends for manual healing. The default is ``True``. + hole_radius_tolerance : float, str, optional + Hole radius tolerance for manual healing in mm. The default is ``1``. + chamfer_width_tolerance : float, str, optional + Chamfer width tolerance for manual healing in mm. The default is ``1``. + blend_radius_tolerance : float, str, optional + Blend radius tolerance for manual healing in mm. The default is ``1``. + allowable_surface_area_change : float, str, optional + Allowable surface area for manual healing in mm. The default is ``1``. + allowable_volume_change : float, str, optional + Allowable volume change for manual healing in mm. The default is ``1``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if not input_objects_list: + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif not isinstance(input_objects_list, str): + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif "," in input_objects_list: + input_objects_list = input_objects_list.strip() + if ", " in input_objects_list: + input_objects_list_split = input_objects_list.split(", ") + else: + input_objects_list_split = input_objects_list.split(",") + for obj in input_objects_list_split: + if obj not in self.object_names: + self.logger.error("Provide an object name or a list of object names that exists in current design.") + return False + objects_selection = ",".join(input_objects_list_split) + else: + objects_selection = input_objects_list + + if simplify_type not in [0, 1, 2]: + self.logger.error("Invalid simplify type.") + return False + + selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] + healing_parameters = [ + "NAME:ObjectHealingParameters", + "Version:=", + 1, + "AutoHeal:=", + auto_heal, + "TolerantStitch:=", + tolerant_stitch, + "SimplifyGeom:=", + simplify_geometry, + "TightenGaps:=", + tighten_gaps, + "HealToSolid:=", + heal_to_solid, + "StopAfterFirstStitchError:=", + stop_after_first_stitch_error, + "MaxStitchTol:=", + max_stitch_tolerance, + "ExplodeAndStitch:=", + explode_and_stitch, + "GeomSimplificationTol:=", + geometry_simplification_tolerance, + "MaximumGeneratedRadiusForSimplification:=", + maximum_generated_radius, + "SimplifyType:=", + simplify_type, + "TightenGapsWidth:=", + tighten_gaps_width, + "RemoveSliverFaces:=", + remove_silver_faces, + "RemoveSmallEdges:=", + remove_small_edges, + "RemoveSmallFaces:=", + remove_small_faces, + "SliverFaceTol:=", + silver_face_tolerance, + "SmallEdgeTol:=", + small_edge_tolerance, + "SmallFaceAreaTol:=", + small_face_area_tolerance, + "SpikeTol:=", + -1, + "GashWidthBound:=", + -1, + "GashAspectBound:=", + -1, + "BoundingBoxScaleFactor:=", + bounding_box_scale_factor, + "RemoveHoles:=", + remove_holes, + "RemoveChamfers:=", + remove_chamfers, + "RemoveBlends:=", + remove_blends, + "HoleRadiusTol:=", + hole_radius_tolerance, + "ChamferWidthTol:=", + chamfer_width_tolerance, + "BlendRadiusTol:=", + blend_radius_tolerance, + "AllowableSurfaceAreaChange:=", + allowable_surface_area_change, + "AllowableVolumeChange:=", + allowable_volume_change, + ] + self.oeditor.HealObject(selections_args, healing_parameters) + return True + + @pyaedt_function_handler() + def simplify_objects( + self, + input_objects_list, + simplify_type="Polygon Fit", + extrusion_axis="Auto", + clean_up=True, + allow_splitting=True, + separate_bodies=True, + clone_body=True, + generate_primitive_history=False, + interior_points_on_arc=5, + length_threshold_percentage=25, + create_group_for_new_objects=False, + ): + """Simplify command to converts complex objects into simpler primitives which are easy to mesh and solve. + + Parameters + ---------- + input_objects_list : str + List of object names to simplify. + simplify_type : str, optional + Simplify type. The default is ``"Polygon Fit"``. Options are + ``"Bounding Box"``, ``"Polygon Fit"``, and ``"Primitive Fit"`. + extrusion_axis : str, optional + Extrusion axis. The default is ``"Auto"``. + Options are ``"Auto"``, ``"X"``, ``"Y"``, and ``"Z"``. + clean_up : bool, optional + Whether to clean up. The default is ``True``. + allow_splitting : bool, optional + Whether to allow splitting. The default is ``True``. + separate_bodies : bool, optional + Whether to separate bodies. The default is ``True``. + clone_body : bool, optional + Whether to clone the body. The default is ``True``. + generate_primitive_history : bool, optional + Whether to generate primitive history. The default is ``False``. + If ``True``, the history for the selected objects is purged. + ``` + interior_points_on_arc : float, optional + Number points on curve. The default is ``5``. + length_threshold_percentage : float, optional + Length threshold percentage. The default is ``25``. + create_group_for_new_objects : bool, optional + Create group for new objects. The default is ``False``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if not input_objects_list: + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif not isinstance(input_objects_list, str): + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif "," in input_objects_list: + input_objects_list = input_objects_list.strip() + if ", " in input_objects_list: + input_objects_list_split = input_objects_list.split(", ") + else: + input_objects_list_split = input_objects_list.split(",") + for obj in input_objects_list_split: + if obj not in self.object_names: + self.logger.error("Provide an object name or a list of object names that exists in current design.") + return False + objects_selection = ",".join(input_objects_list_split) + else: + objects_selection = input_objects_list + + if simplify_type not in ["Polygon Fit", "Primitive Fit", "Bounding Box"]: + self.logger.error("Invalid simplify type.") + return False - @property - def modeler(self): - """Modeler.""" - return self._modeler + if extrusion_axis not in ["Auto", "X", "Y", "Z"]: + self.logger.error("Invalid extrusion axis.") + return False - @property - def model_units(self): - """Model units.""" - return self.modeler.model_units + selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] + simplify_parameters = [ + "NAME:SimplifyParameters", + "Type:=", + simplify_type, + "ExtrusionAxis:=", + extrusion_axis, + "Cleanup:=", + clean_up, + "Splitting:=", + allow_splitting, + "SeparateBodies:=", + separate_bodies, + "CloneBody:=", + clone_body, + "Generate Primitive History:=", + generate_primitive_history, + "NumberPointsCurve:=", + interior_points_on_arc, + "LengthThresholdCurve:=", + length_threshold_percentage, + ] + groups_for_new_object = ["CreateGroupsForNewObjects:=", create_group_for_new_objects] - @property - def model_objects(self): - """List of the names of all model objects.""" - return self._get_model_objects(model=True) + try: + self.oeditor.Simplify(selections_args, simplify_parameters, groups_for_new_object) + return True + except: + self.logger.error("Simplify objects failed.") + return False - @property - def non_model_objects(self): - """List of objects of all non-model objects.""" - return list(self.oeditor.GetObjectsInGroup("Non Model")) + @pyaedt_function_handler + def get_face_by_id(self, id): + """Get the face object given its ID. - @property - def model_consistency_report(self): - """Summary of detected inconsistencies between the AEDT modeler and PyAEDT structures. + Parameters + ---------- + id : int + ID of the face to retrieve. Returns ------- - dict + modeler.cad.elements3d.FacePrimitive + Face object. """ - obj_names = self.object_names - missing = [] - for name in obj_names: - if name not in self._object_names_to_ids: - missing.append(name) - non_existent = [] - for name in self._object_names_to_ids: - if name not in obj_names and name not in self.unclassified_names: - non_existent.append(name) - report = {"Missing Objects": missing, "Non-Existent Objects": non_existent} - return report + obj = [o for o in self.object_list for face in o.faces if face.id == id] + if obj: + face_obj = [face for face in obj[0].faces if face.id == id][0] + return face_obj + else: + return False @pyaedt_function_handler() def create_point(self, position, name=None, color="(143 175 143)"): @@ -446,7 +5644,7 @@ def create_plane( @pyaedt_function_handler() def _change_component_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -458,7 +5656,7 @@ def _change_component_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_geometry_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -472,7 +5670,7 @@ def _change_geometry_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_point_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -486,7 +5684,7 @@ def _change_point_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_plane_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -608,6 +5806,30 @@ def create_region(self, pad_percent=300, is_percentage=True): References ---------- + >>> oEditor.CreateRegion + """ + return self._create_region(pad_percent=pad_percent, is_percentage=is_percentage) + + @pyaedt_function_handler() + def _create_region(self, pad_percent=300, is_percentage=True): + """Create an air region. + + Parameters + ---------- + pad_percent : float, str, list of floats or list of str, optional + Same padding is applied if not a list. The default is ``300``. + If a list of floats or str, interpret as adding for ``["+X", "+Y", "+Z", "-X", "-Y", "-Z"]``. + is_percentage : bool, optional + Region definition in percentage or absolute value. The default is `True``. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + Region object. + + References + ---------- + >>> oEditor.CreateRegion """ if "Region" in self.object_names: @@ -633,13 +5855,13 @@ def create_region(self, pad_percent=300, is_percentage=True): units = decompose_variable_value(pad_percent[i])[1] if not units and pad_percent[i].isnumeric(): if not is_percentage: - units = self.modeler.model_units + units = self.model_units pad_percent[i] += units elif is_percentage: self.logger.error("Percentage input must not have units") return False elif not is_percentage: - units = self.modeler.model_units + units = self.model_units pad_percent[i] = str(pad_percent[i]) pad_percent[i] += units arg.append(str(pad_percent[i])) @@ -1248,298 +6470,93 @@ def delete_objects_containing(self, contained_string, case_sensitive=True): Returns ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Delete - - """ - objnames = self._object_names_to_ids - num_del = 0 - for el in objnames: - if case_sensitive: - if contained_string in el: - self.delete(el) - num_del += 1 - else: - if contained_string.lower() in el.lower(): - self.delete(el) - num_del += 1 - self.logger.info("Deleted %s objects", num_del) - return True - - @pyaedt_function_handler() - def get_model_bounding_box(self): - """Retrieve the model's bounding box. - - Returns - ------- - list - List of 6 float values ``[min_x, min_y, min_z, max_x, max_y, max_z]`` - for the bounding box. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - return self._app.modeler.get_model_bounding_box() - - @pyaedt_function_handler() - def get_obj_id(self, objname): - """Return the object ID from an object name. - - Parameters - ---------- - objname : str - Name of the object. - - Returns - ------- - int - Object ID. - - """ - if objname in self._object_names_to_ids: - return self._object_names_to_ids[objname] - return None - - @pyaedt_function_handler() - def get_object_from_name(self, objname): - """Return the object from an object name. - - Parameters - ---------- - objname : str - Name of the object. - - Returns - ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - 3D object returned. - - """ - if objname in self._object_names_to_ids: - object_id = self.get_obj_id(objname) - return self.objects[object_id] - - @pyaedt_function_handler() - def get_objects_w_string(self, stringname, case_sensitive=True): - """Retrieve all objects with a given string in their names. - - Parameters - ---------- - stringname : str - String to search object names for. - case_sensitive : bool, optional - Whether the string is case-sensitive. The default is ``True``. - - Returns - ------- - list - List of object names with the given string. - - """ - list_objs = [] - for name in list(self.objects_by_name.keys()): - if case_sensitive: - if stringname in name: - list_objs.append(name) - else: - if stringname.lower() in name.lower(): - list_objs.append(name) - return list_objs - - @pyaedt_function_handler() - def refresh(self): - """Refresh this object.""" - self._solids = [] - self._sheets = [] - self._lines = [] - self._points = [] - self._unclassified = [] - self._all_object_names = [] - self.objects = {} - self.user_defined_components = {} - self._object_names_to_ids = {} - self._currentId = 0 - self._refresh_object_types() - self._refresh_all_ids_from_aedt_file() - self.refresh_all_ids() - - @property - def objects_by_name(self): - """Object dictionary organized by name. - - Returns - ------- - dict - """ - obj_dict = {} - for _, v in self.objects.items(): - obj_dict[v._m_name] = v - return obj_dict - - @pyaedt_function_handler() - def cleanup_objects(self): - """Clean up objects that no longer exist in the modeler because - they were removed by previous operations. - - This method also updates object IDs that may have changed via - a modeler operation such as :func:`pyaedt.modeler.Model3D.Modeler3D.unite` - or :func:`pyaedt.modeler.Model2D.Modeler2D.unite`. - - Returns - ------- - dict - Dictionary of updated object IDs. - - """ - new_object_dict = {} - new_object_id_dict = {} - new_points_dict = {} - - all_objects = self.object_names - all_unclassified = self.unclassified_names - all_objs = all_objects + all_unclassified - for old_id, obj in self.objects.items(): - if obj.name in all_objs: - # Check if ID can change in boolean operations - # updated_id = obj.id # By calling the object property we get the new id - new_object_id_dict[obj.name] = old_id - new_object_dict[old_id] = obj - for old_id, obj in self.points.items(): - if obj.name in self._points: - new_points_dict[obj.name] = obj - self.objects = new_object_dict - self._object_names_to_ids = new_object_id_dict - self.points = new_points_dict - - @pyaedt_function_handler() - def find_new_objects(self): - """Find any new objects in the modeler that were created - by previous operations. - - Returns - ------- - dict - Dictionary of new objects. - - """ - new_objects = [] - for obj_name in self.object_names: - if obj_name not in self._object_names_to_ids: - new_objects.append(obj_name) - return new_objects - - @pyaedt_function_handler() - def add_new_objects(self): - """Add objects that have been created in the modeler by - previous operations. - - Returns - ------- - list - List of added objects. + bool + ``True`` when successful, ``False`` when failed. - """ - # TODO: Need to improve documentation for this method. - added_objects = [] + References + ---------- - for obj_name in self.object_names: - if obj_name not in self._object_names_to_ids: - self._create_object(obj_name) - added_objects.append(obj_name) - for obj_name in self.unclassified_names: - if obj_name not in self._object_names_to_ids: - self._create_object(obj_name) - added_objects.append(obj_name) - for obj_name in self.point_names: - if obj_name not in self.points.keys(): - self._create_object(obj_name) - added_objects.append(obj_name) - return added_objects + >>> oEditor.Delete + + """ + objnames = self._object_names_to_ids + num_del = 0 + for el in objnames: + if case_sensitive: + if contained_string in el: + self.delete(el) + num_del += 1 + else: + if contained_string.lower() in el.lower(): + self.delete(el) + num_del += 1 + self.logger.info("Deleted %s objects", num_del) + return True @pyaedt_function_handler() - def add_new_user_defined_component(self): - """Add 3D components and user-defined models that have been created in the modeler by - previous operations. + def get_obj_id(self, objname): + """Return the object ID from an object name. + + Parameters + ---------- + objname : str + Name of the object. Returns ------- - list - List of added components. + int + Object ID. """ - added_component = [] - for comp_name in self.user_defined_component_names: - if comp_name not in self.user_defined_components: - self._create_user_defined_component(comp_name) - added_component.append(comp_name) - return added_component + if objname in self._object_names_to_ids: + return self._object_names_to_ids[objname] + return None - # TODO Eliminate this - check about import_3d_cad - # Should no longer be a problem @pyaedt_function_handler() - def refresh_all_ids(self): - """Refresh all IDs.""" + def get_object_from_name(self, objname): + """Return the object from an object name. - self.add_new_objects() - self.add_new_user_defined_component() - self.cleanup_objects() + Parameters + ---------- + objname : str + Name of the object. - return len(self.objects) + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + 3D object returned. + + """ + if objname in self._object_names_to_ids: + object_id = self.get_obj_id(objname) + return self.objects[object_id] @pyaedt_function_handler() - def get_objects_by_material(self, materialname=None): - """Retrieve a list of objects either of a specified material or classified by material. + def get_objects_w_string(self, stringname, case_sensitive=True): + """Retrieve all objects with a given string in their names. Parameters ---------- - materialname : str - Name of the material. The default is ``None``. + stringname : str + String to search object names for. + case_sensitive : bool, optional + Whether the string is case-sensitive. The default is ``True``. Returns ------- - list of class:`pyaedt.modeler.cad.object3d.Object3d` - If a material name is not provided, the method returns - a list of dictionaries where keys are material names - of conductors, dielectrics, gases and liquids respectively - in the design and values are objects assigned to these materials. - If a material name is provided, the method returns a list - of objects assigned to the material. - - References - ---------- - - >>> oEditor.GetObjectsByMaterial + list + List of object names with the given string. """ - obj_lst = [] - if materialname is not None: - for obj in self.object_list: - if obj and ("[" in obj.material_name or "(" in obj.material_name) and obj.object_type == "Solid": - material = ( - self._app.odesign.GetChildObject("3D Modeler") - .GetChildObject(obj.name) - .GetPropEvaluatedValue("Material") - .lower() - ) - if materialname.lower() == material: - obj_lst.append(obj) - elif obj and (obj.material_name == materialname or obj.material_name == materialname.lower()): - obj_lst.append(obj) - else: - obj_lst = [ - self._get_object_dict_by_material(self.materials.conductors), - self._get_object_dict_by_material(self.materials.dielectrics), - self._get_object_dict_by_material(self.materials.gases), - self._get_object_dict_by_material(self.materials.liquids), - ] - return obj_lst + list_objs = [] + for name in list(self.objects_by_name.keys()): + if case_sensitive: + if stringname in name: + list_objs.append(name) + else: + if stringname.lower() in name.lower(): + list_objs.append(name) + return list_objs @pyaedt_function_handler() def find_closest_edges(self, start_obj, end_obj, port_direction=0): @@ -1766,7 +6783,7 @@ def get_equivalent_parallel_edges(self, edgelist, portonplane=True, axisdir=0, s if portonplane: vect[divmod(axisdir, 3)[1]] = 0 # TODO: can we avoid this translate operation - is there another way to check ? - self.modeler.move(second_edge, vect) + self.move(second_edge, vect) p_check = second_edge.vertices[0].position p_check2 = second_edge.vertices[1].position # elif len(ver2) == 1: # for circular edges with one vertex @@ -2164,6 +7181,9 @@ def get_bodynames_from_position(self, position, units=None, include_non_model=Tr >>> oEditor.GetBodyNamesByPosition """ + if not isinstance(position, (self.Position, list)): + # self.logger.error("A list of point has to be provided") + return [] XCenter, YCenter, ZCenter = self._pos_with_arg(position, units) vArg1 = ["NAME:Parameters"] vArg1.append("XPosition:="), vArg1.append(XCenter) @@ -2673,7 +7693,7 @@ def get_closest_edgeid_to_position(self, position, units=None): """ if isinstance(position, list): - position = self.modeler.Position(position) + position = self.Position(position) bodies = self.get_bodynames_from_position(position, units) # the function searches in all bodies, not efficient @@ -2892,106 +7912,6 @@ def _create_object(self, name, pid=0, use_cached=False): self._object_names_to_ids[o.name] = new_id return o - @pyaedt_function_handler() - def _get_commands(self, name): - try: - return self.oeditor.GetChildObject(name).GetChildNames() - except: - return [] - - @pyaedt_function_handler() - def _create_user_defined_component(self, name): - if name not in list(self.user_defined_components.keys()): - native_component_properties = self._get_native_component_properties(name) - if native_component_properties: - component_type = native_component_properties["NativeComponentDefinitionProvider"]["Type"] - o = UserDefinedComponent(self, name, native_component_properties, component_type) - else: - o = UserDefinedComponent(self, name) - self.user_defined_components[name] = o - else: - o = self.user_defined_components[name] - return o - - @pyaedt_function_handler() - def _create_point(self, name): - point = Point(self, name) - self.refresh_all_ids() - - return point - - @pyaedt_function_handler() - def _refresh_all_ids_from_aedt_file(self): - if not self._app.design_properties or "ModelSetup" not in self._app.design_properties: - return False - - try: - groups = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["Groups"]["Group"] - except KeyError: - groups = [] - if not isinstance(groups, list): - groups = [groups] - try: - self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ - "GeometryPart" - ] - except KeyError: - return 0 - for el in self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ - "GeometryPart" - ]: - if isinstance(el, (OrderedDict, dict)): - attribs = el["Attributes"] - operations = el.get("Operations", None) - else: - attribs = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ - "ToplevelParts" - ]["GeometryPart"]["Attributes"] - operations = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ - "ToplevelParts" - ]["GeometryPart"]["Operations"] - if attribs["Name"] in self._all_object_names: - pid = 0 - - if operations and isinstance(operations.get("Operation", None), (OrderedDict, dict)): - try: - pid = operations["Operation"]["ParentPartID"] - except: # pragma: no cover - pass - elif operations and isinstance(operations.get("Operation", None), list): - try: - pid = operations["Operation"][0]["ParentPartID"] - except: - pass - o = self._create_object(name=attribs["Name"], pid=pid, use_cached=True) - o._part_coordinate_system = attribs["PartCoordinateSystem"] - if "NonModel" in attribs["Flags"]: - o._model = False - else: - o._model = True - if "Wireframe" in attribs["Flags"]: - o._wireframe = True - else: - o._wireframe = False - groupname = "" - for group in groups: - if attribs["GroupId"] == group["GroupID"]: - groupname = group["Attributes"]["Name"] - - o._m_groupName = groupname - try: - o._color = tuple(int(x) for x in attribs["Color"][1:-1].split(" ")) - except: - o._color = None - o._surface_material = attribs.get("SurfaceMaterialValue", None) - if o._surface_material: - o._surface_material = o._surface_material[1:-1].lower() - if "MaterialValue" in attribs: - o._material_name = attribs["MaterialValue"][1:-1].lower() - - o._is_updated = True - return len(self.objects) - @pyaedt_function_handler() def _default_object_attributes(self, name=None, matname=None, flags=""): if not matname: @@ -3177,9 +8097,9 @@ def _get_native_component_properties(self, name): if name in self.oeditor.Get3DComponentInstanceNames(comp3d): component_name = comp3d break - if self._app.design_properties and self._app.design_properties.get("ModelSetup", None) and component_name: + if self._design_properties and self._design_properties.get("ModelSetup", None) and component_name: try: - native_comp_entry = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + native_comp_entry = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ "SubModelDefinitions" ]["NativeComponentDefinition"] if native_comp_entry: @@ -3216,27 +8136,47 @@ def _get_object_dict_by_material(self, material): return obj_dict @pyaedt_function_handler() - def __getitem__(self, partId): - """Get the object ``Object3D`` for a given object ID or object name. + def convert_segments_to_line(self, object_name): + """Convert a CreatePolyline list of segments to lines. + + This method applies to splines and 3-point arguments. Parameters ---------- - partId : int or str - Object ID or object name from the 3D modeler. + object_name : int, str, or :class:`pyaedt.modeler.cad.object3d.Object3d` + Specified for the object. Returns ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - Returns None if the part ID or the object name is not found. + bool + ``True`` if successful, ``False`` if it fails. + + References + ---------- + + >>> oEditor.ChangeProperty + + Examples + -------- + + >>> from pyaedt import Hfss + >>> aedtapp = Hfss() + >>> edge_object = aedtapp.modeler.create_object_from_edge("my_edge") + >>> aedtapp.modeler.generate_object_history(edge_object) + >>> aedtapp.modeler.convert_segments_to_line(edge_object.name) """ - if isinstance(partId, int): - if partId in self.objects: - return self.objects[partId] - elif partId in self._object_names_to_ids: - return self.objects[self._object_names_to_ids[partId]] - elif partId in self.user_defined_components: - return self.user_defined_components[partId] - elif isinstance(partId, Object3d) or isinstance(partId, UserDefinedComponent): - return partId - return None + this_object = self._resolve_object(object_name) + edges = this_object.edges + for i in reversed(range(len(edges))): + self.oeditor.ChangeProperty( + [ + "NAME:AllTabs", + [ + "NAME:Geometry3DPolylineTab", + ["NAME:PropServers", this_object.name + ":CreatePolyline:1:Segment" + str(i)], + ["NAME:ChangedProps", ["NAME:Segment Type", "Value:=", "Line"]], + ], + ] + ) + return True diff --git a/pyaedt/modeler/cad/Primitives2D.py b/pyaedt/modeler/cad/Primitives2D.py index a3c39c618af..5ed587365b4 100644 --- a/pyaedt/modeler/cad/Primitives2D.py +++ b/pyaedt/modeler/cad/Primitives2D.py @@ -1,8 +1,8 @@ from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Primitives import Primitives +from pyaedt.modeler.cad.Primitives import GeometryModeler -class Primitives2D(Primitives, object): +class Primitives2D(GeometryModeler, object): """Manages primitives in 2D tools. This class is inherited in the caller application and is accessible through the primitives variable part @@ -27,8 +27,8 @@ def plane2d(self): plane = "Y" return plane - def __init__(self): - Primitives.__init__(self) + def __init__(self, application): + GeometryModeler.__init__(self, application, is3d=False) @pyaedt_function_handler() def create_circle(self, position, radius, num_sides=0, is_covered=True, name=None, matname=None, non_model=False): @@ -289,4 +289,4 @@ def create_region(self, pad_percent=300, is_percentage=True): if self._app.design_type == "2D Extractor" or self._app.design_type == "Maxwell 2D": pad_percent = [pad_percent[0], pad_percent[1], 0, pad_percent[2], pad_percent[3], 0] - return Primitives.create_region(self, pad_percent, is_percentage) + return self._create_region(pad_percent, is_percentage) diff --git a/pyaedt/modeler/cad/Primitives3D.py b/pyaedt/modeler/cad/Primitives3D.py index 45c352abd12..29d29d9e97f 100644 --- a/pyaedt/modeler/cad/Primitives3D.py +++ b/pyaedt/modeler/cad/Primitives3D.py @@ -23,11 +23,11 @@ from pyaedt.modeler.advanced_cad.actors import Vehicle from pyaedt.modeler.advanced_cad.multiparts import Environment from pyaedt.modeler.advanced_cad.multiparts import MultiPartComponent -from pyaedt.modeler.cad.Primitives import Primitives +from pyaedt.modeler.cad.Primitives import GeometryModeler from pyaedt.modeler.geometry_operators import GeometryOperators -class Primitives3D(Primitives, object): +class Primitives3D(GeometryModeler): """Manages primitives in 3D tools. This class is inherited in the caller application and is @@ -36,7 +36,7 @@ class Primitives3D(Primitives, object): Parameters ---------- - application : str + application : object Name of the application. Examples @@ -48,8 +48,8 @@ class Primitives3D(Primitives, object): >>> prim = aedtapp.modeler """ - def __init__(self): - Primitives.__init__(self) + def __init__(self, application): + GeometryModeler.__init__(self, application, is3d=True) self.multiparts = [] @pyaedt_function_handler() @@ -1139,52 +1139,6 @@ def create_helix( del self.objects[self._object_names_to_ids[polyline_name]] return self._create_object(polyline_name) - @pyaedt_function_handler() - def convert_segments_to_line(self, object_name): - """Convert a CreatePolyline list of segments to lines. - - This method applies to splines and 3-point arguments. - - Parameters - ---------- - object_name : int, str, or :class:`pyaedt.modeler.cad.object3d.Object3d` - Specified for the object. - - Returns - ------- - bool - ``True`` if successful, ``False`` if it fails. - - References - ---------- - - >>> oEditor.ChangeProperty - - Examples - -------- - - >>> from pyaedt import Hfss - >>> aedtapp = Hfss() - >>> edge_object = aedtapp.modeler.create_object_from_edge("my_edge") - >>> aedtapp.modeler.generate_object_history(edge_object) - >>> aedtapp.modeler.convert_segments_to_line(edge_object.name) - - """ - this_object = self._resolve_object(object_name) - edges = this_object.edges - for i in reversed(range(len(edges))): - self.oeditor.ChangeProperty( - [ - "NAME:AllTabs", - [ - "NAME:Geometry3DPolylineTab", - ["NAME:PropServers", this_object.name + ":CreatePolyline:1:Segment" + str(i)], - ["NAME:ChangedProps", ["NAME:Segment Type", "Value:=", "Line"]], - ], - ] - ) - return True - @pyaedt_function_handler() def create_udm( self, @@ -1383,8 +1337,8 @@ def _create_reference_cs_from_3dcomp(self, udm_obj, password): os.rmdir(temp_folder) phi, theta, psi = GeometryOperators.quaternion_to_euler_zxz(q) cs_name = udm_obj.name + "_" + wcs + "_ref" - if cs_name not in [i.name for i in self.modeler.coordinate_systems]: - self.modeler.create_coordinate_system( + if cs_name not in [i.name for i in self.coordinate_systems]: + self.create_coordinate_system( mode="zxz", origin=o, name=cs_name, @@ -1745,7 +1699,7 @@ def insert_layout_component( aedt_component_name = self._app.o_component_manager.Add(compInfo) - if not name or name in self.modeler.user_defined_component_names: + if not name or name in self.user_defined_component_names: name = generate_unique_name("LC") # Open Layout component and get information diff --git a/pyaedt/modeler/cad/components_3d.py b/pyaedt/modeler/cad/components_3d.py index d418a7895a9..3d643cfebb1 100644 --- a/pyaedt/modeler/cad/components_3d.py +++ b/pyaedt/modeler/cad/components_3d.py @@ -478,7 +478,7 @@ def delete(self): """ arg = ["NAME:Selections", "Selections:=", self._m_name] self._m_Editor.Delete(arg) - del self._primitives.modeler.user_defined_components[self.name] + del self._primitives.user_defined_components[self.name] self._primitives.cleanup_objects() self.__dict__ = {} @@ -505,7 +505,7 @@ def duplicate_and_mirror(self, position, vector): >>> oEditor.DuplicateMirror """ - return self._primitives.modeler.duplicate_and_mirror( + return self._primitives.duplicate_and_mirror( self.name, position, vector, is_3d_comp=True, duplicate_assignment=True ) @@ -533,11 +533,11 @@ def mirror(self, position, vector): >>> oEditor.Mirror """ if self.is3dcomponent: - if self._primitives.modeler.mirror(self.name, position=position, vector=vector): + if self._primitives.mirror(self.name, position=position, vector=vector): return self else: for part in self.parts: - self._primitives.modeler.mirror(part, position=position, vector=vector) + self._primitives.mirror(part, position=position, vector=vector) return self return False @@ -567,11 +567,11 @@ def rotate(self, cs_axis, angle=90.0, unit="deg"): >>> oEditor.Rotate """ if self.is3dcomponent: - if self._primitives.modeler.rotate(self.name, cs_axis=cs_axis, angle=angle, unit=unit): + if self._primitives.rotate(self.name, cs_axis=cs_axis, angle=angle, unit=unit): return self else: for part in self.parts: - self._primitives.modeler.rotate(part, cs_axis=cs_axis, angle=angle, unit=unit) + self._primitives.rotate(part, cs_axis=cs_axis, angle=angle, unit=unit) return self return False @@ -595,11 +595,11 @@ def move(self, vector): >>> oEditor.Move """ if self.is3dcomponent: - if self._primitives.modeler.move(self.name, vector=vector): + if self._primitives.move(self.name, vector=vector): return self else: for part in self.parts: - self._primitives.modeler.move(part, vector=vector) + self._primitives.move(part, vector=vector) return self return False @@ -631,7 +631,7 @@ def duplicate_around_axis(self, cs_axis, angle=90, nclones=2, create_new_objects """ if self.is3dcomponent: - ret, added_objects = self._primitives.modeler.duplicate_around_axis( + ret, added_objects = self._primitives.duplicate_around_axis( self.name, cs_axis, angle, nclones, create_new_objects, True ) return added_objects @@ -670,10 +670,8 @@ def duplicate_along_line(self, vector, nclones=2, attach_object=False, **kwargs) attach_object = kwargs["attachObject"] if self.is3dcomponent: - old_component_list = self._primitives.modeler.user_defined_component_names - _, added_objects = self._primitives.modeler.duplicate_along_line( - self.name, vector, nclones, attach_object, True - ) + old_component_list = self._primitives.user_defined_component_names + _, added_objects = self._primitives.duplicate_along_line(self.name, vector, nclones, attach_object, True) return list(set(added_objects) - set(old_component_list)) self._logger.warning("User-defined models do not support this operation.") return False diff --git a/pyaedt/modeler/cad/elements3d.py b/pyaedt/modeler/cad/elements3d.py index 07beef5235a..854445d4cc8 100644 --- a/pyaedt/modeler/cad/elements3d.py +++ b/pyaedt/modeler/cad/elements3d.py @@ -267,10 +267,12 @@ def segment_info(self): ------- list Segment info if available.""" + autosave = self._object3d._primitives._app.odesktop.GetAutosaveEnabled() try: self.oeditor.GetChildNames() except: # pragma: no cover return {} + self._object3d._primitives._app.autosave_disable() ll = list(self.oeditor.GetObjectsInGroup("Lines")) self.oeditor.CreateObjectFromEdges( ["NAME:Selections", "Selections:=", self._object3d.name, "NewPartsModelFlag:=", "NonModel"], @@ -296,6 +298,7 @@ def segment_info(self): segment[prop] = val self._object3d._primitives._odesign.Undo() self._object3d._primitives._odesign.Undo() + self._object3d._primitives._app.odesktop.EnableAutoSave(True if autosave else False) return segment @property @@ -342,13 +345,6 @@ def midpoint(self): """ return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0.5)] - # if len(self.vertices) == 2: - # midpoint = GeometryOperators.get_mid_point(self.vertices[0].position, self.vertices[1].position) - # return list(midpoint) - # elif len(self.vertices) == 1: - # return self.vertices[0].position - # else: - # return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0)] @property def length(self): @@ -440,6 +436,7 @@ def __init__(self, object3d, obj_id): """ self._id = obj_id self._object3d = object3d + self._is_planar = None @property def oeditor(self): @@ -567,11 +564,15 @@ def is_planar(self): ------- bool """ - + if self._is_planar is not None: + return self._is_planar try: self.oeditor.GetFaceCenter(self.id) + self._is_planar = True return True except: + self.logger.clear_messages() + self._is_planar = False return False @property @@ -595,10 +596,10 @@ def center(self): >>> oEditor.GetFaceCenter """ - try: + if self.is_planar: return [float(i) for i in self.oeditor.GetFaceCenter(self.id)] - except: # pragma: no cover - self.logger.clear_messages() + else: # pragma: no cover + # self.logger.clear_messages() vtx = self.vertices[:] if len(vtx) > 1: return GeometryOperators.get_polygon_centroid([pos.position for pos in vtx]) @@ -607,7 +608,7 @@ def center(self): try: edge = self.edges[0] except IndexError: - self.logger.error("At least one edge is needed to compute face center.") + # self.logger.error("At least one edge is needed to compute face center.") return centroid = GeometryOperators.get_polygon_centroid( [ @@ -757,7 +758,7 @@ def is_on_bounding(self, tol=1e-9): """ b = [float(i) for i in list(self.oeditor.GetModelBoundingBox())] c = self.center - if ( + if c and ( abs(c[0] - b[0]) < tol or abs(c[1] - b[1]) < tol or abs(c[2] - b[2]) < tol diff --git a/pyaedt/modeler/cad/object3d.py b/pyaedt/modeler/cad/object3d.py index 599f29ed725..44d2f729df9 100644 --- a/pyaedt/modeler/cad/object3d.py +++ b/pyaedt/modeler/cad/object3d.py @@ -82,6 +82,8 @@ def __init__(self, primitives, name=None): self._object_type = None self._mass = 0.0 self._volume = 0.0 + self._faces = [] + self._face_ids = [] @pyaedt_function_handler() def _bounding_box_unmodel(self): @@ -363,11 +365,15 @@ def faces(self): """ if self.object_type == "Unclassified": return [] - faces = [] + face_ids = list(self._oeditor.GetFaceIDs(self.name)) + if set(face_ids) == set(self._face_ids): + return self._faces + self._face_ids = face_ids + self._faces = [] for face in list(self._oeditor.GetFaceIDs(self.name)): face = int(face) - faces.append(FacePrimitive(self, face)) - return faces + self._faces.append(FacePrimitive(self, face)) + return self._faces @property def faces_on_bounding_box(self): @@ -1389,8 +1395,8 @@ def unite(self, object_list): >>> oEditor.Unite """ - unite_list = [self.name] + self._primitives.modeler.convert_to_selections(object_list, return_list=True) - self._primitives.modeler.unite(unite_list) + unite_list = [self.name] + self._primitives.convert_to_selections(object_list, return_list=True) + self._primitives.unite(unite_list) return self @pyaedt_function_handler() @@ -1414,8 +1420,8 @@ def intersect(self, theList, keep_originals=False): >>> oEditor.Intersect """ - theList = [self.name] + self._primitives.modeler.convert_to_selections(theList, return_list=True) - self._primitives.modeler.intersect(theList, keep_originals) + theList = [self.name] + self._primitives.convert_to_selections(theList, return_list=True) + self._primitives.intersect(theList, keep_originals) return self @pyaedt_function_handler() @@ -1442,7 +1448,7 @@ def split(self, plane, sides="Both"): >>> oEditor.Split """ - return self._primitives.modeler.split(self.name, plane, sides) + return self._primitives.split(self.name, plane, sides) @pyaedt_function_handler() def mirror(self, position, vector, duplicate=False): @@ -1468,7 +1474,7 @@ def mirror(self, position, vector, duplicate=False): >>> oEditor.Mirror """ - if self._primitives.modeler.mirror(self.id, position=position, vector=vector, duplicate=duplicate): + if self._primitives.mirror(self.id, position=position, vector=vector, duplicate=duplicate): return self return False @@ -1497,7 +1503,7 @@ def rotate(self, cs_axis, angle=90.0, unit="deg"): >>> oEditor.Rotate """ - if self._primitives.modeler.rotate(self.id, cs_axis=cs_axis, angle=angle, unit=unit): + if self._primitives.rotate(self.id, cs_axis=cs_axis, angle=angle, unit=unit): return self return False @@ -1523,7 +1529,7 @@ def move(self, vector): ---------- >>> oEditor.Move """ - if self._primitives.modeler.move(self.id, vector=vector): + if self._primitives.move(self.id, vector=vector): return self return False @@ -1552,9 +1558,7 @@ def duplicate_around_axis(self, cs_axis, angle=90, nclones=2, create_new_objects >>> oEditor.DuplicateAroundAxis """ - ret, added_objects = self._primitives.modeler.duplicate_around_axis( - self, cs_axis, angle, nclones, create_new_objects - ) + _, added_objects = self._primitives.duplicate_around_axis(self, cs_axis, angle, nclones, create_new_objects) return added_objects @pyaedt_function_handler() @@ -1581,7 +1585,7 @@ def duplicate_along_line(self, vector, nclones=2, attachObject=False): >>> oEditor.DuplicateAlongLine """ - ret, added_objects = self._primitives.modeler.duplicate_along_line(self, vector, nclones, attachObject) + _, added_objects = self._primitives.duplicate_along_line(self, vector, nclones, attachObject) return added_objects @pyaedt_function_handler() @@ -1609,7 +1613,7 @@ def sweep_along_vector(self, sweep_vector, draft_angle=0, draft_type="Round"): >>> oEditor.SweepAlongVector """ - self._primitives.modeler.sweep_along_vector(self, sweep_vector, draft_angle, draft_type) + self._primitives.sweep_along_vector(self, sweep_vector, draft_angle, draft_type) return self @pyaedt_function_handler() @@ -1643,7 +1647,7 @@ def sweep_along_path( >>> oEditor.SweepAlongPath """ - self._primitives.modeler.sweep_along_path( + self._primitives.sweep_along_path( self, sweep_object, draft_angle, draft_type, is_check_face_intersection, twist_angle ) return self @@ -1672,7 +1676,7 @@ def sweep_around_axis(self, cs_axis, sweep_angle=360, draft_angle=0): >>> oEditor.SweepAroundAxis """ - self._primitives.modeler.sweep_around_axis(self, cs_axis, sweep_angle, draft_angle) + self._primitives.sweep_around_axis(self, cs_axis, sweep_angle, draft_angle) return self @pyaedt_function_handler() @@ -1699,7 +1703,7 @@ def section(self, plane, create_new=True, section_cross_object=False): >>> oEditor.Section """ - self._primitives.modeler.section(self, plane, create_new, section_cross_object) + self._primitives.section(self, plane, create_new, section_cross_object) return self @pyaedt_function_handler() @@ -1717,7 +1721,7 @@ def clone(self): >>> oEditor.Clone """ - new_obj_tuple = self._primitives.modeler.clone(self.id) + new_obj_tuple = self._primitives.clone(self.id) success = new_obj_tuple[0] assert success, "Could not clone the object {}.".format(self.name) new_name = new_obj_tuple[1][0] @@ -1746,7 +1750,7 @@ def subtract(self, tool_list, keep_originals=True): >>> oEditor.Subtract """ - self._primitives.modeler.subtract(self.name, tool_list, keep_originals) + self._primitives.subtract(self.name, tool_list, keep_originals) return self @pyaedt_function_handler() diff --git a/pyaedt/modeler/cad/polylines.py b/pyaedt/modeler/cad/polylines.py index 14f76457ec5..6cd574fc210 100644 --- a/pyaedt/modeler/cad/polylines.py +++ b/pyaedt/modeler/cad/polylines.py @@ -198,7 +198,7 @@ def __init__( if not isinstance(position_list, list): raise TypeError("The position_list argument must be a list of positions with at least one point.") # convert the points if they are defined as modeler.Position - if isinstance(position_list[0], self._primitives._app.modeler.Position): + if isinstance(position_list[0], self._primitives.Position): position_list = [[i for i in j] for j in position_list] if not segment_type: if len(position_list) < 2: diff --git a/pyaedt/modeler/modeler2d.py b/pyaedt/modeler/modeler2d.py index ebdbfe77bf4..cf5f0d47848 100644 --- a/pyaedt/modeler/modeler2d.py +++ b/pyaedt/modeler/modeler2d.py @@ -2,7 +2,6 @@ from warnings import warn from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Modeler import GeometryModeler from pyaedt.modeler.cad.Modeler import Modeler from pyaedt.modeler.cad.Primitives2D import Primitives2D @@ -31,7 +30,7 @@ def oeditor(self): return self._app.oeditor -class Modeler2D(GeometryModeler, Primitives2D): +class Modeler2D(Primitives2D): """Provides the Modeler 2D application interface. This class is inherited in the caller application and is accessible through the modeler variable @@ -49,8 +48,7 @@ class Modeler2D(GeometryModeler, Primitives2D): """ def __init__(self, application): - GeometryModeler.__init__(self, application, is3d=False) - Primitives2D.__init__(self) + Primitives2D.__init__(self, application) self._primitives = self self.logger.info("Modeler2D class has been initialized!") @@ -135,11 +133,11 @@ def radial_split_2D(self, radius, name): ``True`` when successful, ``False`` when failed. """ - cir = self.modeler.create_circle([0, 0, 0], 3, name=name + "_split", matname="vacuum") + cir = self.create_circle([0, 0, 0], 3, name=name + "_split", matname="vacuum") self.oeditor.Copy(["NAME:Selections", "Selections:=", name]) - objects = [i for i in self.modeler.object_names] + objects = [i for i in self.object_names] self.oeditor.Paste() - name1 = [i for i in self.modeler.object_names if i not in objects] + name1 = [i for i in self.object_names if i not in objects] self.intersect([name1[0], cir.name], keep_originals=False) self.subtract(name, name1[0]) return True diff --git a/pyaedt/modeler/modeler3d.py b/pyaedt/modeler/modeler3d.py index 48ed3f6288b..2b6a05bccce 100644 --- a/pyaedt/modeler/modeler3d.py +++ b/pyaedt/modeler/modeler3d.py @@ -10,12 +10,11 @@ from pyaedt.generic.general_methods import GrpcApiError from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Modeler import GeometryModeler from pyaedt.modeler.cad.Primitives3D import Primitives3D from pyaedt.modeler.geometry_operators import GeometryOperators -class Modeler3D(GeometryModeler, Primitives3D, object): +class Modeler3D(Primitives3D): """Provides the Modeler 3D application interface. @@ -35,8 +34,7 @@ class Modeler3D(GeometryModeler, Primitives3D, object): def __init__(self, application): application.logger.reset_timer() - GeometryModeler.__init__(self, application, is3d=True) - Primitives3D.__init__(self) + Primitives3D.__init__(self, application) application.logger.info_timer("Modeler3D class has been initialized!") def __get__(self, instance, owner): @@ -211,9 +209,7 @@ def create_3dcomponent( if object_list: objs = object_list else: - native_objs = [ - obj.name for _, v in self.modeler.user_defined_components.items() for _, obj in v.parts.items() - ] + native_objs = [obj.name for _, v in self.user_defined_components.items() for _, obj in v.parts.items()] objs = [obj for obj in self.object_names if obj not in native_objs] if not native_components and native_objs: self.logger.warning( @@ -296,7 +292,7 @@ def create_3dcomponent( if isinstance(item, str): mesh_comp.append(item) else: - mesh_comp.append(self.modeler.objects[item].name) + mesh_comp.append(self.objects[item].name) if all(included_obj in objs for included_obj in mesh_comp): used_mesh_ops.append(self._app.mesh.meshoperations[mesh].name) arg2.append("MeshOperations:="), arg2.append(used_mesh_ops) @@ -441,9 +437,7 @@ def replace_3dcomponent( if object_list: objs = object_list else: - native_objs = [ - obj.name for _, v in self.modeler.user_defined_components.items() for _, obj in v.parts.items() - ] + native_objs = [obj.name for _, v in self.user_defined_components.items() for _, obj in v.parts.items()] objs = [obj for obj in self.object_names if obj not in native_objs] if native_objs: self.logger.warning( @@ -525,7 +519,7 @@ def replace_3dcomponent( if isinstance(item, str): mesh_comp.append(item) else: - mesh_comp.append(self.modeler.objects[item].name) + mesh_comp.append(self.objects[item].name) if all(included_obj in objs for included_obj in mesh_comp): used_mesh_ops.append(self._app.mesh.meshoperations[mesh].name) arg2.append("MeshOperations:="), arg2.append(used_mesh_ops) @@ -1339,7 +1333,7 @@ def objects_segmentation( segmentation_thickness = obj_axial_length / segments_number elif segmentation_thickness: segments_number = round(obj_axial_length / segmentation_thickness) - face_object = self.modeler.create_object_from_face(obj.bottom_face_z) + face_object = self.create_object_from_face(obj.bottom_face_z) # segment sheets segment_sheets[obj.name] = face_object.duplicate_along_line( ["0", "0", segmentation_thickness], segments_number @@ -1427,7 +1421,7 @@ def change_region_padding(self, padding_data, padding_type, direction=None, regi self.logger.error("{} does not exist.".format(region)) return False create_region_name = region.GetChildNames()[0] - self.modeler.oeditor.ChangeProperty( + self.oeditor.ChangeProperty( list( [ "NAME:AllTabs", From 4cd8f6063cf96cafc98352652473d87c0c8f1536 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 31 Oct 2023 09:26:17 +0100 Subject: [PATCH 30/78] Non linear method private (#3824) --- pyaedt/modules/Material.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index 86bc7c9b9b4..59ae4b45045 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -366,7 +366,7 @@ def value(self): def value(self, val): if isinstance(val, list) and isinstance(val[0], list): self._property_value[0].value = val - self.set_non_linear() + self._set_non_linear() elif isinstance(val, list) and self.type != "vector": if len(val) == 3: self.type = "anisotropic" @@ -825,8 +825,9 @@ def add_thermal_modifier_closed_form( return self._material.update() @pyaedt_function_handler() - def set_non_linear(self, x_unit=None, y_unit=None): - """Enable Non Linear Material. + def _set_non_linear(self, x_unit=None, y_unit=None): + """Enable non-linear material. + This is a private method, and should not be used directly. Parameters ---------- @@ -839,6 +840,17 @@ def set_non_linear(self, x_unit=None, y_unit=None): ------- bool `True` if succeeded. + + Examples + -------- + >>> from pyaedt import Hfss + >>> hfss = Hfss(specified_version="2023.2") + >>> B_value = [0.0, 0.1, 0.3, 0.4, 0.48, 0.55, 0.6, 0.61, 0.65] + >>> H_value = [0.0, 500.0, 1000.0, 1500.0, 2000.0, 2500.0, 3500.0, 5000.0, 10000.0] + >>> mat = hfss.materials.add_material("newMat") + >>> b_h_dataset = [[b, h] for b, h in zip(B_value, H_value)] + >>> mat.permeability = b_h_dataset + """ if self.name not in ["permeability", "conductivity", "permittivity"]: self.logger.error( From 2ffcfe03379914eb7ef946e47f292ac932c01667 Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:32:50 +0100 Subject: [PATCH 31/78] Allow navigation with keys in the documentation. (#3825) --- doc/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 0b335cb0883..11b180ef38e 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -337,6 +337,7 @@ def setup(app): "version_match": get_version_match(__version__), }, "collapse_navigation": True, + "navigation_with_keys": True, "use_meilisearch": { "api_key": os.getenv("MEILISEARCH_PUBLIC_API_KEY", ""), "index_uids": { From 1b770ed4ef26a2d60f05f357546ae4467fae3eb3 Mon Sep 17 00:00:00 2001 From: SMoraisAnsys <146729917+SMoraisAnsys@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:35:52 +0100 Subject: [PATCH 32/78] Fix issue 3751 (#3820) * BUGFIX: reorder calls in EdbBondwire __init__.py Problem When a user tries to access bondwires data through edb.modeler.bondwires it triggers multiple primitives data cast. When casting a raw primitive into an `EdbBondwire` instance, an infinite loop to access "_edb_object" or "_app" was triggered. Solution In order to avoid those missing attributes, one can simply call `EDBPrimitives.__init__(...)` before calling the associated DotNet type __init__(...) (here BondwireDotNet.__init__()). Note I found that workaround by looking at why other cast worked. While debugging EdbPath, I saw that the missing attributes where setted up thorugh EDBPrimitives.__init__(self, raw_primitive, core_app). Closes #3751 * BUGFIX: reoder calls in EdbText __init__.py * CI: extend unit testing timetout --- .github/workflows/unit_tests.yml | 2 +- pyaedt/edb_core/edb_data/primitives_data.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 17f0b6580c6..8242a8d8749 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -133,7 +133,7 @@ jobs: with: max_attempts: 3 retry_on: error - timeout_minutes: 40 + timeout_minutes: 50 command: | testenv\Scripts\Activate.ps1 Set-Item -Path env:PYTHONMALLOC -Value "malloc" diff --git a/pyaedt/edb_core/edb_data/primitives_data.py b/pyaedt/edb_core/edb_data/primitives_data.py index 4b29f1c4dbc..a5170bdbc72 100644 --- a/pyaedt/edb_core/edb_data/primitives_data.py +++ b/pyaedt/edb_core/edb_data/primitives_data.py @@ -1053,14 +1053,14 @@ def in_polygon( class EdbText(EDBPrimitivesMain, TextDotNet): def __init__(self, raw_primitive, core_app): - TextDotNet.__init__(self, self._app, raw_primitive) EDBPrimitives.__init__(self, raw_primitive, core_app) + TextDotNet.__init__(self, self._app, raw_primitive) class EdbBondwire(EDBPrimitivesMain, BondwireDotNet): def __init__(self, raw_primitive, core_app): - BondwireDotNet.__init__(self, self._app, raw_primitive) EDBPrimitives.__init__(self, raw_primitive, core_app) + BondwireDotNet.__init__(self, core_app, raw_primitive) class EDBArcs(object): From 95f50e430eba147004275ab7551bba95ab4c3f3c Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Tue, 31 Oct 2023 12:55:02 +0100 Subject: [PATCH 33/78] parameterized Djordjevic Sarkar model in AEDT (#3827) * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- _unittest/test_03_Materials.py | 6 +++++ pyaedt/modules/Material.py | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/_unittest/test_03_Materials.py b/_unittest/test_03_Materials.py index 7fc62a651e3..73f141114cf 100644 --- a/_unittest/test_03_Materials.py +++ b/_unittest/test_03_Materials.py @@ -237,3 +237,9 @@ def test_11_material_case(self): assert self.aedtapp.materials["Aluminum"] == self.aedtapp.materials["aluminum"] assert self.aedtapp.materials["Aluminum"].name == "aluminum" assert self.aedtapp.materials.add_material("AluMinum") == self.aedtapp.materials["aluminum"] + + def test_12_material_model(self): + mat = self.aedtapp.materials.add_material("ds_material") + self.aedtapp["$dk"] = 3 + self.aedtapp["$df"] = 0.01 + assert mat.set_djordjevic_sarkar_model(dk="$dk", df="$df") diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index 59ae4b45045..b770a0fe7e7 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -2278,6 +2278,52 @@ def is_dielectric(self, threshold=100000): """ return not self.is_conductor(threshold) + @pyaedt_function_handler + def set_djordjevic_sarkar_model( + self, + dk=4, + df=0.02, + i_freq=1e9, + sigma_dc=1e-12, + freq_hi=159.15494e9, + ): + """Set Djordjevic-Sarkar model. + + Parameters + ---------- + dk : int, float, str, optional + Dielectric constant at input frequency. + df : int, float, str, optional + Loss tangent at input frequency. + i_freq : int, float, optional. + Input frequency in Hz. + sigma_dc : int, float, optional + Conductivity at DC. + freq_hi : int, float, optional + High Frequency corner in Hz. + + Returns + ------- + bool + ``True`` if successful, ``False`` otherwise. + """ + + # K = f"({dk} * {df} - {sigma_dc} / (2 * pi * {i_freq} * e0)) / atan({freq_hi} / {i_freq})" + K = "({} * {} - {} / (2 * pi * {} * e0)) / atan({} / {})".format(dk, df, sigma_dc, i_freq, freq_hi, i_freq) + epsilon_inf = "({} - {} / 2 * ln({}**2 / {}**2 + 1))".format(dk, K, freq_hi, i_freq) + freq_low = "({} / exp(10 * {} * {} / ({})))".format(freq_hi, df, epsilon_inf, K) + + ds_er = "{} + {} / 2 * ln(({}**2 + Freq**2) / ({}**2 + Freq**2))".format(epsilon_inf, K, freq_hi, freq_low) + cond = "{} + 2 * pi * Freq * e0 * ({}) * (atan(Freq / ({})) - atan(Freq / {}))".format( + sigma_dc, K, freq_low, freq_hi + ) + # ds_tande = "{} / (e0 * {} * 2 * pi * Freq)".format(cond, ds_er) + + self.conductivity = cond + self.permittivity = ds_er + + return self.update() + @pyaedt_function_handler() def update(self): """Update the material in AEDT. From 83f61577bb7bd7acf98b3cf940993e10b51afab4 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Tue, 31 Oct 2023 14:42:45 +0100 Subject: [PATCH 34/78] create port enhancement (#3813) * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * fix * Update pyaedt/edb_core/edb_data/terminals.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/sources.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/sources.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/padstacks_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/padstacks_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * fix * Update pyaedt/edb_core/edb_data/padstacks_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --- _unittest/test_00_EDB.py | 14 ++++-- pyaedt/edb.py | 45 +++++++++++++++-- pyaedt/edb_core/edb_data/padstacks_data.py | 40 +++++++++++++--- pyaedt/edb_core/edb_data/ports.py | 19 ++++++++ pyaedt/edb_core/edb_data/sources.py | 56 +++++++++++++++------- pyaedt/edb_core/edb_data/terminals.py | 31 +++++++++++- 6 files changed, 174 insertions(+), 31 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 717b7d2b97d..b50a3c43315 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -278,7 +278,7 @@ def test_010_nets_query(self): diff_pair = self.edbapp.differential_pairs.create("new_pair1", "PCIe_Gen4_RX1_P", "PCIe_Gen4_RX1_N") assert diff_pair.positive_net.name == "PCIe_Gen4_RX1_P" assert diff_pair.negative_net.name == "PCIe_Gen4_RX1_N" - assert self.edbapp.differential_pairs.items + assert self.edbapp.differential_pairs["new_pair1"] assert self.edbapp.net_classes.items assert self.edbapp.net_classes.create("DDR4_ADD", ["DDR4_A0", "DDR4_A1"]) @@ -448,12 +448,12 @@ def test_042_create_current_source(self): ) self.edbapp.siwave.create_pin_group( - reference_designator="U1", pin_numbers=["A14", "A15"], group_name="sink_pos" + reference_designator="U1", pin_numbers=["R23", "P23"], group_name="sink_pos" ) assert self.edbapp.siwave.create_voltage_source_on_pin_group("sink_pos", "gnd", name="vrm_voltage_source") self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["A27", "A28"], group_name="vp_pos") - self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["A14", "A15"], group_name="vp_neg") + self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["R23", "P23"], group_name="vp_neg") assert self.edbapp.siwave.create_voltage_probe_on_pin_group("vprobe", "vp_pos", "vp_neg") assert self.edbapp.probes["vprobe"] self.edbapp.siwave.place_voltage_probe( @@ -2402,6 +2402,14 @@ def test_134_create_port_between_pin_and_layer(self): edbapp.siwave.create_port_between_pin_and_layer( component_name="U1", pins_name="A27", layer_name="16_Bottom", reference_net="GND" ) + U7 = edbapp.components["U7"] + U7.pins["G7"].create_port() + port = U7.pins["F7"].create_port(reference=U7.pins["E7"]) + port.is_circuit_port = True + _, pin_group = edbapp.siwave.create_pin_group_on_net( + reference_designator="U7", net_name="GND", group_name="U7_GND" + ) + U7.pins["F7"].create_port(reference=pin_group) edbapp.close() def test_134_siwave_source_setter(self): diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 3eee3c44133..3613c80450e 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -23,6 +23,7 @@ from pyaedt.edb_core.edb_data.edbvalue import EdbValue from pyaedt.edb_core.edb_data.hfss_simulation_setup_data import HfssSimulationSetup from pyaedt.edb_core.edb_data.ports import BundleWavePort +from pyaedt.edb_core.edb_data.ports import CircuitPort from pyaedt.edb_core.edb_data.ports import CoaxPort from pyaedt.edb_core.edb_data.ports import ExcitationSources from pyaedt.edb_core.edb_data.ports import GapPort @@ -400,9 +401,12 @@ def ports(self): ports = {} for t in temp: t2 = Terminal(self, t) - if t2.terminal_type == TerminalType.BundleTerminal.name: - bundle_ter = BundleWavePort(self, t) - ports[bundle_ter.name] = bundle_ter + if t2.is_circuit_port: + port = CircuitPort(self, t) + ports[port.name] = port + elif t2.terminal_type == TerminalType.BundleTerminal.name: + port = BundleWavePort(self, t) + ports[port.name] = port elif t2.hfss_type == "Wave": ports[t2.name] = WavePort(self, t) elif t2.terminal_type == TerminalType.PadstackInstanceTerminal.name: @@ -3639,3 +3643,38 @@ def _get_connected_ports_from_multizone_cutout(self, terminal_info_dict): ): connected_ports_list.append((port1_connexion, port2_connexion)) return connected_ports_list + + @pyaedt_function_handler + def create_port(self, terminal, ref_terminal=None, is_circuit_port=False): + """Create a port between two terminals. + + Parameters + ---------- + terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + optional + Negative terminal of the port. + is_circuit_port : bool, optional + Whether it is a circuit port. The default is ``False``. + + Returns + ------- + + """ + if not ref_terminal: + port = CoaxPort(self, terminal._edb_object) + else: + if is_circuit_port: + port = CircuitPort(self, terminal._edb_object) + else: + port = GapPort(self, terminal._edb_object) + port.ref_terminal = ref_terminal + port.is_circuit_port = is_circuit_port + return port diff --git a/pyaedt/edb_core/edb_data/padstacks_data.py b/pyaedt/edb_core/edb_data/padstacks_data.py index a37d2b2987a..ed25ff69b08 100644 --- a/pyaedt/edb_core/edb_data/padstacks_data.py +++ b/pyaedt/edb_core/edb_data/padstacks_data.py @@ -1018,12 +1018,39 @@ def _create_terminal(self, name=None): @pyaedt_function_handler def create_coax_port(self, name=None, radial_extent_factor=0): """Create a coax port.""" - from pyaedt.edb_core.edb_data.ports import CoaxPort - term = self._create_terminal(name) - coax = CoaxPort(self._pedb, term._edb_object) - coax.radial_extent_factor = radial_extent_factor - return coax + port = self.create_port(name) + port.radial_extent_factor = radial_extent_factor + return port + + @pyaedt_function_handler + def create_port(self, name=None, reference=None, is_circuit_port=False): + """Create a port on the padstack. + + Parameters + ---------- + name : str, optional + Name of the port. The default is ``None``, in which case a name is automatically assigned. + reference : class:`pyaedt.edb_core.edb_data.nets_data.EDBNetsData`, + class:`pyaedt.edb_core.edb_data.padstacks_data.EDBPadstackInstance`, + class:`pyaedt.edb_core.edb_data.sources.PinGroup`, optional + Negative terminal of the port. + is_circuit_port : bool, optional + Whether it is a circuit port. + + Returns + ------- + + """ + terminal = self._create_terminal(name) + if reference: + ref_terminal = reference._create_terminal(terminal.name + "_ref") + if reference._edb_object.ToString() == "PinGroup": + is_circuit_port = True + else: + ref_terminal = None + + return self._pedb.create_port(terminal, ref_terminal, is_circuit_port) @property def _em_properties(self): @@ -1163,7 +1190,8 @@ def in_polygon(self, polygon_data, include_partial=True, simple_check=False): @property def pin(self): - """Return Edb padstack object.""" + """EDB padstack object.""" + warnings.warn("`pin` is deprecated.", DeprecationWarning) return self._edb_padstackinstance @property diff --git a/pyaedt/edb_core/edb_data/ports.py b/pyaedt/edb_core/edb_data/ports.py index a26d240be6f..b68539286ba 100644 --- a/pyaedt/edb_core/edb_data/ports.py +++ b/pyaedt/edb_core/edb_data/ports.py @@ -54,6 +54,25 @@ def renormalize_z0(self): ) +class CircuitPort(GapPort): + """Manages gap port properties. + + Parameters + ---------- + pedb : pyaedt.edb.Edb + EDB object from the ``Edblib`` library. + edb_object : Ansys.Ansoft.Edb.Cell.Terminal.EdgeTerminal + Edge terminal instance from EDB. + + Examples + -------- + This example shows how to access the ``GapPort`` class. + """ + + def __init__(self, pedb, edb_object): + super().__init__(pedb, edb_object) + + class WavePort(EdgeTerminal): """Manages wave port properties. diff --git a/pyaedt/edb_core/edb_data/sources.py b/pyaedt/edb_core/edb_data/sources.py index f7a3bc6c0a0..5adcb6e259b 100644 --- a/pyaedt/edb_core/edb_data/sources.py +++ b/pyaedt/edb_core/edb_data/sources.py @@ -229,6 +229,7 @@ def __init__(self, name="", edb_pin_group=None, pedb=None): self._component = "" self._node_pins = [] self._net = "" + self._edb_object = self._edb_pin_group @property def _active_layout(self): @@ -274,26 +275,45 @@ def net(self, value): def net_name(self): return self._edb_pin_group.GetNet().GetName() + @property + def terminal(self): + """Terminal.""" + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + + term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal()) + return term if not term.is_null else None + @pyaedt_function_handler() - def _create_pin_group_terminal(self, is_reference=False): - pg_term = self._edb_pin_group.GetPinGroupTerminal() - pin_group_net = self._edb_pin_group.GetNet() - if pin_group_net.IsNull(): # pragma: no cover - pin_group_net = list(self._edb_pin_group.GetPins())[0].GetNet() - if pg_term.IsNull(): - return self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create( - self._active_layout, - pin_group_net, - self.name, - self._edb_pin_group, - is_reference, - ) - else: + def _create_terminal(self, name=None): + """Create a terminal on the pin group. + + Parameters + ---------- + name : str, optional + Name of the terminal. The default is ``None``, in which case a name is + automatically assigned. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal` + """ + pg_term = self.terminal + if not name: + name = self.name + + if pg_term: return pg_term + else: + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + + term = PinGroupTerminal(self._pedb) + + term = term.create(name, self.net_name, self.name) + return term @pyaedt_function_handler() def create_current_source_terminal(self, magnitude=1, phase=0): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource) terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude)) terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase)) @@ -301,7 +321,7 @@ def create_current_source_terminal(self, magnitude=1, phase=0): @pyaedt_function_handler() def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource) terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude)) terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase)) @@ -310,14 +330,14 @@ def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001): @pyaedt_function_handler() def create_voltage_probe_terminal(self, impedance=1000000): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe) terminal.SetImpedance(self._pedb.edb_value(impedance)) return terminal @pyaedt_function_handler() def create_port_terminal(self, impedance=50): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) terminal.SetImpedance(self._pedb.edb_value(impedance)) terminal.SetIsCircuitPort(True) diff --git a/pyaedt/edb_core/edb_data/terminals.py b/pyaedt/edb_core/edb_data/terminals.py index 39245883611..61de92cbba8 100644 --- a/pyaedt/edb_core/edb_data/terminals.py +++ b/pyaedt/edb_core/edb_data/terminals.py @@ -516,7 +516,7 @@ def create(self, name, net, location, layer, is_ref=False): Returns ------- - + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal` """ terminal = self._pedb.edb_api.cell.terminal.PointTerminal.Create( self._pedb.active_layout, @@ -562,3 +562,32 @@ class PinGroupTerminal(Terminal): def __init__(self, pedb, edb_object=None): super().__init__(pedb, edb_object) + + @pyaedt_function_handler + def create(self, name, net_name, pin_group_name, is_ref=False): + """Create a pin group terminal. + + Parameters + ---------- + name : str + Name of the terminal. + net_name : str + Name of the net. + pin_group_name : str, + Name of the pin group. + is_ref : bool, optional + Whether it is a reference terminal. The default is ``False``. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal` + """ + term = self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create( + self._pedb.active_layout, + self._pedb.nets[net_name].net_object, + name, + self._pedb.siwave.pin_groups[pin_group_name]._edb_object, + is_ref, + ) + term = PinGroupTerminal(self._pedb, term) + return term if not term.is_null else False From fd22e243db9538428c1cfb91d4d854fdb14033d4 Mon Sep 17 00:00:00 2001 From: Nitin Netake <118507703+nnetake@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:29:42 +0530 Subject: [PATCH 35/78] fix: Issue 3577 mesh priority for 3d comp (#3832) * updated 3d comp mesh priority for 2d surfaces and added UTs * updated for 2d and 3d parts check --- .../T98/3d_comp_mesh_prio_test.aedt | 4363 +++++++++++++++++ _unittest/test_98_Icepak.py | 15 + pyaedt/modules/MeshIcepak.py | 67 +- 3 files changed, 4433 insertions(+), 12 deletions(-) create mode 100644 _unittest/example_models/T98/3d_comp_mesh_prio_test.aedt diff --git a/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt b/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt new file mode 100644 index 00000000000..96304ade003 --- /dev/null +++ b/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt @@ -0,0 +1,4363 @@ +$begin 'AnsoftProject' + Created='Tue Oct 31 11:07:03 2023' + Product='ElectronicsDesktop' + FileOwnedByWorkbench=false + $begin 'Desktop' + Version(2023, 2) + InfrastructureVersion(1, 0) + $begin 'FactoryHeader' + $begin 'geometry3deditor' + KernelVersion(2, 0) + ProjectContainsGeometry3D='1' + $end 'geometry3deditor' + $end 'FactoryHeader' + $end 'Desktop' + UsesAdvancedFeatures=true + NextUniqueID=0 + MoveBackwards=false + $begin 'HFSSEnvironment' + Version(1, 0) + $end 'HFSSEnvironment' + $begin 'PlanarEMEnvironment' + Version(1, 0) + $end 'PlanarEMEnvironment' + $begin 'Q3DEnvironment' + Version(1, 0) + $end 'Q3DEnvironment' + $begin '2DExtractorEnvironment' + Version(1, 0) + $end '2DExtractorEnvironment' + $begin 'NexximEnvironment' + Version(1, 0) + $end 'NexximEnvironment' + $begin 'NexximNetlistEnvironment' + Version(1, 0) + $end 'NexximNetlistEnvironment' + $begin 'EmitEnvironment' + Version(1, 0) + $end 'EmitEnvironment' + $begin 'Maxwell3DEnvironment' + Version(1, 0) + $end 'Maxwell3DEnvironment' + $begin 'Maxwell2DEnvironment' + Version(1, 0) + $end 'Maxwell2DEnvironment' + $begin 'RMxprtEnvironment' + Version(1, 0) + $end 'RMxprtEnvironment' + $begin 'MaxCirEnvironment' + Version(1, 0) + $end 'MaxCirEnvironment' + $begin 'SimplorerEnvironment' + Version(1, 0) + $end 'SimplorerEnvironment' + $begin 'IcepakEnvironment' + Version(1, 0) + $end 'IcepakEnvironment' + $begin 'MechanicalEnvironment' + Version(1, 0) + $end 'MechanicalEnvironment' + $begin 'SchematicEnvironment' + Version(1, 0) + $end 'SchematicEnvironment' + $begin 'geometry3deditor' + Version(1, 0) + $end 'geometry3deditor' + ReadVersion=11 + $begin 'DesignMgrEnvironment' + CompInstCounter=1 + GPortCounter=0 + NetCounter=0 + Alias('Ieee;Simplorer Elements\\Ieee', 'Std;Simplorer Elements\\Std', 'Basic_VHDLAMS;Simplorer Elements\\Basic Elements VHDLAMS\\Basic Elements VHDLAMS', 'Digital_Elements;Simplorer Elements\\Digital Elements\\Digital Elements', 'Transformations;Simplorer Elements\\Tools\\Transformations\\Transformations', 'HEV_VHDLAMS;Simplorer Elements\\HEV VHDLAMS\\HEV VHDLAMS', 'automotive_vda;Simplorer Elements\\VDALibs VHDLAMS\\automotive_vda', 'example_boardnet;Simplorer Elements\\VDALibs VHDLAMS\\example_boardnet', 'example_ecar;Simplorer Elements\\VDALibs VHDLAMS\\example_ecar', 'fundamentals_vda;Simplorer Elements\\VDALibs VHDLAMS\\fundamentals_vda', 'hybrid_emc_vda;Simplorer Elements\\VDALibs VHDLAMS\\hybrid_emc_vda', 'megma;Simplorer Elements\\VDALibs VHDLAMS\\megma', 'modelica_rotational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_rotational', 'modelica_thermal;Simplorer Elements\\VDALibs VHDLAMS\\modelica_thermal', 'modelica_translational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_translational', 'spice2vhd;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd', 'spice2vhd_devices;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd_devices', 'aircraft_electrical_vhdlams;Simplorer Elements\\Aircraft Electrical VHDLAMS\\Aircraft Electrical VHDLAMS', 'power_system_vhdlams;Simplorer Elements\\Power System VHDLAMS\\Power System VHDLAMS') + $end 'DesignMgrEnvironment' + $begin 'ProjectDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='ProjectDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'ProjectDatasets' + VariableOrders[0:] + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $begin 'air' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.949999988079071 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1.0006' + permeability='1.0000004' + thermal_conductivity='0.0261' + mass_density='1.1614' + specific_heat='1005' + thermal_expansion_coefficient='0.00333' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + diffusivity='2.88e-05' + molecular_mass='0.028966' + viscosity='1.84e-05' + material_refractive_index='1.000293' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'air' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $begin 'Scripts' + $end 'Scripts' + $begin 'Symbols' + $begin 'IcepakDesign1' + ModTime=1698730423 + CE=5 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'Graphics' + Rect(0, 0, 0, 0, 0.00254, 0.00254, 0.00508, 0.00508, 0, 0, 0) + Rect(0, 1, 0, 0, 0.000423333333333333, 0.00254, 0.000423333333333333, 0.000423333333333334, 0, 0, 0) + $end 'Graphics' + $end 'IcepakDesign1' + $end 'Symbols' + $begin 'DefInfo' + IcepakDesign1(0, 0, '', 1698730423, '', 'IcepakDesign1', '', '', '', '', '', 'Design.bmp', '', 'Project', '', '', 1698730423, '', 0) + $end 'DefInfo' + $begin 'Compdefs' + $begin 'IcepakDesign1' + Library='' + CircuitEnv=5 + Refbase='U' + NumParts=1 + ModSinceLib=true + $begin 'Properties' + TextProp('Representation', 'SRD', '', 'IcepakDesign1') + TextProp('Owner', 'SRD', '', 'Icepak') + $end 'Properties' + CompExtID=6 + $end 'IcepakDesign1' + $end 'Compdefs' + $end 'Definitions' + DesignIDServer=2 + MoveBackwards=false + $begin 'IcepakModel' + RepRewriteV2=true + Name='IcepakDesign1' + DesignID=0 + 'Perform Minimal validation'=false + 'Default Fluid Material'='air' + 'Default Solid Material'='Al-Extruded' + 'Default Surface Material'='Steel-oxidised-surface' + AmbientTemperature='20cel' + AmbientPressure='0n_per_meter_sq' + AmbientRadiationTemperature='20cel' + 'Gravity Vector CS ID'=1 + 'Gravity Vector Axis'='Z' + Positive=false + ExportOnSimulationComplete=false + ExportDirectory='' + SherlockExportOnSimulationComplete=false + SherlockExportAsFatigue=true + SherlockExportDirectory='' + AutoLaunchMeshViewer=true + MeshCadAsLightWeight=true + EnableTransitionTemplate=false + TempSecondaryGradientSkewMesh=false + EnableMeshByLayerFor2DMLM=false + BoundaryBasedMeshRefinement=false + EnableAltitudeEffects=false + UpdateFanCurve=false + Altitude='0meter' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $begin 'OutputVariable' + NextUniqueID=0 + MoveBackwards=false + $end 'OutputVariable' + $begin 'ModelSetup' + $begin 'DesignDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='DesignDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'DesignDatasets' + VariableOrders[0:] + $begin 'Editor3D Doc Preferences' + 'Plane Background'=true + BackgroundColor1=16777215 + BackgroundColor2=0 + 'Need Lights'=true + 'Ambient Light'=8355711 + 'Num Lights'=1 + Light0[4: 16777215, 0.75, -0.150000005960464, -0.629999995231628] + Ver=2 + $end 'Editor3D Doc Preferences' + SnapMode=31 + WorkingCS=1 + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=8 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=309 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'SubModelDefinitions' + $begin 'SubModelDefinition' + SubmodelDefinitionID=165 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 165] + SubmodelDefinitionName='IcepakDesign1' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/2d_3d_comp.a3dcomp' + IsLocal=false + ChecksumString='73c5bab3e52d2b12cbc47b9b0fc6753f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='2d_3d_comp165.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=257 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 257] + SubmodelDefinitionName='all_2d_objects' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/all_2d_objects.a3dcomp' + IsLocal=false + ChecksumString='48b1fbe13ec15836fb483ca4bedb821f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='all_2d_objects257.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=273 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 273] + SubmodelDefinitionName='all_3d_objects' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/all_3d_objects.a3dcomp' + IsLocal=false + ChecksumString='1d642112d4e930ee4e995da76ff2d7f0' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='all_3d_objects273.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $end 'SubModelDefinitions' + $begin 'Groups' + $end 'Groups' + $begin 'UserDefinedModels' + $begin 'UserDefinedModel' + ID=165 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=166, '74'=167) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='IcepakDesign1_1' + GroupID=-1 + SubModelDefinitionID=165 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/2d_3d_comp.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=257 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('71'=258, '92'=259) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='all_2d_objects1' + GroupID=-1 + SubModelDefinitionID=257 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/all_2d_objects.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=273 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=274, '62'=275) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='all_3d_objects1' + GroupID=-1 + SubModelDefinitionID=273 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/all_3d_objects.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Region' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"air"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='nan ' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Region' + ID=5 + ReferenceCoordSystemID=1 + $begin 'RegionParameters' + KernelVersion=23 + '+XPaddingType'='Percentage Offset' + '+XPadding'='50' + '-XPaddingType'='Percentage Offset' + '-XPadding'='50' + '+YPaddingType'='Percentage Offset' + '+YPadding'='50' + '-YPaddingType'='Percentage Offset' + '-YPadding'='50' + '+ZPaddingType'='Percentage Offset' + '+ZPadding'='50' + '-ZPaddingType'='Percentage Offset' + '-ZPadding'='50' + $begin 'BoxForVirtualObjects' + LowPoint[3: 1, 1, 1] + HighPoint[3: -1, -1, -1] + $end 'BoxForVirtualObjects' + $end 'RegionParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=82 + StartEdgeID=88 + StartVertexID=100 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=108 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='1mm' + ZPosition='0mm' + XSize='6.5mm' + YSize='3mm' + ZSize='2.5mm' + $end 'BoxParameters' + ParentPartID=109 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=109 + StartFaceID=110 + StartEdgeID=116 + StartVertexID=128 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=165 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=166 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=168 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=168 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('35'=169, '36'=170, '37'=171, '38'=172, '39'=173, '40'=174) + EdgeKeyIDMap('41'=175, '42'=176, '43'=177, '44'=178, '45'=179, '46'=180, '47'=181, '48'=182, '49'=183, '50'=184, '51'=185, '52'=186) + VertexKeyIDMap('53'=187, '54'=188, '55'=189, '56'=190, '57'=191, '58'=192, '59'=193, '60'=194) + BodyKeyIDMap('34'=168) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=165 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=167 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=195 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=195 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('84'=196) + EdgeKeyIDMap('75'=197, '76'=198, '77'=199, '78'=200) + VertexKeyIDMap('79'=201, '80'=202, '81'=203, '82'=204) + BodyKeyIDMap('74'=195) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=205 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='7.5mm' + YStart='1mm' + ZStart='2.5mm' + Width='3.75mm' + Height='-3mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=206 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=206 + StartFaceID=-1 + StartEdgeID=207 + StartVertexID=211 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=215 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=206 + $end 'LocalOperationParameters' + ParentPartID=206 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=216 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=216 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=11.25 + FcUVMid(9.375, -0.5, 2.5) + $begin 'FcTolVts' + TolVt(7.5, 1, 2.5, 5e-07) + TolVt(11.25, 1, 2.5, 5e-07) + TolVt(11.25, -2, 2.5, 5e-07) + TolVt(7.5, -2, 2.5, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=205 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=219 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='0mm' + ZPosition='0mm' + XSize='2mm' + YSize='-3mm' + ZSize='2mm' + $end 'BoxParameters' + ParentPartID=220 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=220 + StartFaceID=221 + StartEdgeID=227 + StartVertexID=239 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Ellipse' + ID=247 + ReferenceCoordSystemID=1 + $begin 'EllipseParameters' + KernelVersion=23 + XCenter='2mm' + YCenter='-1.5mm' + ZCenter='2mm' + MajRadius='1mm' + Ratio='1.5' + WhichAxis='Z' + NumSegments='0' + $end 'EllipseParameters' + ParentPartID=248 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=248 + StartFaceID=-1 + StartEdgeID=249 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=251 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=248 + $end 'LocalOperationParameters' + ParentPartID=248 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=252 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=252 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=4.71903167416204 + FcUVMid(2, -1.5, 2) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=247 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=257 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=258 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=260 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=260 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('90'=261) + EdgeKeyIDMap('72'=262, '73'=263, '74'=264, '75'=265) + VertexKeyIDMap('76'=266, '77'=267, '78'=268, '79'=269) + BodyKeyIDMap('71'=260) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=257 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=259 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=270 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=270 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('96'=271) + EdgeKeyIDMap('93'=272) + VertexKeyIDMap() + BodyKeyIDMap('92'=270) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=273 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=274 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=276 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=276 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('35'=277, '36'=278, '37'=279, '38'=280, '39'=281, '40'=282) + EdgeKeyIDMap('41'=283, '42'=284, '43'=285, '44'=286, '45'=287, '46'=288, '47'=289, '48'=290, '49'=291, '50'=292, '51'=293, '52'=294) + VertexKeyIDMap('53'=295, '54'=296, '55'=297, '56'=298, '57'=299, '58'=300, '59'=301, '60'=302) + BodyKeyIDMap('34'=276) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Cylinder1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=273 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=275 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=303 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=303 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('63'=304, '64'=305, '65'=306) + EdgeKeyIDMap('66'=307, '67'=308) + VertexKeyIDMap() + BodyKeyIDMap('62'=303) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=217 + $begin 'PriorityListParameters' + EntityType='Object' + EntityList(206, 248) + PriorityNumber=2 + PriorityListType='2D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=218 + $begin 'PriorityListParameters' + EntityType='Object' + EntityList(109, 220) + PriorityNumber=2 + PriorityListType='3D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=255 + $begin 'PriorityListParameters' + EntityType='Component' + EntityList(165) + PriorityNumber=1 + PriorityListType='3D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=256 + $begin 'PriorityListParameters' + EntityType='Component' + EntityList(165) + PriorityNumber=1 + PriorityListType='2D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'all_2d_objects' + all_2d_objects(-1, 1) + $end 'all_2d_objects' + $begin 'all_3d_objects' + all_3d_objects(-1, 1) + $end 'all_3d_objects' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'box1_' + box1_(1, 2) + $end 'box1_' + $begin 'cylinder' + cylinder(1) + $end 'cylinder' + $begin 'ellipse' + ellipse(1) + $end 'ellipse' + $begin 'ellipse1_' + ellipse1_(1) + $end 'ellipse1_' + $begin 'global' + global(-1) + $end 'global' + $begin 'icepakdesign' + icepakdesign(1) + $end 'icepakdesign' + $begin 'icepakdesign1_' + icepakdesign1_(1) + $end 'icepakdesign1_' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1, 2) + $end 'rectangle' + $begin 'rectangle1_' + rectangle1_(1) + $end 'rectangle1_' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 108) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 166) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 167) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 205) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 215) + DependencyObject('GeometryBodyOperation', 205) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 219) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 247) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 251) + DependencyObject('GeometryBodyOperation', 247) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 258) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 259) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 274) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 275) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 195] + $end 'AssignedEntities' + GroupByMaterial=true + GroupSheetByMaterial=true + GroupCompByDefID=true + DoNotOrganizeUnderGroup=false + DoNotOrganizeUnderComponent=false + OrganizeLightweight=false + ShowGroup=true + $begin 'LastUserInputs' + $end 'LastUserInputs' + $end 'ModelSetup' + $begin '3DComponent' + $begin 'ComponentDefinition' + ID=165 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '165' + $end '165' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '165' + '0'=1 + $end '165' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'Source1' + ID=0 + BoundType='Source' + IsComponent=false + Objects(74) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'Source1' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '165' + $end '165' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '165' + $end '165' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '165' + $end '165' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=257 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '257' + $end '257' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '257' + $end '257' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '257' + $end '257' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '257' + $end '257' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '257' + $end '257' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=273 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '273' + $end '273' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '273' + $end '273' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '273' + $end '273' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '273' + $end '273' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '273' + $end '273' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $end '3DComponent' + $begin 'BoundarySetup' + $begin 'GlobalBoundData' + $end 'GlobalBoundData' + $begin 'Boundaries' + NextUniqueID=2 + MoveBackwards=false + $begin 'IcepakDesign1_1_Source1' + ID=1 + BoundType='Source' + IsComponent=true + Objects(195) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'IcepakDesign1_1_Source1' + $end 'Boundaries' + $begin 'ProductSpecificData' + $end 'ProductSpecificData' + $end 'BoundarySetup' + $begin 'Monitor' + $begin 'IcepakMonitors' + NextUniqueID=0 + MoveBackwards=false + $end 'IcepakMonitors' + $end 'Monitor' + $begin 'MeshRegion' + $begin 'MeshSetup' + NextUniqueID=1 + MoveBackwards=false + $begin 'MeshRegions' + $begin 'Global' + ID=0 + IsComponent=false + MeshMethod='MesherHD' + UserSpecifiedSettings=false + ComputeGap=true + MeshRegionResolution=3 + MinGapX='1mm' + MinGapY='1mm' + MinGapZ='1mm' + Objects(6) + StairStepSliderMeshing=false + FacetLevel='3' + ProximitySizeFunction=true + CurvatureSizeFunction=true + EnableTransition=false + OptimizePCBMesh=true + Enable2DCutCell=false + EnforceCutCellMeshing=false + Enforce2dot5DCutCell=false + $end 'Global' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'MeshSetup' + $end 'MeshRegion' + $begin 'AnalysisSetup' + $begin 'DesignMeshLink' + ImportMesh=false + $end 'DesignMeshLink' + $begin 'SolveSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'SolveSetups' + $end 'AnalysisSetup' + $begin 'Optimetrics' + $begin 'OptimetricsSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'OptimetricsSetups' + $end 'Optimetrics' + $begin 'Solutions' + $begin 'FieldsSummarySetting' + $end 'FieldsSummarySetting' + $end 'Solutions' + $begin 'FieldsReporter' + $begin 'FieldsCalculator' + Line_Discretization=1000 + $end 'FieldsCalculator' + $begin 'PlotDefaults' + Default_SolutionId=-1 + Default_PlotFolder='Automatic' + $end 'PlotDefaults' + $begin 'FieldsPlotManagerID' + NextUniqueID=0 + MoveBackwards=false + NumQuantityType=0 + NumPlots=0 + $end 'FieldsPlotManagerID' + $begin 'Report3dInGeomWnd' + Report3dNum=0 + $end 'Report3dInGeomWnd' + $begin 'Report2dInGeomWnd' + Report2dNum=0 + $end 'Report2dInGeomWnd' + $begin 'AntennaParametersInGeomWnd' + AntennaParametersNum=0 + $end 'AntennaParametersInGeomWnd' + AntennaParametersPlotTablesOrder() + $end 'FieldsReporter' + $begin 'SolutionManager' + $begin 'Version ID Map' + V=2 + $end 'Version ID Map' + ValidationCacheHeader='' + $end 'SolutionManager' + $begin 'UserDefinedSolutionMgr' + NextUniqueID=1000000 + MoveBackwards=false + $end 'UserDefinedSolutionMgr' + $begin 'DatasetSolutionMgr' + NextUniqueID=2000000 + MoveBackwards=false + $end 'DatasetSolutionMgr' + Notes=$begin_cdata$ $end_cdata$ + $begin 'AnimationSetups' + $end 'AnimationSetups' + CacheHeaderFile='HDR583C1009616987439064.tmp' + $end 'IcepakModel' + $begin 'DataInstances' + DesignEditor='TopLevel' + Refdes('0', 'U1') + $begin 'CompInstances' + $begin 'Compinst' + ID='0' + Status='Status' + CompName='IcepakDesign1' + GatesInUse() + $begin 'Properties' + TextProp('ID', 'SRID', '', '0') + $end 'Properties' + $end 'Compinst' + $end 'CompInstances' + $begin 'Instance' + DesignEditor='IcepakDesign1' + ID='0' + $begin 'IcepakDesignInstance' + DesignInstanceID=1 + $begin 'WindowPosition' + $begin 'EditorWindow' + Circuit(Editor3d(View('View Orientation Gadget'=1, WindowPos(3, -1, -1, -8, -31, 0, 0, 1154, 410), OrientationMatrix(0.0785268545150757, 0.0500493012368679, -0.0154549926519394, 0, -0.0459545068442822, 0.0524593703448772, -0.063611663877964, 0, -0.0251389350742102, 0.0604428015649319, 0.0680068358778954, 0, -0.358919560909271, -0.39542555809021, -5.95154047012329, 1, 0, -2.6081440448761, 3.17571091651917, -1.86155533790588, 1.42088794708252, -0.604207992553711, 12.6383638381958), Drawings[14: 'Region', 'Box1', 'Box1_1', 'Rectangle1', 'Rectangle2', 'Box2', 'Ellipse1', 'IcepakDesign1_1', 'Rectangle1_1', 'Ellipse1_1', 'all_2d_objects1', 'Box1_2', 'Cylinder1', 'all_3d_objects1'], 'View Data'('Render Mode'=1, 'Show Ruler'=1, 'Coordinate Systems View Mode'=1, 'CS Triad View Mode'=0, 'Render Facets'=1, GridVisible=2, GridAutoAdjust=1, GridAutoExtents=1, GridType='Rect', GridStyle='Line', NumPixels=30, dXForGrid=1, dYForGrid=1, dZForGrid=1, dRForGrid=1, dThetaForGrid=10), ClipPlanes(ClipPlaneOptions(DisableWhenDrawingNewPlane=true, ForceOpqaueForUnclipped=false, ShowClipped=false, Transparency=0, HandleColor=16776960))))) + $end 'EditorWindow' + $end 'WindowPosition' + $begin 'ReportSetup' + $begin 'ReportManager' + $begin 'Reports' + $end 'Reports' + NextUniqueID=0 + MoveBackwards=false + $begin 'NextVersID' + NextUniqueID=0 + MoveBackwards=false + $end 'NextVersID' + $end 'ReportManager' + $begin 'Reports' + $end 'Reports' + $begin 'ReportsWindowInfoList' + $end 'ReportsWindowInfoList' + $end 'ReportSetup' + $begin 'Properties' + $end 'Properties' + $begin 'UserDefinedDocument' + $begin 'Data' + $end 'Data' + $end 'UserDefinedDocument' + $end 'IcepakDesignInstance' + $end 'Instance' + $begin 'SODInfo' + $end 'SODInfo' + $end 'DataInstances' + $begin 'WBSystemIDToDesignInstanceIDMap' + $end 'WBSystemIDToDesignInstanceIDMap' + $begin 'WBSysIDSysDetails' + $end 'WBSysIDSysDetails' + $begin 'WBConnIDConnDetails' + $end 'WBConnIDConnDetails' + $begin 'WBMaterialGuidDetails' + WBMaterialGuidMap() + $end 'WBMaterialGuidDetails' + $begin 'MinervaProjectSettingsBlk' + MinervaRemoteFilePath='' + FolderContainerString='' + $end 'MinervaProjectSettingsBlk' +$end 'AnsoftProject' +$begin 'AllReferencedFilesForProject' +$begin 'Design_0.setup/UdmDefFiles' +NumFiles= 3 +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/2d_3d_comp165.a3dcomp +BIN000000029955 +$begin 'AnsoftComponentChkSum' + ChecksumString='73c5bab3e52d2b12cbc47b9b0fc6753f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='IcepakDesign1' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='11:14:15 AM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryL42fHj4T/s6\ +eCW+Ifxj8XQ+EPC51aw0GzmTSte8R61rWuamJ5bXRvDXhPwnpd/q3inVvsNnqV7LbadY3U1vp2jX+pX\ +CRafYXlzB/Pf8df+Cof7TXxR8S2938Gtbv8A9mTwRpH9pW+naTpmn/C/4keOfGMN1fvJYa78Qb/x98O\ +9Y0zwvfx6RFpsSaF4fF1Bp95Jqbz+KPEtvc6d/ZXFi8fhsGl7WV5vaMdZW72ukl5tq9na7R52OzTCZe\ +l7ebdSW0I2crd7XSS821eztdqx/TbRX8vnhH/gqn+294Ls9A0/Urz4J/GWw0nVrGbWrv4g+BNa8GfET\ +xfoU2upe65p1x44+GPiSz8O+HNWTRp7y00u9tfAE0NutpZNqFhqdwt3dXf2l8Nv+C0vgrUJDY/Gr9nL\ +4n/Dq5PiS2sT4i+G/iTwh8Z/AVh4TuLXSJJvFuqXF5P4X8VSz2l1da0LvStK8HatevBoyPpY1S6u47J\ +MaWb4Grb977NvpJNfjqvx9NDno59lla37/wBi30mnHt11jpe2/e10rn7Y0V8JeCv+Cm37Bnjm61ixtv\ +2mfh/4LvdDt9Ku7qz+NC+IP2frq8tdak1WGxudAt/jponh1/FNuJtF1BLh9MF2tmyxLdmA3NsJfu2vQ\ +hVp1VenUjUXeLTX4Hq061KsuajVjVj3jJSX3psKKKKs0CisHxV4n0LwT4Y8R+M/FGo2+j+GfCOg6x4n\ +8RavdsVtdK0LQNPuNV1fUblgDtt4NPtLiVz2WI1/Fh+z5+3T+2r4c/aW+A//AAUa+Mfxb+Kw/Yf/AGq\ +v2vfi78E4PhN4h+IPjC9+GPw+8HakLLSfDGqReEbzWH0fTtO0qbWNXezltLcXJn+DWstIW+0nzwD+22\ +ivz/8A22v+Ckv7Pf7Afij4AeHPj3YfEUW37Q2veJdE0DxT4N8P6Jr3h3wZB4Q1HwHYeINf8ereeKLPU\ +LbRYI/iDpVxjSNP1i9kg0688uzedLeC58i+HH/BYf8AZn8c/tB+B/2bfFHw4/af+A/jj4pzwW/wo1T9\ +oP4JX/wv8MfEyW/lkt9EbwpNqGtTaibbUbmPybGe+02ygnuJY7bzVuJEiYA/V2ivyg+Ln/BYT9nb4bf\ +F34m/BXwX8I/2rv2lvFnwUuGsvjJe/sy/BGX4meGvhdfwtdJfWXjHWrnxJpy2L2s1hqEVzJEk9vFPpt\ +1bmY3FrcRRS6j/AMFkf2PLb4f/ALMXxZ0h/iV4q+F/7UPxUufgxpHjrQvDOgwaL8I/iHZ3nh62utC+N\ +0HiLxdp974TlW28QNeqdPtNX83T9EvL6AS25s3vAD9WqK+Lvj3+3V8JP2fP2hv2av2YPEHh34jeMviv\ ++1FrV5pngvTfh7o/hvVbLwppen6hptje+MPiFNrvi3TZtJ8KRxXeq3TTWFvqdx9l8Kao4tS8EUc/xl4\ +j/wCC537KWnXvxAvvBXwj/a++NHws+Feu3/h/4g/tCfB74Dv4q+BHhW+0rym1ObV/HN74qsmtbCGGaK\ +Xz2s/Lmt5o7m2M1vNDLIAfs9RXm3we+L3w7+Pfwx8FfGP4T+JbTxf8O/iDokHiDwt4gs47iCO+sJnkg\ +kjntLyKOfT9QgvILm2urWeOOe1ubSa3njSWJ0BQB6TRRRQAUUUUAFFFfP8A+0N+098Gv2YfCbeJvir4\ +ssbDUr+x1W48FfD/AE+90u4+JHxP1DSH0yC70P4c+Er3UbeXxHfR3Wt6Kt7cb4dM0aDU11LXtQ0rSIr\ +nUIJnONOMpzkoQjq23ZL5kVKkKUJVKk1CEFdtuyS82fQFflJ+1v8A8FQ/BPwd1LXvhl8B9M0n4vfGDQ\ +tW1vwz4t1DVpfEGk/C34W6tYWLWxk1PXrTSCnxV8S2XiWdLe88NaBf24gl8Na3pWv+JfCer21nbXv5h\ +/tWf8FB/jF+1Bb6r4K0S1vvgt8C9TsdV0LWfh7Y6pouueLPitoN/qX2iJviv4mh0MN4asZtHtdMtb3w\ +p4bv5dNkW51vTtb8ReMtD1WOxsvg60tLWwtbaxsba3s7Kyt4bSzs7SGO3tbS1t41ht7a2t4VCQW8cSI\ +qIoCqqBVAAAr53HZ3vTwXzqNf+kp/m/Oy2Z8lmXEnxUcv+dVr/wBIi/u5pLvaO0jqPHPjHxt8VfG118\ +Tfix4v1b4lfEq80m08Pz+OPEtn4ftdWi8O2BRrHw1pGn+GNE07TfDHhqOZDcHTtJsLGymv7q71W5gm1\ +a/1C+uufoor5yUpTk5Sk5Slq23dt923ufIznOpKU6knOcndtttt923q2FFFFIkKxPCWgWfw710+KPhf\ +e+I/hF4lfSb7QbjxD8G/F3ir4Qa5f6HqV5peoXujarq3w01nSp9W0p7/AETSZ/s9zJLCs1hHKiK67q2\ +6Kabi04txa6rRlRlKDUoScZLqnZ/ej6p8Hft7/tz+ALzwu+i/tF3PjLQfDEP9nJ4J+Mvw88C+PPD+s6\ +LDoV7o2n2niDxT4e0vw/421zVrWaXTrxdVu/F8+o3t1pQk1i41Q3N3532J4R/4LO/GDQ7PQLP4l/s1e\ +C/H8sOrWMPi7xb8KfibqHgXUbrQ73XUW+1Hwl8IvH3hvVLVNV07w9cnbZX/AMQUh1W40l5Rf6Ut6lpZ\ +/klRXbSzLHUvhxMmu0ve/wDSr9um3Tc9GjnGZULcmLlJLpO010095N9LaWtra1z7i/4Kx/8ABX34XfE\ +L9hTx58Ifhbo/xR+HXxc+OniLTfhhL4Z+InhuwstRt/hXOLbVvHXi618TeA/EGv8Ah660u9tYD4cl04\ +6z/birr81zLpMVi1reT/DOrfsEf8FKfjb+xlr/AOzl4C/bq/4J7/tK/s4/s5eH4PGsPwU+AXi7wl458\ +U6Je6HbeLPEvh200zxF4T/Zxg1S28Y6vdW/iyKyk1PX7X+1ri6vY7q8eFrt1krB1zwr4X8TfZf+Ek8N\ +6B4h+xef9i/tzR9O1b7J9p8n7T9l+328n2fzPs8G/Zjf5Cbs7Vx6NPP60YxVShGo1e7Tcb9raO3nvfy\ +PXpcU14xgq2FjVkr8zUnG/ay5WlbrvfyO8+K37TFp+2Yn/BuF4+8Q3MOu+KrH9pbUvhH8W4Lxlu5rvx\ +n4E+MH7HvhnWrnWUcsr3Gs6IukazIn3fK8VICq5Kj9Iv8AgtTGift//wDBC6dEVZpP2u7qGSVQBI8Mf\ +xo/ZGMcTOOWjBuJ8A8Dzm/vGvze0H46ftZfA/w9pln+zf8AtF/EXwNJouj6T4N06x+IPj/xD8VPh14S\ ++HmmLYxmw8P/AA1+LcPiXQ9NksrHSNMisPsNlpNzb21s9nBqtnYTXdtdafwp/wCC7v8AwUKGkfD7wNA\ +f2a/i94k8SeOvi74U0r4j/ET4YeMfDk/jHR/h/EfEaeKZpfhj8RNJ0pLOSx1S2sLSOx8P221NIUXUtz\ +dm4vJPVw+a0K8HNwlTUb3vZpJJyvo77Jva9k9D3MJnmGxUJT5JUlC/NezUUouTbad7csZPa9os9K/bT\ +0z9lX9nj9tf9oX4h+Cf2jv27v8AgmN+0F4j1a+8Xar4lk+EF98Sf2dv2lPEGq3VzrEmpfD2z+HPiG8u\ +PEOm6rrV1Le3MXiKWHTra+1aRDY2V3Dc2UP1PB4R/au/4Kk/8ERviTL+1V4En039ofQNT1/4i/A3VZv\ +Ca+D/ABB8Q4/hXp2na/4V8XDwpBawQ6RrPiC2u/H/AIaga3tbO1uba8i1C3hSG5SVvBdQ/wCDh/8AaF\ +1T4PaJ8X9N/Zu+HPw98N2HhbVrnWtY1TUbv4tWXjzxvZ6np+g6PoOh6RB8RvBF/wDDHw/e65Hr0Nzfz\ +R+MLrTVgtpItN1aFppU6T9u/wD4KvfE/wCKnwP8GN+zt+0r8J/2atR+LEfwt0PTfhtdeGPGFn+0HfeI\ +PGOiaRpvxo8PfEf4hfGfwtofhH4DfCjQR8QEk0vxnam8j8Qah4Cuv7F8R2H2DWLa37o4mhNuMaq5oyc\ +bN2fMt1ra7XWx6UMXhqkpRhWi5Rk4NN2fNH4opO12tLpXtddzT/4Ixa78Q/8Agob+1942/wCCiPxpsJ\ +HX9nz4B/Cv9l74ZyXbtdwz/EWTwVaH4qeK9Ouig8m8lmu/F1/LBx5MHxpSAtM0JmPwr8T/ABB8C/2Kv\ +Hf7QGo/sZftMft6/wDBPr486J4n16/0T9jD4x/A1/H/AMP/AIzeL7fzTo+n+BT4R1XWfDj+C7mZI7XT\ +dW8RT6rMtmRLbG7tHiL/ALAaveW3/BHaP/gn9+w18E/ip8Avhh8N/j9e/tTeIfjT+0z+1d4X1DWNN0/\ +xj8OfBvgnxdpXiK4stD+NvgPTtLGr6lq1v4dgt7vVnMUI0WCGa5ubeQaj7x8Gv21P2svjj+zL4o+Oem\ +3f7JXwu8J/Cv4z/Hjwn49/aH+I2kfFy4+Efj34J/Ciygm8JfHH4J/DnTfFdvc6x4d8QahPdW7tf+N4o\ +bFNDnns5dZllSyh2Og+4P2FviN8d/i5+yT8DfiR+0z4KX4e/HDxZ4QfUfHXhb+yrnQZbWdNZ1W00PU7\ +rQLx2l0C/wBS8MW2ianc2EmxrKfWJLUxQmLykKZ+wn+0Z4i/a2/ZI+CH7RfizwMfhz4i+KPha61jVPC\ +SyXctpaT6fr+saAmqaRJfIJm8P6nBpEWqab5pkf7BrNtumnP75ygD61ooooAKK+f/ANob9p74Nfsw+E\ +28TfFXxZY2GpX9jqtx4K+H+n3ul3HxI+J+oaQ+mQXeh/Dnwle6jby+I76O61vRVvbjfDpmjQamupa9q\ +GlaRFc6hB/OZ+1Z+3Z8Zf2qbjVfDP2m++FnwJkvtVXSfhn4b1LVNH8WeMPD+pab/YcmnfH7xPoPieW1\ +8b2NzpUmqtc+FbBIvC0S+KrrTdWPjRtN0nXo+DGZhh8Gmpvnq9ILf59l5v5JnmZhm2Fy+LVSXtKz2px\ ++LXq+kV5vfomfpN+1N/wVh8H+E/tngr9k8+FPi94wX+xbiX4xXklr4v8A2d9Ht5/MvdX0nSrzwh43sN\ +Q+KfitLRdNtmTSbmz0Gwl1u5Nz4jl1rQNQ8K3H4TeJ/FHjDx34l1Pxr8Q/Gfiv4heNNa+XVPFXjPW7r\ +WtUktxf6nq0ekaVDKy2nhPwpBq2t65c2Og6NbadoOlya1djS9Msop3jOLRXyWLx2Ixkr1ZWgtorSK/z\ +fm/lY+Dx+aYrMJXrT5aa2hHSK9f5n5v5W2CiiiuM84KKKKACiiigAooooAKKKKACiiigDzT4s+BNV+J\ +Hg+bwlpviWLwzBqF/ZPrcs2lXurQ6zodu7y3vh24j03xBplxb2d44t0uJILyORrdZYBgTFl4W/wDgrr\ +d5B8P7218U+FfDvij4X32ujwZe+Fvh9daZ4XsdB8RaDHoepaPdeFb3xxdSXE5RXkW5j1GBQ2wG3Yq7y\ +/QtFbQr1YRUIySjFt2tF6yXK73Wt1o76W0Oiniq9KEYQmlGLk0uWL1lHlle6d7x91p3VtD5Tj/ZpudM\ +sPhjomieLtDuvDnww028OmeHvG3grUPE+lX3i3UdTu9SvPGN3a6R460hJb5Gu5UtIJ1uIrQTSuhaWQO\ +na+P/AIR+J/iVZP4e8UfESKXwVq8XhZ/FHhex8HWVp9pvvDt9aaneSeGtZOrvdaFp99qFlC8sF62ryw\ +ovlwXKgsx7n4g/E3wd8MdKj1Txdqgsxd/ak0vT7eJ7vVNXubS2a4ktrC0iHJ/1SGaVorWKS7hWeeLzU\ +LfmL8Xf2iPGPxU8/S1z4b8HSfYH/wCEZs7hLprm5st8v2jVdXFpDLqIN3JvWHbHap9ltm8hriH7S+9O\ +piq04yUleDbUnGOjcuZtO1+a+t1rfqjqo1sdiKkJqavTbam4Q91uXM5J8vxc2t1rfqjvPjV8TPB/hf4\ +jeAvE/wCzzqieDvE3gbT/AIkaXqXij4bx6h4FlkfxtoTeDJ4NP8T+Eb3Tbu98rSpNbDtE82nXdtrH2d\ +2vLO6vLZv6gv2ZP+CYXxc+I37C/wCyr4If9q7wvrX7PuswfDX9qGL4AfFz4BeLfiD4Qub3xz8MvCfim\ +P4W+L9S8JftL+E7rxf8LdL+I2oa74istJb7JZS6hqUaahbXttaxxN/GDX+mX+wf/wAmO/sZ/wDZqX7O\ +/wD6qHwfX0GVRdOXsudyjCDS7fHfb1k9dXra9rH1WRxlTm6PO5Qp02lf/HzbLzlLV3etr2St7n8M9D8\ +YeGfAvh3w/wCPdZ8Ca/4n0e0msLzUvhn8PtU+FfgVrG3vblNBsvDvgDWfH/ii48OWlp4fGl2jxtrt6k\ +s1lLcQraQTR2NsV3VFe2fSBXgH7T3xa1z4J/BvWPHPhjTtJ1HxLceLvhP8PPDw15Ly40PStc+Mnxb8D\ +fB/SfE+tabp93bXGvaTpF/47t9VudLgvdNm1WHRn02LVdKe6XUbX3+viz/goB/ybgn/AGcP+xb/AOtn\ +fAGubGTlSwmKqQfLOnTnJPs1FtPXTRnJj6k6OBxtWnLlqUqVSUX2lGDaeumjXU/n6+Kf7Lf7aV54l1r\ +x341ntv2l/EesanJpcvizTfijn4galpa3+t6xY3zeDvirBoWgfC/wIt/qWs3MPhXw74hu9M8P3viuS1\ +0TTpbKS8vo/lvxLp/inwPFqdz8QPh78Tfh9p+hXLWPiDxD4y+HPjLRfA2iXq3i6Z5N38TZdGbwxc20m\ +qyQ2tpe2usXGn6jPdW66bd3gurZpv6TKK/KVmVdtuqlVb3bvd97vX8j8PWbYiUnKtFVpPdttSfe71/L\ +7z+aDS9V0vW7GDVNF1Kw1fTbrzfs2o6XeW9/Y3HkzSW83kXdpI8cuy4ilRtrHa8TKcMpAv1+8Xjj9mn\ +9nv4k6nrWv+N/gr8MvEHirxBbJban43ufBuhQeP2MGmw6RY31j4/srKLWtI1m00+2s47C/tL6C90/7D\ +bvZXEEkELJ83a//wAE5PgvfXkU3hPxz8a/hxpy2yRz6HoHjXR/GdndXolmaTVZdU+NfhPxXqsFzJA9t\ +C1vb6jDp6JYpJFZR3Mt3Pc7xzGk/jg4v5Nfo/wOmGaUJfHCUH8mv8/wPyuor7G8Rf8ABP39oDRvsf8A\ +wifxB+DvxG+0/aPt/wDwkWl+Nfgv/Y3k+R9l+x/2a3j7/hJftHm3Pmb/AOyfsf2FNv277U32P5+8WfB\ +D9oPwD50ni74F/ECTT4dTk0aHX/h9aWPxb0vV76P7S0d5o+h/Di81DxNB4duILO5mt7/V/DukIsZhh1\ +CPT9QuYLF+mGJoT+Gqrvvo/udjrhisPU+CtFt9G7P7nZnnVFYkniPR7XX28I6pdP4e8aR48/wN4rs73\ +wj47s91kNTi+3+CPE1taarp/maU0d5F59nH5tnPHdxb7aWOVtut001dO6ZvvZrVMKKKKACiiigAoooo\ +AKKK4H4g/E3wd8MdKj1Txdqgsxd/ak0vT7eJ7vVNXubS2a4ktrC0iHJ/1SGaVorWKS7hWeeLzULCTbs\ +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\ +AKKKKACiiigAooooA//Z' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'Boundaries' + $begin 'Source1' + ID=0 + BoundType='Source' + IsComponent=false + Objects(74) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'Source1' + $end 'Boundaries' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=1 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=85 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=33 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='0mm' + YPosition='0mm' + ZPosition='0mm' + XSize='1mm' + YSize='1mm' + ZSize='1mm' + $end 'BoxParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=34 + StartFaceID=35 + StartEdgeID=41 + StartVertexID=53 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=73 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='1mm' + YStart='1mm' + ZStart='1mm' + Width='-1mm' + Height='-1mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=74 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=74 + StartFaceID=-1 + StartEdgeID=75 + StartVertexID=79 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=83 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=74 + $end 'LocalOperationParameters' + ParentPartID=74 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=84 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=84 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1 + FcUVMid(0.5, 0.5, 1) + $begin 'FcTolVts' + TolVt(1, 1, 1, 4.9999999999999998e-07) + TolVt(0, 1, 1, 4.9999999999999998e-07) + TolVt(0, 0, 1, 4.9999999999999998e-07) + TolVt(1, 0, 1, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=73 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 73) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 83) + DependencyObject('GeometryBodyOperation', 73) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 74] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 74, 34] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/all_2d_objects257.a3dcomp +BIN000000023692 +$begin 'AnsoftComponentChkSum' + ChecksumString='48b1fbe13ec15836fb483ca4bedb821f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='all_2d_objects' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='4:57:29 PM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +8Fh/wBmfxz+0H4H/Zt8UfDj9p/4D+OPinPBb/CjVP2g/glf/C/wx8TJb+WS30RvCk2oa1NqJttRuY/J\ +sZ77TbKCe4ljtvNW4kSJgD9XaK/KD4uf8FhP2dvht8Xfib8FfBfwj/au/aW8WfBS4ay+Ml7+zL8EZfi\ +Z4a+F1/C10l9ZeMdaufEmnLYvazWGoRXMkST28U+m3VuZjcWtxFFLqP8AwWR/Y8tvh/8AsxfFnSH+JX\ +ir4X/tQ/FS5+DGkeOtC8M6DBovwj+IdneeHra60L43QeIvF2n3vhOVbbxA16p0+01fzdP0S8voBLbmz\ +e8AP1aor4u+Pf7dXwk/Z8/aG/Zq/Zg8QeHfiN4y+K/7UWtXmmeC9N+Huj+G9VsvCml6fqGm2N74w+IU\ +2u+LdNm0nwpHFd6rdNNYW+p3H2Xwpqji1LwRRz/GXiP/AILnfspade/EC+8FfCP9r740fCz4V67f+H/\ +iD+0J8HvgO/ir4EeFb7SvKbU5tX8c3viqya1sIYZopfPaz8ua3mjubYzW80MsgB+z1FebfB74vfDv49\ +/DHwV8Y/hP4ltPF/w7+IOiQeIPC3iCzjuII76wmeSCSOe0vIo59P1CC8guba6tZ4457W5tJreeNJYnQ\ +FAHpNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB+If/AAXq+PmvfDr9jay/Z/8Ah0Z7z4v/\ +ALZvj7QfgH4M0XT5AurX2gape2Vx43NpGWAnt7u2l0bw/MvPHj9OP4l/I34yf8EkP+CzR/Yyk/Zy8Vf\ +tCfsm+Of2cfgx4fvPGvhX4KeEdJaPxTNe+CrbXPEtraeEfEQ/ZZ03VL3xjeXV9rEUcl3r8H2+41yWO/\ +vDDczuf7LqKAP4nfit+0xaftmJ/wAG4Xj7xDcw674qsf2ltS+EfxbgvGW7mu/GfgT4wfse+GdaudZRy\ +yvcazoi6RrMifd8rxUgKrkqP0i/4LUxon7f/wDwQunRFWaT9ru6hklUASPDH8aP2RjHEzjlowbifAPA\ +85v7xr93fjndfG+z8DiX4BTfBzT/ABl/bukf2vr/AMc7jxd/wg/hbwQksk3izxKNH8FiG68U67a6fEG\ +tNMl1TQrS4Z2a51qySLEv40/DL/gqr8ffjp/wzz8LPhZ4V+Ch+K/x7/aR/bB+DPhP4zaxoPj6/wDgP4\ +3+H/7JHgmw8c3Xxf8AA/gaz8cW2sNpHiS21vTrGzt5PE1yun3em3xkub3YIkAPz0/bT0z9lX9nj9tf9\ +oX4h+Cf2jv27v8AgmN+0F4j1a+8Xar4lk+EF98Sf2dv2lPEGq3VzrEmpfD2z+HPiG8uPEOm6rrV1Le3\ +MXiKWHTra+1aRDY2V3Dc2UP1PB4R/au/4Kk/8ERviTL+1V4En039ofQNT1/4i/A3VZvCa+D/ABB8Q4/\ +hXp2na/4V8XDwpBawQ6RrPiC2u/H/AIaga3tbO1uba8i1C3hSG5SVvou7/wCClH7Rfir/AIJ7eBv+Ch\ +/hG0/Za+F3wwi+C/jvxb480H4qy/EzxV4s8YfGrwZ488QfD7TPhD8NdM0DV9CtPD+ka7rnhi6isdZvt\ +U1m9gutZtrZ9AuIIJr6Ty//AIKZftQft0f8M1/CXxp8KvF3hv8AZe8PftD6N8B4PCejaf4L8U+Jfive\ +eI/jDo+kaV8R/h78YfjP410Cy8B/svaHpDfEK1fTdQubg65rGoeECdP1HSRFf2yAHgP/AARi134h/wD\ +BQ39r7xt/wUR+NNhI6/s+fAP4V/svfDOS7druGf4iyeCrQ/FTxXp10UHk3ks134uv5YOPJg+NKQFpmh\ +Mx+Ffif4g+Bf7FXjv9oDUf2Mv2mP29f+CfXx50TxPr1/on7GHxj+Br+P8A4f8Axm8X2/mnR9P8Cnwjq\ +us+HH8F3MyR2um6t4in1WZbMiW2N3aPEX/YDV7y2/4I7R/8E/v2Gvgn8VPgF8MPhv8AH69/am8Q/Gn9\ +pn9q7wvqGsabp/jH4c+DfBPi7SvEVxZaH8bfAenaWNX1LVrfw7Bb3erOYoRosEM1zc28g1H3j4Nftqf\ +tZfHH9mXxR8c9Nu/2Svhd4T+Ffxn+PHhPx7+0P8RtI+Llx8I/HvwT+FFlBN4S+OPwT+HOm+K7e51jw7\ +4g1Ce6t3a/8bxQ2KaHPPZy6zLKllCAfcH7C3xG+O/xc/ZJ+BvxI/aZ8FL8Pfjh4s8IPqPjrwt/ZVzoM\ +trOms6raaHqd1oF47S6Bf6l4YttE1O5sJNjWU+sSWpihMXlIUz9hP8AaM8RftbfskfBD9ovxZ4GPw58\ +RfFHwtdaxqnhJZLuW0tJ9P1/WNATVNIkvkEzeH9Tg0iLVNN80yP9g1m23TTn985QB9a0UUUAFFFFABR\ +RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB8kfts/s3+M/2sPgZf/BHwn8WrT4R6d4n8SeH5/iDeX/\ +gzX/Glh48+HemTT3niD4W6paeFPid4Q1TS9C1y4TTINTudP1y1uZNMivNPUqt+80Xzl4j/AOCfnxA17\ +TP2ZNf0f4x/Bn4V/GD9j3xD8RV+Amv/AAd/Zh1nwn8H/Dvw2+KXw3tPh34r8C6z8Gdf/aI1m51PUnhi\ +uLqLVbXxTp8aSfZ1fS5XiuJ7v9RKKAPxetv+CSeq+EfDf7IXw++H/wAb/h3rPwq/Y/8ACmuP4Q+F/wC\ +0F+z94m+L3gzxD8bPFPi7W/Fmu/HfWtH8EftF+B7e98Rwy63d2+iafqMOqWmiLe3lxbvLd3SzwfQH7S\ +37EPxg/ay0Kf4Y/GH9qW0u/gB41tPg1cfF74P+HfgR4f0T+1fEfwt8QaH4v125+E3j5vHE+sfDnwz4j\ +8UeH7Ce70/X5vHF3YQR/ZdP1eIM8j/pDRQB8cfHH9ka0+Nn7U37HP7SN/4zt9Msf2ULf9pG0vPh1d+E\ +ItftPiba/tDfDLTfhvcW1zrs3iC3Tw1b6ZFp73Lo+naouorcm2YWYBmb4a8Vf8EmfHV74RT4J+E/2l/\ +BcX7KWkftD+Jvjx4T/Zi+JX7P3i3x54A03S9Z8rU9B+C3iC98JftMeFLvxV8IdC8aS6prmm6OxtbKS8\ +vIY9Qt723tY4m/ayigDhfhnofjDwz4F8O+H/Hus+BNf8T6PaTWF5qXwz+H2qfCvwK1jb3tymg2Xh3wB\ +rPj/wAUXHhy0tPD40u0eNtdvUlmspbiFbSCaOxtiu6ooAKKKKACiiigAooooAKKKKACiiigAor+Cf8A\ +4Li6N+2Z/wAFLv8Agofomh/sJfFf4g+GvgF+x7qOhfCzxf4t1z4yeIPhf8J/hj+3d8AvE3xI8d618UP\ +BvgbQ9dn14fEXSNI+I/g/wvY+NNJ8MHUE1GwuYLS+XQraLVZP1a/Z9/bt/bz/AGMtF0GD9qCPVv25Pg\ +Dp/h+ysdQl+F/h2Txd+2j8MNVPhyw0nw7olrqjp4d079qXwVp+peGrO01PxFqOl6J4117UPife+K9Sj\ +03S9Bk0i49TiyPCnDnD3A2eYDjLC8TV+KqOKqY7C4OKnVySpQxHsKNLGxVWVWp9aUatWM6dBRpU6anU\ +/dVqNWficSZzLhDO62R8RZbXy/E4bkVZ8qqSwzqU6VWCxNGDdalJxqr2kPZynh5RnHExoyjJR/p+or5\ +m/Zi/bK/Zc/bM8J3njT9mL42+Cfi7o+lmMa/ZaBe3Nj4t8KC51rxLoGmP408A+ILWz13wVFf6j4O8TH\ +S31bTbNNVttIkvdNa6silw30zXjUMRQxVGniMNWhiKFVXhOnJThJd4yi3GS802j1MNicNjKFLFYPEQx\ +WGrrmhUpzjUpzj3jOLcZLzTaCiiitTcKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA\ +K/MX/gqt+2L42/ZT+AGheHPgPeaMf2s/2k/HWkfBP9m2w1bS7fxPaaBr2rEX/jr4w+JPCsdw95cfD/w\ +Z4Et9W1TUtTi0zWrHS7+50X+2dMutNu5on+3v2gPiqnwJ+A3xt+N8miDxLH8G/hF8SfirJ4cOp/2INf\ +T4eeDda8XNoh1n+z7v+yBdro5g+1fZLr7P5/m/Z5tnlt/C3+yV+3F+09+338eNV+N/7Q/wy8ZfHbxN8\ +Jfh/wCHPhF+z38QdN0fwr4I+Cfwo1H+yJLT41+LNZnutXs9P0H4neNZpvh1f+Jr7wxoWta+unyz2ek6\ +Np3haKx8Pp8bxVn8ME6OR4eVWnmWawk41IJpUaSdp1HUunGclzRpOF5Qn+8lyRim/wBk4D4KxeE4L4t\ +8dMzweAzDhHwzqUoLBYyvQ5s0zevFLAYT6rWfs62DoV6uGxWY08Q6ccXg41MFhI4rE1vYr9XPgl8HPB\ +vwA+FnhD4Q+AV1Y+F/B1leQWl1r+qTazruq6hq2q3+v+Ide1rUZVUXGraj4i1bVb65EMVvaRzai8Vla\ +2lokNtF6pXjn/CI/FzxB/pPiL4sf8IT/wAt7PRvhL4U8M/6F9r/AHlxpfiDxN8U9H8Rf8Jh9k2QRWl/\ +YaT4X8//AEm4utO/0i3ttPP+FT63/wAfv/C7vjH/AMJH/wAev/CSfbvh9/yBP9b/AGH/AMIT/wAK7/4\ +RX/j/AP3/APav/CP/APCQf8un9sf2b/oVfIwp06cI04WhCCUYpKySSskklZJLRW7H8Z5pmWYZ3meY5z\ +nGYVMzzbN69bFYrE1pzq1sRicRUlVr161SV5VKtWrOVSpOTcpTk5Nts5n4n/CaLT9buPj98JfiD8Rv2\ +cfjx4Psb/Xf+FwfAfTLm88XeMbHR7bw5q8Pg34peAND0i7f9ofwFLqXw88BPceFLu1urnVYfCVvotjL\ +Db3lzbXXjf8AwS8/4K//APBRCD9r2/8ADn7f3w1+LFr+zX8bIPD9hr3xZ+IXwP8AiX8OfDP7P/jjwF8\ +K9I8GaZ8UVuLTw1faV4E8BeMrzwRpNz450uWXSvBvh7xF40vfGmn3fhfR7fxJb6z9Ff8ACCfFLSv9I8\ +P/ABz1nWbx/wBzLa/FPwF4C8S+H47Vvne4s7D4ZaV4Kv4tZEscKxzTarcWiwS3CSafLNJb3Nof8LM8Q\ +eFvm+LXgf8A4RHTW/ef8Jn4O1q9+Ivw+02FudninV/+EZ0nVfCHkwW+pXd9qWoaHD4Y0+ytopbvxHHc\ +z/Y488PTr4TG0MXgMXPCqnU9pUpQbVKvLZurTdoybi5RcopTaldy5owcfLwtLE4DMMPj8tx1TBqlV9r\ +VoU5NUcTPZutSdoylKDnBzilNqXM5OUKbh/U7oOvaH4q0PRvE/hjWdJ8R+GvEek6dr3h7xDoOo2esaH\ +r2h6xZw6hpOs6Nq2nzSW+qaTdWFxbz21zBJJDPDOksTsjKx1q/On/gmh8OdS8O/AvUPitf6pr/APZ37\ +QniW4+KXw/8HXHiPWr3wh4M+FGqQiTwNfeE/Cz6/NpPh288ZfadZ+IusS2ulaNrMuofGB9L8TRXepaG\ +tyf0Wr9ew9WVahRrTp+ylVipON72ur26fkfumFrTr4ahXqUvYzrQjJwvflur2vp+XqFFFFbHQFFFFAB\ +RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB+Rf/AAVl/aK0Hwz8K2/ZQW48TWF3+0v4Z1/w58WvH/\ +hew0rW9P8Agj+z9fwXGneNdc+IEM+nag3hKz8Z6Tb+KPCei6xe2lpp2np/wkniUavbzeEGtbr8+vBHg\ +jwl8N/CWgeBfAmgad4X8I+F9Oh0rQtC0qEw2dhZwlm2ruZnuLiSZ5ZZ55WknuJ55J55JJpJJG9a+Nni\ +/wD4WX+1F+0b47j1H+2tF0jxlpPwQ8C6r9k/s37P4R+CeiQ6P4u8MfYWtoJZv7M/aT1z9omP7beQtdX\ +v2rfa3d3oKaGyfNf/AAqz/hDf+Jh8Hrz/AIQ37L+//wCFb/aPJ+Eev+Xz/Zf/AAj/APZ11/wrTzfO1O\ +T7f4WisN2p6r/a2uad4l8j+z5/zbO8SsXmNZ6Wofu4vTaLd9V05nJrV7rY/L+I87xuPr1MteNqvK8FW\ +nKlQ9pJ0FWcY06ldU1JwVWooRi6qXPKEYRbUYpL2OivNfD/AMSLW61e08I+M9N/4V/48vvtC6T4c1jW\ +NIvLbxnHp9rNPquq/DfV7S5H/CXaNB9jvZJYpLew1yytFtrzWtD0iLULEXHpVeQ01ufMNNbhXjnj7/i\ +uvEGnfCW0/eabH/wj/jH4r+Z+5hPw+mvde/sDwsnnbo9Y/wCEl8VeEp9P1Kxe2urKfwxpniO01CWxub\ +7RvtvfeMfFWn+CfDGteKdThvLu20ezaeLTNLjguNa1zUJXS20nw54esri4iXU/EuparPZWGm2YkV7y/\ +wBRt7WImSZAcb4d+FdQ8N6Lc3niOazvPHXi+8tvFXxEv9LknbRbvxjLoOi6FdQ+HoZ7eFrbw1ZaVoOk\ +aZpqyQrdPYaJbz6lJd6pNfX1zS0977vX/gfnYa0XN93r/wAD87HvfwT+Mfjn9mzxQ/iLwS2v+KvAGqX\ +lzP49+CM/iO6k0HVLXUdRu9X1XxH8ItO8Q6sulfDP4oLrOp61qjranS9D8YXut6hb+LXi1C+07xj4Y/\ +cD4KfGDwl8evhn4c+KfghdWg0LxC+u2Eum69ZRWGuaB4j8JeI9X8G+M/C2tQWt1cW0mraT4x8P69plz\ +PYXd9plzNpT3Ol6hqGnS217P+AVd18Hvj1efssePG+I9zqdzZfBLWbm4vf2kNDhtZdWt4fDumeFb2zs\ +fjJoGgwzRuvjvQJ9N8MR6vPZNJeax4J0y/086V4k1vRvA9lpv0WSZzPD1IYXEz5sNPSLb1g3ZLVv4O6\ +6brqn9Xw9xBUwlSngsZUc8HP3Yyb1pt2S1b/h919m91omn/QtRRRX3h+lhRRRQAUUUUAFFFFABRRRQA\ +UUUUAFFFFABRRRQAUUUUAfzZeIdAvPBXxi/aU8A6rLbXGseGf2kfi/r9/c6e8sumzWfxw8SSftK+E4r\ +Sa5hilkubfwL8avC1pqKvDGkWrWGoQWz3dnFbX92yvqn9vz4cy+AP2gvCXxdtILaDwj8ffDun/DXWhY\ +2tnp8Vr8a/hlp3izxToWq6pDa3LT+J/EXij4PLrdpJqk1rBHpenfs06Vpd3qN0dR0Kxs/lavy/NcO8N\ +mGKptWTk5R84y95eu9vVM/HM7wssJmmMpNWjKbnHzjP3l672fmmY3iDw74f8AFmkXfh/xVoWjeJdBv/\ +I+36J4g0uy1nSL37LdQ3tr9r03UYJIbny7y2t5o96NslgSRcOikea/2F8Qfh9/yJU//CwfBsX76TwZ4\ +x8Ra3cfEHTt37/U5fC3xM8Tapff8JRv+zv9h0XxF9nze63Lv8Y6Xo1rZaZa+x0VwJtabrseWm1puu3T\ ++vM8Q06fUPij4xsLvVfDniXQPA/gWztbyXw/4u0efSn1z4svqiXNubi1lKx6zZ+ELbR4Z7O/sptZ8M6\ +vqnjW31PSb6TUPCtpep7fRRQ3fZWSBu/SyQUUUUhH6xf8E4fG8XiL9ljwf4Bmktl1z9nbUNQ/Z11axt\ +7a8jlsdE+Gtvp6fCC41W9mZrfV/EWqfs/6t8I9d1S409/sQ1LxVdW622mXEFxpGn/d1fl9/wAEuf8Ak\ +VP2rf8As61P/WVf2Wa/UGv1PLqkquAwc5u8pU43+5K5+0ZTVnWyzA1Zu850oX89Er/PqFFFFdp6AUUU\ +UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeWfGv4P+Evj18M/Efws8btq0GheIX0O/i1LQb2Kw1zQPE\ +fhLxHpHjLwZ4p0ae6tbi2k1bSfGPh/QdTtoL+0vtMuZtKS21TT9Q06W5sp/5/JtF8c+CtZ1D4cfFnSr\ +PQPiz4Os9JXxnpmmJdL4e1UahHdQ6f47+H9zeyPJrfwv1q50zVpdFvmYzp/Z95o+rRWHiTR9d0jTf6V\ +q+ev2hf2afAH7R+haPYeKL3xF4S8UeF7m6uPBvxM8CS6BZ+PvCMWqtYp4l0rTLnxP4e1bTdT8O6tZ6d\ +Yxalpeq6ZqOmzzaZp2qJaxa3o2ianpvi5xlKzGnGdNqGJpL3W9pL+WTtfzi+jb01Pn8+ySObUozpNU8\ +ZRTUW9pLfkk7XtfWL6NvTVn4aUVq/F7wR8R/2b7zULb46+HbnRfCGnXMltY/H7StPP/CjfE1mktjBa6\ +3q+twarfv8Drm4n1jQbP8AsvxtNpiTa7qkuieF9Y8ZR2g1e6yq/P6+HrYapKlXpulUj0a/FdGuzV0z8\ +uxGGxGEqyo4mlKjUj0krfNdGn0aun0YUUUViYBRRXsv7OH7OGr/ALU+r6PrmuaPq2jfs5aNq3hzxFrm\ +ueIvDl9YQfHyCwvtN8UaR4D8B6R4o01Lfxp8E9asItOfxL4le3vvDXiLw1rj+HPDj6zNrOr6v4O6sJh\ +K2NrwoUYuTk9X0iusm+iX47LU7MDgcRmGIhh8PBylJq7tpFdZSeySV+uuy1Puv/gmt4Il0L9m8fEm8j\ +uYdQ/aO8d+IfjskT3NnNps3gzWNO0DwJ8F9a0S2t1M+lW2sfAT4ffCvW7yzv5ZNQt9W8SaklzDpp26P\ +p36AUUV+oYejHD0KNCDvGjFRT72Vr/Pc/ZcLh4YXD0MNB3hQhGKfflVrvze7CiiitjcKKKKACiiigAo\ +oooAKKKKACiiigAooooAKKKKACiiigAr8/8Axv8A8E1v2b9dlkvPhsPHf7OOoTXNs8qfAnxDp2j+DId\ +Nhs2t7nRNF+C/jvQPEPgLwhbXd6lrf3l5onhXTdWuNQgmuX1LOpawuo/oBRWNbD0MRHkr0o1YrpJJ29\ +L7fIwxGFw+KgoYmhCvBbKUVK3mr7P0Px0/4dr/ALQP/R1nwc/8RM8bf/Rf0f8ADtf9oH/o6z4Of+Ime\ +Nv/AKL+v2Lorzv7Cyr/AKBF/wCB1P8A5M8r/VvJP+gFf+B1P/kz89vA3/BNT4A6DqMl/wDE7WviJ+0r\ +bx7f7M8M/Hm68A6l4AsN8F3De/2n8Nvhv8PfDPh/4g+a82n3EP8AwlmmeIP7JvdBs7/Qv7KvVnuLj9C\ +aKK9Ghh6GGhyUKUaMXraKSu+77v1PVw+Fw2Eh7PDUI0IPVqKSu+7tu/NhRRRWxuFFFFABRRRQAUUUUA\ +FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU\ +AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU\ +UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU\ +UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//Z' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=2 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=97 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=70 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='0mm' + YStart='0mm' + ZStart='0mm' + Width='2.5mm' + Height='2.5mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=71 + StartFaceID=-1 + StartEdgeID=72 + StartVertexID=76 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=89 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=71 + $end 'LocalOperationParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=90 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=90 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6.2500000000000009 + FcUVMid(1.25, 1.25, 0) + $begin 'FcTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(2.5, 0, 0, 4.9999999999999998e-07) + TolVt(2.5, 2.5, 0, 4.9999999999999998e-07) + TolVt(0, 2.5, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=70 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Ellipse' + ID=91 + ReferenceCoordSystemID=1 + $begin 'EllipseParameters' + KernelVersion=23 + XCenter='2.5mm' + YCenter='2.5mm' + ZCenter='0mm' + MajRadius='2mm' + Ratio='1.25' + WhichAxis='Z' + NumSegments='0' + $end 'EllipseParameters' + ParentPartID=92 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=92 + StartFaceID=-1 + StartEdgeID=93 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=95 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=92 + $end 'LocalOperationParameters' + ParentPartID=92 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=96 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=96 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=15.707050686830295 + FcUVMid(2.5, 2.5, 0) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=91 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'ellipse' + ellipse(1) + $end 'ellipse' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 70) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('GeometryBodyOperation', 70) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 91) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 95) + DependencyObject('GeometryBodyOperation', 91) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[0:] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 92, 71] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/all_3d_objects273.a3dcomp +BIN000000019755 +$begin 'AnsoftComponentChkSum' + ChecksumString='1d642112d4e930ee4e995da76ff2d7f0' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='all_3d_objects' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='4:56:30 PM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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\ +L0R9hlmY0szw7r04Om4vllF62lZPR9Vro7J+SCiiiu09EKKKKACiiigAooooAKKKKACiiigAooooAKK\ +KKACiiigAr54/a803VNY/ZO/af0jRPB83xC1rVf2d/jXpukeAbey8Q6lceONUvvht4ltdP8Hwad4Svb\ +bVb+bU7uWKyWHTLi31CVr0JZTRXLROv0PRUzipwlBuykmvvViKkFUhODdlNNferH8mXjj9mj4xeDLOH\ +xP4G0kftB/B/VNLPiXwp8SfhvrfhfVfE9x4IbTrPWbPWvFfgwTacviHUZtLv0Fi/gUeIm8RHSp76z0T\ +Q3vtN0JvnDWfFNj4WiS68b6V4z+G+nyzLawav8VPh549+Fmh3N86SSx6Zaa78RPDWmWd3q728NzLHZx\ +TvdSQ2VxMkTRW8zx/1L/ED9jzRNY1vX/F/wl+Jnj74G+JvEWoat4l13RNAfRfGXwg8XeL7+Z9Uj1PxR\ +8KfHWnXkXhzTrrxHc6xf+Il8Aaj4C1fxTd+KdU1DWNcm1uWz1iw+WfHf7Gf7XTWRu9I+KH7OHxXv7mc\ +WsvhzUvAPxN/ZytLC2ljllk11PGtr46+Kj6tPFLDDbrpR0CyWddTe8Os25sRZaj8DUyPN6E5RVOGLpR\ +2lGSjJrpeMn8XdK68z8yrcN55h5yjGjDG0Yt2nCSjJrpeEmrS7qN12bP56JvjB8ORG0uneJY/FEUX/H\ +3J4F03WPiDHpu7/U/2w/gfTtQGi+dtl+z/AGsw/aPss/keZ5E2zxf4iftd+B/BlrMdG8PeKfFF8IYZI\ +Bc6bdeENL89roR3NneT+I7WPULeeOzBmV4tLuLeRpI4RMreeYP3rm/4JU/tMfFJtVHxE+KHwJ+DUUX2\ +b+zE8Gab8QP2iJNe+0/aft32+TXIfhiPCP2TybTyvLXXP7Q/tKXf/Zv2JPt+v8L/APggR+ztaavB4i/\ +aR+JPjL4+31rqmpyjwp4d08/BX4Z6pot5oq2NhZa9pWj+INX8TT6xaaxNd363mn+L9Mt5jBY202nNBB\ +ejUunDZLjKji61B0ovvKP42bl+F7befVhOHcfVcXXwzpRl3nBW9bNy+6N7arofhN/wTfg/a2/bM/bw+\ +Dfi/wCGB1bw38OfgH8U/CPxT+IGpaZqt/4c8J+Bvh3FqSWeueGNb8S6VarP4m8UeKfCVn4o0Kz0yUSt\ +qya7rCG2sPDaa7PYf3g15R8GPgX8Hv2d/A1h8Nvgh8OPCfwy8Faf9lk/sXwppUGn/wBp6haaPpeg/wB\ +v+JNRw134r8VzaTomkxXmr6nPd6pf/YI3vbu4kXfXq9fV4LCRwdL2cd3q7bfLq/NvV/gfbZdgIZfQdK\ +LV5O7tt206vzb1f4BRRRXYegFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR\ +RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB\ +RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA\ +BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF\ +ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2\ +Q==' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=1 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=70 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=33 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='1mm' + ZPosition='0mm' + XSize='1mm' + YSize='0.6mm' + ZSize='0.6mm' + $end 'BoxParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=34 + StartFaceID=35 + StartEdgeID=41 + StartVertexID=53 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Cylinder1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=61 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=23 + XCenter='3mm' + YCenter='2.4mm' + ZCenter='0mm' + Radius='0.707106781186548mm' + Height='0.2mm' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=62 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=62 + StartFaceID=63 + StartEdgeID=66 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'cylinder' + cylinder(1) + $end 'cylinder' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[0:] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 34, 62] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$end 'Design_0.setup/UdmDefFiles' +$end 'AllReferencedFilesForProject' +$begin 'ProjectPreview' + IsEncrypted=false + Thumbnail64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCABgAGADASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooqOWWK3ilnnljhghjeWaaV1jiiijU\ +vJLLI5AjjVFJZiQAASTigCSiv4JfjZrPxy+PvxM/aV/4Lj/AAzv7248G/sxftk/CPwn8KNHKSx2eu/C\ +PwLLFoU2ovhS9tp7Q3nwmW/giSS3nHxH1+Sd82r+Z/UF+3j/AMFSPDH7Hf7HXwS/bH8FfDEfHfwh8c/\ +F3w70Lwxon/Cep8O2h0L4jfDPxp8StL8RS6yng7XhNPFZ+E4raSy+yxnfqbOblDbmKYA/Viivwn+LX/\ +BZ7xx+z7rPwt8ZfH/9gL40fCD9lX4x+JtP8P8Agr4+eKfiN4DuPFAt9Vtm1Gx1LxR8FtEtbq68Gztok\ +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' + $begin 'DesignInfo' + DesignName='IcepakDesign1' + Notes='' + Factory='Icepak' + IsSolved=false + 'Nominal Setups'[0:] + 'Nominal Setup Types'[0:] + 'Optimetrics Setups'[0:] + 'Optimetrics Experiment Types'[0:] + Image64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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' + $end 'DesignInfo' +$end 'ProjectPreview' diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index cbc6be940e7..58ab9b796c7 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -1307,3 +1307,18 @@ def test_67_import_dxf(self): dxf_layers = self.aedtapp.get_dxf_layers(dxf_file) assert isinstance(dxf_layers, list) assert self.aedtapp.import_dxf(dxf_file, dxf_layers) + + def test_68_mesh_priority_3d_comp(self, add_app): + app = add_app( + application=Icepak, + project_name="3d_comp_mesh_prio_test", + design_name="IcepakDesign1", + subfolder=test_subfolder, + ) + assert app.mesh.add_priority(entity_type=2, comp_name="IcepakDesign1_1", priority=3) + + assert app.mesh.add_priority(entity_type=2, comp_name="all_2d_objects1", priority=2) + + assert app.mesh.add_priority(entity_type=2, comp_name="all_3d_objects1", priority=2) + + app.close_project(name="3d_comp_mesh_prio_test", save_project=False) diff --git a/pyaedt/modules/MeshIcepak.py b/pyaedt/modules/MeshIcepak.py index fd6510e54e5..2c9870a5b0d 100644 --- a/pyaedt/modules/MeshIcepak.py +++ b/pyaedt/modules/MeshIcepak.py @@ -697,18 +697,61 @@ def add_priority(self, entity_type, obj_list=None, comp_name=None, priority=3): self._priorities_args.append(prio) args += self._priorities_args elif entity_type == 2: - prio = [ - "NAME:PriorityListParameters", - "EntityType:=", - "Component", - "EntityList:=", - comp_name, - "PriorityNumber:=", - i, - "PriorityListType:=", - "3D", - ] - self._priorities_args.append(prio) + o = self.modeler.user_defined_components[comp_name] + if (all(part.is3d for part in o.parts.values()) is False) and ( + any(part.is3d for part in o.parts.values()) is True + ): + prio_3d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "3D", + ] + prio_2d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "2D", + ] + self._priorities_args.append(prio_3d) + self._priorities_args.append(prio_2d) + elif all(part.is3d for part in o.parts.values()) is True: + prio_3d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "3D", + ] + self._priorities_args.append(prio_3d) + else: + prio_2d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "2D", + ] + self._priorities_args.append(prio_2d) + args += self._priorities_args self.modeler.oeditor.UpdatePriorityList(["NAME:UpdatePriorityListData"]) self.modeler.oeditor.UpdatePriorityList(args) From eca7ad33dee467a5c3ca7ea25d9650739281039a Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:26:58 +0100 Subject: [PATCH 36/78] Add files related to contributions. (#3828) * Add files related to contributions. * Reorder names. * Add emit contributors. --- CODE_OF_CONDUCT.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 14 ++++++++++ CONTRIBUTORS.md | 20 ++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTORS.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..1cf484f16e6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,65 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our +project and our community a harassment-free experience for everyone, +regardless of age, body size, disability, ethnicity, sex +characteristics, gender identity and expression, level of experience, +education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual + attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..8ca4529e4ec --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,14 @@ +# Contributing + +We absolutely welcome any code contributions and we hope that this +guide will facilitate an understanding of the PyAEDT code +repository. It is important to note that while the PyAEDT software +package is maintained by ANSYS and any submissions will be reviewed +thoroughly before merging, we still seek to foster a community that can +support user questions and develop new features to make this software +a useful tool for all users. As such, we welcome and encourage any +questions or submissions to this repository. + +For contributing to this project, please refer to the [PyAnsys Developer's Guide]. + +[PyAnsys Developer's Guide]: https://dev.docs.pyansys.com/index.html diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md new file mode 100644 index 00000000000..f3aafe1e2e8 --- /dev/null +++ b/CONTRIBUTORS.md @@ -0,0 +1,20 @@ +# Contributors + +## Project Lead + +* [Massimo Capodiferro](https://github.com/maxcapodi78) + +## Individual Contributors + +* [Samuel Lopez](https://github.com/Samuelopez-ansys) +* [Simon Vandenbrouck](https://github.com/svandenb-dev) +* [Alberto Di Maria](https://github.com/Alberto-DM) +* [Giulia Malinverno](https://github.com/gmalinve) +* [Hui Zhou](https://github.com/ring630) +* [Devin Crawford](https://github.com/dcrawforAtAnsys) +* [Kathy Pippert](https://github.com/PipKat) +* [Lorenzo Vecchietti](https://github.com/lorenzovecchietti) +* [Maxime Rey](https://github.com/MaxJPRey) +* [Sébastien Morais](https://github.com/SMoraisAnsys) +* [Matthew Young](https://github.com/myoung301) +* [Josh Salant](https://github.com/jsalant22) \ No newline at end of file From 8340a30f479afcc667167d2f1cd4f7d2a52f9de1 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:58:20 +0100 Subject: [PATCH 37/78] added layout_component_names property (#3842) * added layout_component_names property * fix crashing test * fix crashing test --------- Co-authored-by: maxcapodi78 --- _unittest/test_02_3D_modeler.py | 41 +++++++++++++++++++++++++++ _unittest/test_04_SBR.py | 6 ++-- _unittest/test_08_Primitives3D.py | 1 + _unittest/test_98_Icepak.py | 46 +------------------------------ pyaedt/modeler/cad/Primitives.py | 16 +++++++++++ 5 files changed, 63 insertions(+), 47 deletions(-) diff --git a/_unittest/test_02_3D_modeler.py b/_unittest/test_02_3D_modeler.py index f728c871e3d..8dc36cfa7ac 100644 --- a/_unittest/test_02_3D_modeler.py +++ b/_unittest/test_02_3D_modeler.py @@ -1041,3 +1041,44 @@ def test_61_get_face_by_id(self): assert isinstance(face, FacePrimitive) face = self.aedtapp.modeler.get_face_by_id(random.randint(10000, 100000)) assert not face + + def test_62_copy_solid_bodies_udm_3dcomponent(self, add_app): + self.aedtapp.insert_design("udm") + my_udmPairs = [] + mypair = ["ILD Thickness (ILD)", "0.006mm"] + my_udmPairs.append(mypair) + mypair = ["Line Spacing (LS)", "0.004mm"] + my_udmPairs.append(mypair) + mypair = ["Line Thickness (LT)", "0.005mm"] + my_udmPairs.append(mypair) + mypair = ["Line Width (LW)", "0.004mm"] + my_udmPairs.append(mypair) + mypair = ["No. of Turns (N)", 2] + my_udmPairs.append(mypair) + mypair = ["Outer Diameter (OD)", "0.15mm"] + my_udmPairs.append(mypair) + mypair = ["Substrate Thickness", "0.2mm"] + my_udmPairs.append(mypair) + mypair = [ + "Inductor Type", + '"Square,Square,Octagonal,Circular,Square-Differential,Octagonal-Differential,Circular-Differential"', + ] + my_udmPairs.append(mypair) + mypair = ["Underpass Thickness (UT)", "0.001mm"] + my_udmPairs.append(mypair) + mypair = ["Via Thickness (VT)", "0.001mm"] + my_udmPairs.append(mypair) + + obj_udm = self.aedtapp.modeler.create_udm( + udmfullname="Maxwell3D/OnDieSpiralInductor.py", udm_params_list=my_udmPairs, udm_library="syslib" + ) + + compfile = self.aedtapp.components3d["Bowtie_DM"] + obj_3dcomp = self.aedtapp.modeler.insert_3d_component(compfile) + dest = add_app(design_name="IcepakDesign1", just_open=True) + dest.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) + dest.delete_design("IcepakDesign1") + dest = add_app(design_name="IcepakDesign2", just_open=True) + dest.copy_solid_bodies_from(self.aedtapp) + dest2 = add_app(design_name="uUSB") + dest2.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) diff --git a/_unittest/test_04_SBR.py b/_unittest/test_04_SBR.py index 9a7ff0374b3..65878cfd65e 100644 --- a/_unittest/test_04_SBR.py +++ b/_unittest/test_04_SBR.py @@ -60,6 +60,7 @@ def test_01_open_source(self, source): assert len(self.aedtapp.native_components) == 1 def test_02_add_antennas(self): + self.aedtapp.insert_design("add_antennas") dict1 = {"polarization": "Horizontal"} par_beam = self.aedtapp.create_sbr_antenna( self.aedtapp.SbrAntennas.ParametricBeam, parameters_dict=dict1, antenna_name="TX1" @@ -71,8 +72,8 @@ def test_02_add_antennas(self): assert par_beam.update() self.aedtapp.modeler.user_defined_components["TX1_1"].native_properties["Unit"] = "mm" - assert len(self.aedtapp.native_components) == 3 - assert len(self.aedtapp.modeler.user_defined_components) == 3 + assert len(self.aedtapp.native_components) == 2 + assert len(self.aedtapp.modeler.user_defined_components) == 2 assert self.aedtapp.set_sbr_txrx_settings({"TX1_1_p1": "RX1_1_p1"}) assert self.aedtapp.create_sbr_antenna( self.aedtapp.SbrAntennas.CrossDipole, use_current_source_representation=True @@ -109,6 +110,7 @@ def test_02_add_antennas(self): assert array.update() def test_03_add_ffd_antenna(self): + self.aedtapp.insert_design("ffd_antenna") assert self.aedtapp.create_sbr_file_based_antenna( ffd_full_path=os.path.join(local_path, "example_models", test_subfolder, "test.ffd") ) diff --git a/_unittest/test_08_Primitives3D.py b/_unittest/test_08_Primitives3D.py index f0250794fd2..c03a624e751 100644 --- a/_unittest/test_08_Primitives3D.py +++ b/_unittest/test_08_Primitives3D.py @@ -1769,6 +1769,7 @@ def test_85_insert_layoutcomponent(self): ) self.aedtapp.solution_type = "Terminal" comp = self.aedtapp.modeler.insert_layout_component(self.layout_component, name=None, parameter_mapping=False) + assert comp.name in self.aedtapp.modeler.layout_component_names assert isinstance(comp, UserDefinedComponent) assert len(self.aedtapp.modeler.user_defined_components[comp.name].parts) == 3 comp2 = self.aedtapp.modeler.insert_layout_component( diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index 58ab9b796c7..b9d858fb6ea 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -327,58 +327,14 @@ def test_25_copy_solid_bodies(self, add_app): new_design.delete_design(design_name) new_design.close_project(project_name) - def test_26_copy_solid_bodies_udm_3dcomponent(self, add_app): - my_udmPairs = [] - mypair = ["ILD Thickness (ILD)", "0.006mm"] - my_udmPairs.append(mypair) - mypair = ["Line Spacing (LS)", "0.004mm"] - my_udmPairs.append(mypair) - mypair = ["Line Thickness (LT)", "0.005mm"] - my_udmPairs.append(mypair) - mypair = ["Line Width (LW)", "0.004mm"] - my_udmPairs.append(mypair) - mypair = ["No. of Turns (N)", 2] - my_udmPairs.append(mypair) - mypair = ["Outer Diameter (OD)", "0.15mm"] - my_udmPairs.append(mypair) - mypair = ["Substrate Thickness", "0.2mm"] - my_udmPairs.append(mypair) - mypair = [ - "Inductor Type", - '"Square,Square,Octagonal,Circular,Square-Differential,Octagonal-Differential,Circular-Differential"', - ] - my_udmPairs.append(mypair) - mypair = ["Underpass Thickness (UT)", "0.001mm"] - my_udmPairs.append(mypair) - mypair = ["Via Thickness (VT)", "0.001mm"] - my_udmPairs.append(mypair) - - obj_udm = self.aedtapp.modeler.create_udm( - udmfullname="Maxwell3D/OnDieSpiralInductor.py", udm_params_list=my_udmPairs, udm_library="syslib" - ) - - compfile = self.aedtapp.components3d["ADDA_AB0305MB_GA0"] - obj_3dcomp = self.aedtapp.modeler.insert_3d_component(compfile) - dest = add_app(application=Icepak, design_name="IcepakDesign1", just_open=True) - dest.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) - dest.delete_design("IcepakDesign1") - dest = add_app(application=Icepak, design_name="IcepakDesign2", just_open=True) - dest.copy_solid_bodies_from(self.aedtapp) - dest2 = add_app(design_name="uUSB") - dest2.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) - def test_27_get_all_conductors(self): conductors = self.aedtapp.get_all_conductors_names() - assert sorted(conductors) == ["Inductor", "Paddle", "box", "network_box", "network_box2"] + assert sorted(conductors) == ["box", "network_box", "network_box2"] def test_28_get_all_dielectrics(self): dielectrics = self.aedtapp.get_all_dielectrics_names() assert sorted(dielectrics) == [ - "ADDA_AB0305MB_GA0_1_Box", - "Boundary", - "ILD", "Region", - "Substrate", "box2", "box3", "network_box3", diff --git a/pyaedt/modeler/cad/Primitives.py b/pyaedt/modeler/cad/Primitives.py index 4bfbd707212..edbd2e27451 100644 --- a/pyaedt/modeler/cad/Primitives.py +++ b/pyaedt/modeler/cad/Primitives.py @@ -550,6 +550,22 @@ def user_defined_component_names(self): new_obs3d = [] return new_obs3d + @property + def layout_component_names(self): + """List of the names of all Layout component objects. + + Returns + ------- + list + Layout component names. + """ + lc_names = [] + if self.user_defined_components: + for name, value in self.user_defined_components.items(): + if value.layout_component: + lc_names.append(name) + return lc_names + @property def _oproject(self): """Project.""" From 59f3781f3a154ec16deef096498bb1878517144e Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Fri, 3 Nov 2023 13:59:12 +0100 Subject: [PATCH 38/78] fix (#3839) Co-authored-by: ring630 <@gmail.com> --- pyaedt/edb_core/components.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyaedt/edb_core/components.py b/pyaedt/edb_core/components.py index 2bb82399012..c74daf2c054 100644 --- a/pyaedt/edb_core/components.py +++ b/pyaedt/edb_core/components.py @@ -1869,10 +1869,10 @@ def set_solder_ball( cmp_property.SetSolderBallProperty(solder_ball_prop) port_prop = cmp_property.GetPortProperty().Clone() + port_prop.SetReferenceHeight(self._pedb.edb_value(reference_height)) port_prop.SetReferenceSizeAuto(auto_reference_size) if not auto_reference_size: port_prop.SetReferenceSize(self._pedb.edb_value(reference_size_x), self._pedb.edb_value(reference_size_y)) - port_prop.SetReferenceHeight(self._pedb.edb_value(reference_height)) cmp_property.SetPortProperty(port_prop) edb_cmp.SetComponentProperty(cmp_property) return True From 4b745f05e94749eb2f314ebfd300d623b69bb781 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Thu, 26 Oct 2023 17:04:40 +0200 Subject: [PATCH 39/78] REFACT: read materials file Problem Current implementation leverages load_entire_aedt_file from pyaedt.generic.LoadAEDTFile. Solution The proposed solution consists in reworking the way amat are read and loaded. First, we only allow to load amat that are located in AEDT's syslib directory. By default, the file that is read is "Materials.amat". Since we only work with syslib, the code related to personallib has been removed. Note The proposed solutions is inspired from https://github.com/ansys/pyaedt/pull/3711. The resulting code refacts the PR's code to have fewers LOC and fixes many errors that were part of the PR. --- pyaedt/edb_core/materials.py | 230 ++++++++++++++++++----------------- 1 file changed, 118 insertions(+), 112 deletions(-) diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 154ef5d5d4b..c83965e39d5 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -1,9 +1,9 @@ from __future__ import absolute_import # noreorder import difflib -import fnmatch import logging import os +import re import warnings from pyaedt import is_ironpython @@ -368,7 +368,6 @@ def __getitem__(self, item): def __init__(self, pedb): self._pedb = pedb self._syslib = os.path.join(self._pedb.base_path, "syslib") - self._personal_lib = None self._materials_in_aedt = None if not self.materials: self.add_material("air") @@ -381,7 +380,7 @@ def materials_in_aedt(self): """Retrieve the dictionary of materials available in AEDT syslib.""" if self._materials_in_aedt: return self._materials_in_aedt - self._materials_in_aedt = self._read_materials() + self._materials_in_aedt = self.read_materials(os.path.join(self._syslib, "Materials.amat")) return self._materials_in_aedt @property @@ -389,16 +388,6 @@ def syslib(self): """Retrieve the project sys library.""" return self._syslib - @property - def personallib(self): - """Get or Set the user personallib.""" - return self._personal_lib - - @personallib.setter - def personallib(self, value): - self._personal_lib = value - self._materials_in_aedt = self._read_materials() - @pyaedt_function_handler() def _edb_value(self, value): return self._pedb.edb_value(value) @@ -856,116 +845,133 @@ def add_material_from_aedt(self, material_name): return False new_material = self.add_material(name=material_name) material = self.materials_in_aedt[material_name] - try: - new_material.permittivity = float(material["permittivity"]) - except (KeyError, TypeError): - pass - try: - new_material.conductivity = float(material["conductivity"]) - except (KeyError, TypeError): - pass - try: - new_material.mass_density = float(material["mass_density"]) - except (KeyError, TypeError): - pass - try: - new_material.permeability = float(material["permeability"]) - except (KeyError, TypeError): - pass - try: - new_material.loss_tangent = float(material["dielectric_loss_tangent"]) - except (KeyError, TypeError): - pass - try: - new_material.specific_heat = float(material["specific_heat"]) - except (KeyError, TypeError): - pass - try: - new_material.thermal_expansion_coefficient = float(material["thermal_expansion_coeffcient"]) - except (KeyError, TypeError): - pass + properties = [ + "permittivity", + "conductivity", + "mass_density", + "permeability", + "specific_heat", + "thermal_expansion_coefficient", + ] + for mat_prop_name, mat_prop_value in material.items(): + if mat_prop_name in properties: + setattr(new_material, mat_prop_name, mat_prop_value) + if mat_prop_name == "dielectric_loss_tangent": + new_material.loss_tangent = mat_prop_value return True @pyaedt_function_handler() - def load_amat(self, amat_file): - """Load material from an amat file and add materials to Edb. + def load_syslib_amat(self, filename="Materials.amat"): + """Load materials from an amat file located in the project system library. Parameters ---------- - amat_file : str - Full path to the amat file to read and add to the Edb. + filename : str + Name of the amat file. + + Returns + ------- + bool """ - material_dict = self._read_materials(amat_file) + mat_file = os.path.join(self._syslib, filename) + if not os.path.exists(mat_file): + self._pedb.logger.error("File path {} does not exist.".format(mat_file)) + material_dict = self.read_materials(mat_file) for material_name, material in material_dict.items(): if not material_name in list(self.materials.keys()): new_material = self.add_material(name=material_name) - try: - new_material.permittivity = float(material["permittivity"]) - except (KeyError, TypeError): - pass - try: - new_material.conductivity = float(material["conductivity"]) - except (KeyError, TypeError): - pass - try: - new_material.mass_density = float(material["mass_density"]) - except (KeyError, TypeError): - pass - try: - new_material.permeability = float(material["permeability"]) - except (KeyError, TypeError): - pass - try: - new_material.loss_tangent = float(material["dielectric_loss_tangent"]) - except (KeyError, TypeError): - pass - try: - new_material.specific_heat = float(material["specific_heat"]) - except (KeyError, TypeError): - pass - try: - new_material.thermal_expansion_coefficient = float(material["thermal_expansion_coeffcient"]) - except (KeyError, TypeError): - pass + properties = [ + "permittivity", + "conductivity", + "mass_density", + "permeability", + "specific_heat", + "thermal_expansion_coefficient", + ] + for mat_prop_name, mat_prop_value in material.items(): + if mat_prop_name in properties: + setattr(new_material, mat_prop_name, mat_prop_value) + if mat_prop_name == "tangent_delta": + new_material.loss_tangent = mat_prop_value return True + @staticmethod @pyaedt_function_handler() - def _read_materials(self, mat_file=None): - def get_mat_list(file_name, mats): - from pyaedt.generic.LoadAEDTFile import load_entire_aedt_file - - mread = load_entire_aedt_file(file_name) - for mat, mdict in mread.items(): - if mat != "$base_index$": - try: - mats[mat] = mdict["MaterialDef"][mat] - except KeyError: - mats[mat] = mdict - - if mat_file and os.path.exists(mat_file): - materials = {} - get_mat_list(mat_file, materials) - return materials - - amat_sys = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(self.syslib) - for filename in filenames - if fnmatch.fnmatch(filename, "*.amat") + def read_materials(mat_file): + """Read materials from an amat file. + + Parameters + ---------- + filename : str + Name of the amat file. + + Returns + ------- + dict + {material name: dict of material property to value} + """ + + def get_line_float_value(line): + try: + return float(re.split(",|=", line)[-1].strip(")'")) + except ValueError: + return None + + res = {} + _begin_search = re.compile(r"^\$begin '(.+)'") + _end_search = re.compile(r"^\$end '(.+)'") + amat_keys = [ + "thermal_conductivity", + "permittivity", + "dielectric_loss_tangent", + "permeability", + "magnetic_loss_tangent", + "thermal_expansion_coeffcient", + "specific_heat", + "mass_density", ] - amat_personal = [] - if self.personallib: - amat_personal = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(self.personallib) - for filename in filenames - if fnmatch.fnmatch(filename, "*.amat") - ] - materials = {} - for amat in amat_sys: - get_mat_list(amat, materials) - - if amat_personal: - for amat in amat_personal: - get_mat_list(amat, materials) - return materials + keys = [ + "thermal_conductivity", + "permittivity", + "tangent_delta", + "permeability", + "magnetic_loss_tangent", + "thermal_expansion_coeffcient", + "specific_heat", + "mass_density", + ] + + with open(mat_file, "r") as amat_fh: + raw_lines = amat_fh.read().splitlines() + mat_found = "" + for line in raw_lines: + b = _begin_search.search(line) + if b: # walk down a level + mat_found = b.group(1) + res.setdefault(mat_found, {}) + if mat_found: + for amat_key, key in zip(amat_keys, keys): + if amat_key in line: + value = get_line_float_value(line) + if value is not None: + res[mat_found][key] = value + # Extra case to avoid confusion ("conductivity" is included in "thermal_conductivity") + if "conductivity" in line and "thermal_conductivity" not in line: + value = get_line_float_value(line) + if value is not None: + res[mat_found]["conductivity"] = value + end = _end_search.search(line) + if end: + mat_found = "" + + # Clean unwanted data + try: + del res["$index$"] + except KeyError: + pass + try: + del res["$base_index$"] + except KeyError: + pass + + return res From 09c234204b678a144bdf0bf7a8075c0992535946 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Thu, 26 Oct 2023 17:21:45 +0200 Subject: [PATCH 40/78] TEST: add read materials unit test --- _unittest/test_00_EDB.py | 81 +++++++++++++++++++++++++++++++++++++--- pyproject.toml | 1 + 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index b50a3c43315..5dbfe21d1c7 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -1,10 +1,14 @@ +import builtins import json import os # Setup paths for module imports # Import required modules import sys +from unittest.mock import mock_open +from mock import MagicMock +from mock import patch import pytest from pyaedt import Edb @@ -12,6 +16,7 @@ from pyaedt.edb_core.edb_data.edbvalue import EdbValue from pyaedt.edb_core.edb_data.simulation_configuration import SimulationConfiguration from pyaedt.edb_core.edb_data.sources import Source +from pyaedt.edb_core.materials import Materials from pyaedt.generic.constants import RadiationBoxType from pyaedt.generic.general_methods import check_numeric_equivalence @@ -33,6 +38,59 @@ test_subfolder = "TEDB" +MATERIALS = """ +$begin 'Polyflon CuFlon (tm)' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=225 + Blue=220 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('permittivity', 2.1) + simple('dielectric_loss_tangent', 0.00045) + ModTime=1499970477 +$end 'Polyflon CuFlon (tm)' +$begin 'Water(@360K)' + $begin 'MaterialDef' + $begin 'Water(@360K)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.6743' + mass_density='967.4' + specific_heat='4206' + thermal_expansion_coeffcient='0.0006979' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + material_refractive_index='1.333' + diffusivity='1.657e-007' + molecular_mass='0.018015' + viscosity='0.000324' + ModTime=1592011950 + $end 'Water(@360K)' + $end 'MaterialDef' +$end 'Water(@360K)' +""" + @pytest.fixture(scope="class") def edbapp(add_edb): @@ -2954,12 +3012,23 @@ def test_147_find_dc_shorts(self): assert len(edbapp.nets["DDR4_DM3"].find_dc_short()) == 0 edbapp.close() - def test_148_load_amat(self): - assert "Rogers RO3003 (tm)" in self.edbapp.materials.materials_in_aedt - material_file = os.path.join(self.edbapp.materials.syslib, "Materials.amat") - assert self.edbapp.materials.add_material_from_aedt("Arnold_Magnetics_N28AH_-40C") - assert "Arnold_Magnetics_N28AH_-40C" in self.edbapp.materials.materials.keys() - assert self.edbapp.materials.load_amat(material_file) + @patch.object(builtins, "open", new_callable=mock_open, read_data=MATERIALS) + def test_149_materials_read_materials(self, mock_file_open): + """Read materials from an amat file.""" + materials = Materials(MagicMock(materials=["copper"])) + expected_res = { + "Polyflon CuFlon (tm)": {"permittivity": 2.1, "tangent_delta": 0.00045}, + "Water(@360K)": { + "thermal_conductivity": 0.6743, + "mass_density": 967.4, + "specific_heat": 4206, + "thermal_expansion_coeffcient": 0.0006979, + }, + } + mats = materials.read_materials("some path") + assert mats == expected_res + + def test_150_material_load_syslib_amat(self): material_list = list(self.edbapp.materials.materials.keys()) assert material_list assert len(material_list) > 0 diff --git a/pyproject.toml b/pyproject.toml index 1bdb802b20a..6bd31d0a1f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ tests = [ "matplotlib==3.8.0; python_version > '3.8'", "numpy==1.21.6; python_version <= '3.9'", "numpy==1.26.0; python_version > '3.9'", + "mock", "openpyxl==3.1.2", "osmnx", "pandas==1.3.5; python_version == '3.7'", From 3d08a06409398e7f93443b049392458762e8e5f0 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Thu, 26 Oct 2023 17:23:15 +0200 Subject: [PATCH 41/78] TEST: add read materials system tests --- .../example_models/syslib/Materials.amat | 123 ++++++++++++++++++ _unittest/test_00_EDB.py | 29 +++++ 2 files changed, 152 insertions(+) create mode 100644 _unittest/example_models/syslib/Materials.amat diff --git a/_unittest/example_models/syslib/Materials.amat b/_unittest/example_models/syslib/Materials.amat new file mode 100644 index 00000000000..a688590e6d9 --- /dev/null +++ b/_unittest/example_models/syslib/Materials.amat @@ -0,0 +1,123 @@ +$begin '$base_index$' + $begin 'properties' + all_levels=000000000000 + time(year=000000002021, month=000000000009, day=000000000001, hour=000000000015, min=000000000032, sec=000000000052) + version=000000000000 + $end 'properties' + $begin '$base_index$' + $index$(pos=000000318773, lin=000000011311, lvl=000000000000) + $end '$base_index$' +$end '$base_index$' +$begin 'FC-78' + $begin 'MaterialDef' + $begin 'FC-78' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.062' + mass_density='1700' + specific_heat='1050' + thermal_expansion_coeffcient='0.0016' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + molecular_mass='0.001' + viscosity='0.000462' + ModTime=1592011950 + $end 'FC-78' + $end 'MaterialDef' +$end 'FC-78' +$begin 'Polyflon CuFlon (tm)' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=225 + Blue=220 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('permittivity', 2.1) + simple('dielectric_loss_tangent', 0.00045) + ModTime=1499970477 +$end 'Polyflon CuFlon (tm)' +$begin 'Water(@360K)' + $begin 'MaterialDef' + $begin 'Water(@360K)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.6743' + mass_density='967.4' + specific_heat='4206' + thermal_expansion_coeffcient='0.0006979' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + material_refractive_index='1.333' + diffusivity='1.657e-007' + molecular_mass='0.018015' + viscosity='0.000324' + ModTime=1592011950 + $end 'Water(@360K)' + $end 'MaterialDef' +$end 'Water(@360K)' +$begin 'steel_stainless' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=176 + Green=154 + Blue=176 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('conductivity', 1100000) + simple('thermal_conductivity', 13.8) + simple('mass_density', 8055) + simple('specific_heat', 480) + simple('youngs_modulus', 195000000000) + simple('poissons_ratio', 0.3) + simple('thermal_expansion_coeffcient', 1.08e-005) + ModTime=1499970477 +$end 'steel_stainless' +$begin '$index$' + $begin '$index$' + steel_stainless(pos=1224, lin=48, lvl=0) + 'Polyflon CuFlon (tm)'(pos=22164, lin=814, lvl=0) + 'FC-78'(pos=126130, lin=4842, lvl=0) + 'Water(@360K)'(pos=118115, lin=4556, lvl=0) + $base_index$(pos=0, lin=1, lvl=0) + $index$(pos=318773, lin=11311, lvl=0) + $end '$index$' +$end '$index$' diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 5dbfe21d1c7..febe0fdc308 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -3029,8 +3029,37 @@ def test_149_materials_read_materials(self, mock_file_open): assert mats == expected_res def test_150_material_load_syslib_amat(self): + """Load material from an amat file.""" + assert self.edbapp.materials.load_syslib_amat() material_list = list(self.edbapp.materials.materials.keys()) assert material_list assert len(material_list) > 0 assert self.edbapp.materials.materials["Rogers RO3003 (tm)"].loss_tangent == 0.0013 assert self.edbapp.materials.materials["Rogers RO3003 (tm)"].permittivity == 3.0 + + def test_151_materials_read_materials(self): + """Read materials.""" + path = os.path.join(local_path, "example_models", "syslib", "Materials.amat") + mats = self.edbapp.materials.read_materials(path) + key = "FC-78" + assert key in mats + assert mats[key]["thermal_conductivity"] == 0.062 + assert mats[key]["mass_density"] == 1700 + assert mats[key]["specific_heat"] == 1050 + assert mats[key]["thermal_expansion_coeffcient"] == 0.0016 + key = "Polyflon CuFlon (tm)" + assert key in mats + assert mats[key]["permittivity"] == 2.1 + assert mats[key]["tangent_delta"] == 0.00045 + key = "Water(@360K)" + assert key in mats + assert mats[key]["thermal_conductivity"] == 0.6743 + assert mats[key]["mass_density"] == 967.4 + assert mats[key]["specific_heat"] == 4206 + assert mats[key]["thermal_expansion_coeffcient"] == 0.0006979 + key = "steel_stainless" + assert mats[key]["conductivity"] == 1100000 + assert mats[key]["thermal_conductivity"] == 13.8 + assert mats[key]["mass_density"] == 8055 + assert mats[key]["specific_heat"] == 480 + assert mats[key]["thermal_expansion_coeffcient"] == 1.08e-005 From 954f60378557443b2e02030333f7087f13e4ebe2 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 27 Oct 2023 09:42:17 +0200 Subject: [PATCH 42/78] DOC: use capital letters for amat file extension --- _unittest/test_00_EDB.py | 4 ++-- pyaedt/edb_core/materials.py | 10 +++++----- pyaedt/generic/LoadAEDTFile.py | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index febe0fdc308..02553930c8f 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -3014,7 +3014,7 @@ def test_147_find_dc_shorts(self): @patch.object(builtins, "open", new_callable=mock_open, read_data=MATERIALS) def test_149_materials_read_materials(self, mock_file_open): - """Read materials from an amat file.""" + """Read materials from an AMAT file.""" materials = Materials(MagicMock(materials=["copper"])) expected_res = { "Polyflon CuFlon (tm)": {"permittivity": 2.1, "tangent_delta": 0.00045}, @@ -3029,7 +3029,7 @@ def test_149_materials_read_materials(self, mock_file_open): assert mats == expected_res def test_150_material_load_syslib_amat(self): - """Load material from an amat file.""" + """Load material from an AMAT file.""" assert self.edbapp.materials.load_syslib_amat() material_list = list(self.edbapp.materials.materials.keys()) assert material_list diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index c83965e39d5..65feaf6d881 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -827,7 +827,7 @@ def get_property_by_material_name(self, property_name, material_name): @pyaedt_function_handler() def add_material_from_aedt(self, material_name): - """Add a material read from ``syslib amat`` library. + """Add a material read from ``syslib AMAT`` library. Parameters ---------- @@ -862,12 +862,12 @@ def add_material_from_aedt(self, material_name): @pyaedt_function_handler() def load_syslib_amat(self, filename="Materials.amat"): - """Load materials from an amat file located in the project system library. + """Load materials from an AMAT file located in the project system library. Parameters ---------- filename : str - Name of the amat file. + Name of the AMAT file. Returns ------- @@ -898,12 +898,12 @@ def load_syslib_amat(self, filename="Materials.amat"): @staticmethod @pyaedt_function_handler() def read_materials(mat_file): - """Read materials from an amat file. + """Read materials from an AMAT file. Parameters ---------- filename : str - Name of the amat file. + Name of the AMAT file. Returns ------- diff --git a/pyaedt/generic/LoadAEDTFile.py b/pyaedt/generic/LoadAEDTFile.py index 7c92cf447f0..fb669773701 100644 --- a/pyaedt/generic/LoadAEDTFile.py +++ b/pyaedt/generic/LoadAEDTFile.py @@ -155,7 +155,7 @@ def _decode_recognized_subkeys(sk, d): if m and m.group("SKEY1") == "simple": # extra verification. SKEY2 is with spaces, so it's not considered here. elems = _separate_list_elements(m.group("LIST1")) if elems[0] == "thermal_expansion_coeffcient": - elems[0] = "thermal_expansion_coefficient" # fix a typo in the amat files. AEDT supports both strings! + elems[0] = "thermal_expansion_coefficient" # fix a typo in the AMAT files. AEDT supports both strings! d[elems[0]] = str(elems[1]) # convert to string as it is dedicated to material props return True elif re.search(r"^\w+IDMap\(.*\)$", sk, re.IGNORECASE): # check if the format is AAKeyIDMap('10'=56802, '7'=56803) From 047d2a86376d3ede193390ebc8b6ce57ba5073a8 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 27 Oct 2023 10:38:58 +0200 Subject: [PATCH 43/78] DOC: disable navigation_with_keys Problem A warning is raised during workflow "Build project documentation". Solution Follow pydata/pydata-sphinx-theme#1492 instructions and disable "navigation_with_keys" as it is also something that is defined as default for ansys sphinx theme (see ansys/ansys-sphinx-theme#315) --- doc/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 11b180ef38e..02f4d12852b 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -318,6 +318,7 @@ def setup(app): # specify the location of your github repo html_theme_options = { "github_url": "https://github.com/ansys/pyaedt", + "navigation_with_keys": False, "show_prev_next": False, "show_breadcrumbs": True, "collapse_navigation": True, From 52fde004a76a544db9d61f069b15b4490bb07227 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 27 Oct 2023 11:12:53 +0200 Subject: [PATCH 44/78] DOC: fix numpydoc warning --- pyaedt/edb_core/materials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 65feaf6d881..60c183995a7 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -908,7 +908,7 @@ def read_materials(mat_file): Returns ------- dict - {material name: dict of material property to value} + {material name: dict of material property to value}. """ def get_line_float_value(line): From 83745850556fdf450ae0a1c4d7ed8f5ab14324f7 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 27 Oct 2023 11:14:25 +0200 Subject: [PATCH 45/78] DOC: fix unexpected indentation --- doc/source/Getting_started/Troubleshooting.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/source/Getting_started/Troubleshooting.rst b/doc/source/Getting_started/Troubleshooting.rst index e50ad5b5598..d5fc1592811 100644 --- a/doc/source/Getting_started/Troubleshooting.rst +++ b/doc/source/Getting_started/Troubleshooting.rst @@ -135,11 +135,12 @@ Failure connecting to the gRPC server On Linux, PyAEDT may fail to initialize a new instance of the gRPC server or connect to an existing server session. This may be due to: - - Firewall - - Proxy - - Permissions - - License - - Scheduler (for example if the gRPC server was started from LSF or Slurm) + +- Firewall +- Proxy +- Permissions +- License +- Scheduler (for example if the gRPC server was started from LSF or Slurm) For issues related to use of a proxy server, you may set the following environment variable to disable the proxy server for the *localhost*. From bcbbb1fed180bc1f4653ab01e39b8f66eb98b923 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 27 Oct 2023 13:52:58 +0200 Subject: [PATCH 46/78] TEST: fix not working unit test --- _unittest/test_00_EDB.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 02553930c8f..eebb9fd4b88 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -8,6 +8,7 @@ from unittest.mock import mock_open from mock import MagicMock +from mock import PropertyMock from mock import patch import pytest @@ -3012,10 +3013,12 @@ def test_147_find_dc_shorts(self): assert len(edbapp.nets["DDR4_DM3"].find_dc_short()) == 0 edbapp.close() + @patch("pyaedt.edb_core.materials.Materials.materials", new_callable=PropertyMock) @patch.object(builtins, "open", new_callable=mock_open, read_data=MATERIALS) - def test_149_materials_read_materials(self, mock_file_open): + def test_149_materials_read_materials(self, mock_file_open, mock_materials_property): """Read materials from an AMAT file.""" - materials = Materials(MagicMock(materials=["copper"])) + mock_materials_property.return_value = ["copper"] + materials = Materials(MagicMock()) expected_res = { "Polyflon CuFlon (tm)": {"permittivity": 2.1, "tangent_delta": 0.00045}, "Water(@360K)": { From d41f165b9d02d2a956dc45d34931014c19b7cde3 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Sat, 28 Oct 2023 18:26:48 +0200 Subject: [PATCH 47/78] REFACT: allow to read amat files out of syslib --- _unittest/test_00_EDB.py | 5 +++-- pyaedt/edb_core/materials.py | 23 +++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index eebb9fd4b88..82877a0249a 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -3031,9 +3031,10 @@ def test_149_materials_read_materials(self, mock_file_open, mock_materials_prope mats = materials.read_materials("some path") assert mats == expected_res - def test_150_material_load_syslib_amat(self): + def test_150_material_load_amat(self): """Load material from an AMAT file.""" - assert self.edbapp.materials.load_syslib_amat() + mat_file = os.path.join(self.edbapp.base_path, "syslib", "Materials.amat") + assert self.edbapp.materials.load_amat(mat_file) material_list = list(self.edbapp.materials.materials.keys()) assert material_list assert len(material_list) > 0 diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 60c183995a7..9e65929a6c9 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -861,22 +861,21 @@ def add_material_from_aedt(self, material_name): return True @pyaedt_function_handler() - def load_syslib_amat(self, filename="Materials.amat"): - """Load materials from an AMAT file located in the project system library. + def load_amat(self, amat_file): + """Load materials from an AMAT file. Parameters ---------- - filename : str - Name of the AMAT file. + amat_file : str + Full path to the amat file to read and add to the Edb. Returns ------- bool """ - mat_file = os.path.join(self._syslib, filename) - if not os.path.exists(mat_file): - self._pedb.logger.error("File path {} does not exist.".format(mat_file)) - material_dict = self.read_materials(mat_file) + if not os.path.exists(amat_file): + self._pedb.logger.error("File path {} does not exist.".format(amat_file)) + material_dict = self.read_materials(amat_file) for material_name, material in material_dict.items(): if not material_name in list(self.materials.keys()): new_material = self.add_material(name=material_name) @@ -897,13 +896,13 @@ def load_syslib_amat(self, filename="Materials.amat"): @staticmethod @pyaedt_function_handler() - def read_materials(mat_file): + def read_materials(amat_file): """Read materials from an AMAT file. Parameters ---------- - filename : str - Name of the AMAT file. + amat_file : str + Full path to the amat file to read. Returns ------- @@ -941,7 +940,7 @@ def get_line_float_value(line): "mass_density", ] - with open(mat_file, "r") as amat_fh: + with open(amat_file, "r") as amat_fh: raw_lines = amat_fh.read().splitlines() mat_found = "" for line in raw_lines: From ce27ce9c63b46f94bd0e54dd0e89634654879b42 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Sat, 28 Oct 2023 18:36:02 +0200 Subject: [PATCH 48/78] DOC: add docstring in get_line_float_value --- pyaedt/edb_core/materials.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 9e65929a6c9..299aed5aee0 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -911,6 +911,11 @@ def read_materials(amat_file): """ def get_line_float_value(line): + """Retrieve the float value expected in the line of an AMAT file. + The associated string is expected to follow one of the following cases: + - simple('permittivity', 12.) + - permittivity='12'. + """ try: return float(re.split(",|=", line)[-1].strip(")'")) except ValueError: From b48ae8685d0ff17fcd013ede9d62ab77fd6b0a9e Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Sat, 4 Nov 2023 13:47:02 +0100 Subject: [PATCH 49/78] DOC: fix methods description typos --- pyaedt/edb_core/materials.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 299aed5aee0..180787bac4c 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -827,7 +827,7 @@ def get_property_by_material_name(self, property_name, material_name): @pyaedt_function_handler() def add_material_from_aedt(self, material_name): - """Add a material read from ``syslib AMAT`` library. + """Add a material read from a ``syslib AMAT`` library. Parameters ---------- @@ -867,7 +867,7 @@ def load_amat(self, amat_file): Parameters ---------- amat_file : str - Full path to the amat file to read and add to the Edb. + Full path to the AMAT file to read and add to the Edb. Returns ------- @@ -902,7 +902,7 @@ def read_materials(amat_file): Parameters ---------- amat_file : str - Full path to the amat file to read. + Full path to the AMAT file to read. Returns ------- From c6118dbc8cc1e1ee82fcbab6b7ebd11460868653 Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:26:00 -0500 Subject: [PATCH 50/78] Rename variable to avoid ambiguity. (#3849) --- pyaedt/edb_core/stackup.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyaedt/edb_core/stackup.py b/pyaedt/edb_core/stackup.py index 09043aab508..3c009b43535 100644 --- a/pyaedt/edb_core/stackup.py +++ b/pyaedt/edb_core/stackup.py @@ -1723,7 +1723,7 @@ def _import_csv(self, file_path): Parameters ---------- - fpath : str + file_path : str File path to the CSV file. """ if not pd: @@ -1739,17 +1739,17 @@ def _import_csv(self, file_path): logger.error("{} doesn't exist in csv".format(name)) return False - for name, l in df.iterrows(): - layer_type = l.Type + for name, layer_info in df.iterrows(): + layer_type = layer_info.Type if name in self.layers: layer = self.layers[name] layer.type = layer_type else: layer = self.add_layer(name, layer_type=layer_type, material="copper", fillMaterial="copper") - layer.material = l.Material - layer.thickness = l.Thickness - layer.dielectric_fill = l.Dielectric_Fill + layer.material = layer_info.Material + layer.thickness = layer_info.Thickness + layer.dielectric_fill = layer_info.Dielectric_Fill lc_new = self._pedb.edb_api.Cell.LayerCollection() for name, _ in df.iterrows(): From 263ee72c99c2a2455ca4850d43da384f94e0f6e4 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:45:28 +0100 Subject: [PATCH 51/78] Improved the way the information are plotted from the __str__ methods (#3845) * Improved the way the information are plotted from the __str__ methods * Update pyaedt/application/Design.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update Design.py * Improved the way the information are plotted from the __str__ methods --------- Co-authored-by: maxcapodi78 Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --- _unittest/test_01_Design.py | 2 ++ _unittest/test_07_Object3D.py | 12 ++++---- pyaedt/application/Design.py | 47 ++++++++++++++++++++++++++------ pyaedt/desktop.py | 3 +- pyaedt/modeler/cad/elements3d.py | 24 ++++++++-------- pyaedt/modeler/cad/object3d.py | 8 +----- 6 files changed, 62 insertions(+), 34 deletions(-) diff --git a/_unittest/test_01_Design.py b/_unittest/test_01_Design.py index 1dc5fc7c31f..00e37c48092 100644 --- a/_unittest/test_01_Design.py +++ b/_unittest/test_01_Design.py @@ -98,6 +98,8 @@ def test_08_objects(self): print(self.aedtapp.logger) print(self.aedtapp.variable_manager) print(self.aedtapp.materials) + print(self.aedtapp) + assert self.aedtapp.info def test_09_set_objects_deformation(self): assert self.aedtapp.modeler.set_objects_deformation(["inner"]) diff --git a/_unittest/test_07_Object3D.py b/_unittest/test_07_Object3D.py index bbfb5ad8054..439aa15bfe5 100644 --- a/_unittest/test_07_Object3D.py +++ b/_unittest/test_07_Object3D.py @@ -340,14 +340,14 @@ def test_print_object(self): o = self.create_copper_box() assert o.name in o.__str__() test_face = o.faces[0] - assert "FaceId" in test_face.__repr__() - assert "FaceId" in test_face.__str__() + assert isinstance(int(test_face.__str__()), int) + assert isinstance(int(test_face.__repr__()), int) test_edge = test_face.edges[0] - assert "EdgeId" in test_edge.__repr__() - assert "EdgeId" in test_edge.__str__() + assert isinstance(int(test_edge.__str__()), int) + assert isinstance(int(test_edge.__repr__()), int) test_vertex = test_face.vertices[0] - assert "Vertex" in test_vertex.__repr__() - assert "Vertex" in test_vertex.__str__() + assert isinstance(int(test_vertex.__str__()), int) + assert isinstance(int(test_vertex.__repr__()), int) def test_13_delete_self(self): o = self.create_copper_box() diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index b83305c3c82..7c4091ba855 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -103,15 +103,36 @@ class Design(AedtObjects): """ - def __str__(self): - pyaedt_details = " pyaedt API\n" - pyaedt_details += "pyaedt running AEDT Version {} \n".format(settings.aedt_version) - pyaedt_details += "Running {} tool in AEDT\n".format(self.design_type) - pyaedt_details += "Solution Type: {} \n".format(self.solution_type) - pyaedt_details += "Project Name: {} Design Name {} \n".format(self.project_name, self.design_name) + @property + def _pyaedt_details(self): + import platform + + from pyaedt import __version__ as pyaedt_version + + _p_dets = { + "PyAEDT Version": pyaedt_version, + "Product": "Ansys Electronics Desktop {}".format(settings.aedt_version), + "Design Type": self.design_type, + "Solution Type": self.solution_type, + "Project Name": self.project_name, + "Design Name": self.design_name, + "Project Path": "", + } if self._oproject: - pyaedt_details += 'Project Path: "{}" \n'.format(self.project_path) - return pyaedt_details + _p_dets["Project Path"] = self.project_file + _p_dets["Platform"] = platform.platform() + _p_dets["Python Version"] = platform.python_version() + _p_dets["AEDT Process ID"] = self.desktop_class.aedt_process_id + _p_dets["AEDT GRPC Port"] = self.desktop_class.port + return _p_dets + + def __str__(self): + return "\n".join( + [ + "{}:".format(each_name).ljust(25) + "{}".format(each_attr).ljust(25) + for each_name, each_attr in self._pyaedt_details.items() + ] + ) def __exit__(self, ex_type, ex_value, ex_traceback): if ex_type: @@ -133,6 +154,16 @@ def __setitem__(self, variable_name, variable_value): self.variable_manager[variable_name] = variable_value return True + @property + def info(self): + """Dictionary of the PyAEDT session information. + + Returns + ------- + dict + """ + return self._pyaedt_details + def _init_design(self, project_name, design_name, solution_type=None): # calls the method from the application class self._init_from_design( diff --git a/pyaedt/desktop.py b/pyaedt/desktop.py index 93b9bd14c82..65a79301e7d 100644 --- a/pyaedt/desktop.py +++ b/pyaedt/desktop.py @@ -655,7 +655,8 @@ def __init__( sys.path.append( os.path.join(self._main.sDesktopinstallDirectory, "common", "commonfiles", "IronPython", "DLLs") ) - + if "GetGrpcServerPort" in dir(self.odesktop): + self.port = self.odesktop.GetGrpcServerPort() # save the current desktop session in the database _desktop_sessions[self.aedt_process_id] = self diff --git a/pyaedt/modeler/cad/elements3d.py b/pyaedt/modeler/cad/elements3d.py index 854445d4cc8..06a86996415 100644 --- a/pyaedt/modeler/cad/elements3d.py +++ b/pyaedt/modeler/cad/elements3d.py @@ -232,11 +232,11 @@ def position(self): except Exception as e: return None - def __repr__(self): - return "Vertex " + str(self.id) - def __str__(self): - return "Vertex " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) class EdgePrimitive(EdgeTypePrimitive, object): @@ -366,11 +366,11 @@ def length(self): except: return False - def __repr__(self): - return "EdgeId " + str(self.id) - def __str__(self): - return "EdgeId " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) @pyaedt_function_handler() def create_object(self, non_model=False): @@ -420,11 +420,11 @@ def move_along_normal(self, offset=1.0): class FacePrimitive(object): """Contains the face object within the AEDT Desktop Modeler.""" - def __repr__(self): - return "FaceId " + str(self.id) - def __str__(self): - return "FaceId " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) def __init__(self, object3d, obj_id): """ diff --git a/pyaedt/modeler/cad/object3d.py b/pyaedt/modeler/cad/object3d.py index 44d2f729df9..592e3303c66 100644 --- a/pyaedt/modeler/cad/object3d.py +++ b/pyaedt/modeler/cad/object3d.py @@ -1887,10 +1887,4 @@ def _change_property(self, vPropChange): return self._primitives._change_geometry_property(vPropChange, self._m_name) def __str__(self): - return """ - name: {} id: {} object_type: {} - """.format( - self.name, - self.id, - self._object_type, - ) + return self.name From 6ddd4b88fc25cc49b43f3be8eb50a15d53a7528e Mon Sep 17 00:00:00 2001 From: pyAnsysUser <111706242+pyAnsysUser@users.noreply.github.com> Date: Mon, 6 Nov 2023 07:54:16 -0700 Subject: [PATCH 52/78] change code to reflect passed arguments (#3847) Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- pyaedt/edb_core/edb_data/primitives_data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyaedt/edb_core/edb_data/primitives_data.py b/pyaedt/edb_core/edb_data/primitives_data.py index a5170bdbc72..8896d96cb99 100644 --- a/pyaedt/edb_core/edb_data/primitives_data.py +++ b/pyaedt/edb_core/edb_data/primitives_data.py @@ -123,12 +123,12 @@ def layer_name(self): @layer_name.setter def layer_name(self, val): if isinstance(val, str) and val in list(self._core_stackup.layers.keys()): - lay = self._core_stackup.layers["TOP"]._edb_layer + lay = self._core_stackup.layers[val]._edb_layer if lay: self.primitive_object.SetLayer(lay) else: raise AttributeError("Layer {} not found in layer".format(val)) - elif isinstance(val, type(self._core_stackup.layers["TOP"])): + elif isinstance(val, type(self._core_stackup.layers[val])): try: self.primitive_object.SetLayer(val._edb_layer) except: From 6ce7943a13b403f6306ca642fc50ca48cf248c17 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:17:51 +0000 Subject: [PATCH 53/78] [pre-commit.ci] pre-commit autoupdate (#3851) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/python-jsonschema/check-jsonschema: 0.27.0 → 0.27.1](https://github.com/python-jsonschema/check-jsonschema/compare/0.27.0...0.27.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b7e229b5eeb..3b7ba2393c4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,7 +53,7 @@ repos: # validate GitHub workflow files - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.27.0 + rev: 0.27.1 hooks: - id: check-github-workflows From db50f96470e76a8487459962aad346165f348abc Mon Sep 17 00:00:00 2001 From: SMoraisAnsys <146729917+SMoraisAnsys@users.noreply.github.com> Date: Tue, 7 Nov 2023 10:46:29 +0100 Subject: [PATCH 54/78] CI: fix upload error in full documentation (#3844) Problem Building the full documentation with sphynx leads to the generation of a .doctree directory. This directory is composed of a file environment.pickle which has size > 100 Mb. Thus, the upload step of the full documentation workflow fails due to the size of such file (git does not allow files of > 100 Mb without using lfs). Solution Since the .doctree directory should not be versioned at all, we had a build-finished event to delete to .doctree directory after the documentation build. --- doc/source/conf.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 02f4d12852b..864471ad0ff 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -21,6 +21,7 @@ from docutils.parsers.rst import Directive from docutils import nodes from sphinx import addnodes +import shutil # <-----------------Override the sphinx pdf builder----------------> # Some pages do not render properly as per the expected Sphinx LaTeX PDF signature. @@ -70,9 +71,16 @@ def autodoc_skip_member(app, what, name, obj, skip, options): # return True if exclude else None +def remove_doctree(app, exception): + """Remove the .doctree directory created during the documentation build. + """ + shutil.rmtree(app.doctreedir) + + def setup(app): app.add_directive('pprint', PrettyPrintDirective) app.connect('autodoc-skip-member', autodoc_skip_member) + app.connect('build-finished', remove_doctree) local_path = os.path.dirname(os.path.realpath(__file__)) From d9fd4fa07f477a54005051a9c64e190f023cf479 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 7 Nov 2023 15:27:39 +0100 Subject: [PATCH 55/78] Add is used flag to material (#3854) --- _unittest/test_03_Materials.py | 2 ++ pyaedt/modules/Material.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/_unittest/test_03_Materials.py b/_unittest/test_03_Materials.py index 73f141114cf..53b23a0bbf1 100644 --- a/_unittest/test_03_Materials.py +++ b/_unittest/test_03_Materials.py @@ -227,7 +227,9 @@ def test_09_non_linear_materials(self, add_app): assert app.materials["myMat"].permittivity.type == "nonlinear" assert app.materials["myMat"].permeability.bunit == "tesla" mat2 = app.materials.add_material("myMat2") + assert not mat2.is_used assert app.modeler.create_box([0, 0, 0], [10, 10, 10], matname="myMat2") + assert app.materials.material_keys["mymat2"].is_used def test_10_add_material_sweep(self): assert self.aedtapp.materials.add_material_sweep(["copper", "aluminum"], "sweep_copper") diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index b770a0fe7e7..a768baacb9a 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -1132,6 +1132,14 @@ def __init__(self, materials, name, props=None): self.mod_since_lib = self._props["ModSinceLib"] del self._props["ModSinceLib"] + @property + def is_used(self): + """Checks if a project material is in use.""" + is_used = self._omaterial_manager.IsUsed(self.name) + if is_used == 0: + return False + return True + @property def coordinate_system(self): """Material coordinate system.""" From 4abc8f568302182156c8624c72d84065f37c0430 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 7 Nov 2023 16:17:36 +0100 Subject: [PATCH 56/78] Add hide content in 3DComponent (#3853) * Add hide content * Fix bot comments --- _unittest/test_08_Primitives3D.py | 7 +++++++ pyaedt/modeler/modeler3d.py | 14 ++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/_unittest/test_08_Primitives3D.py b/_unittest/test_08_Primitives3D.py index c03a624e751..4aa553bf993 100644 --- a/_unittest/test_08_Primitives3D.py +++ b/_unittest/test_08_Primitives3D.py @@ -1185,6 +1185,13 @@ def test_64_create_3d_component_encrypted(self): is_encrypted=True, password="password_test", ) + assert self.aedtapp.modeler.create_3dcomponent( + self.component3d_file, + included_cs="Global", + is_encrypted=True, + password="password_test", + hide_contents=["Solid"], + ) assert not self.aedtapp.modeler.create_3dcomponent( self.component3d_file, included_cs="Global", diff --git a/pyaedt/modeler/modeler3d.py b/pyaedt/modeler/modeler3d.py index 2b6a05bccce..7ebb7fccb7a 100644 --- a/pyaedt/modeler/modeler3d.py +++ b/pyaedt/modeler/modeler3d.py @@ -120,8 +120,9 @@ def create_3dcomponent( password_type : str, optional Password type. Options are ``UserSuppliedPassword`` and ``InternalPassword``. The default is ``UserSuppliedPassword``. - hide_contents : bool, optional - Whether to hide contents. The default is ``False``. + hide_contents : bool or list, optional + List of object names to hide when the component is encrypted. + If set to an empty list or ``False``, all objects are visible. replace_names : bool, optional Whether to replace objects and material names. The default is ``False``. @@ -161,6 +162,7 @@ def create_3dcomponent( return False if component_outline not in ["BoundingBox", "None"]: return False + hide_contents_flag = is_encrypted and isinstance(hide_contents, list) arg = [ "NAME:CreateData", "ComponentName:=", @@ -200,7 +202,7 @@ def create_3dcomponent( "PasswordType:=", password_type, "HideContents:=", - hide_contents, + hide_contents_flag, "ReplaceNames:=", replace_names, "ComponentOutline:=", @@ -220,7 +222,11 @@ def create_3dcomponent( if "CreateRegion:1" in self.oeditor.GetChildObject(el).GetChildNames(): objs.remove(el) arg.append("IncludedParts:="), arg.append(objs) - arg.append("HiddenParts:="), arg.append([]) + arg.append("HiddenParts:=") + if not hide_contents_flag: + arg.append([]) + else: + arg.append(hide_contents) if included_cs: allcs = included_cs else: From 4e5cf1387d62f132ea5c798f2ee808addb512a32 Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Wed, 8 Nov 2023 03:19:15 -0500 Subject: [PATCH 57/78] Fix documentation style of hdm parser. (#3830) * Fix documentation style of hdm parser. * Update pyaedt/sbrplus/hdm_parser.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/sbrplus/hdm_parser.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/sbrplus/hdm_parser.py --------- Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- pyaedt/modeler/circuits/PrimitivesEmit.py | 3 ++- pyaedt/sbrplus/hdm_parser.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pyaedt/modeler/circuits/PrimitivesEmit.py b/pyaedt/modeler/circuits/PrimitivesEmit.py index e3ce1f18486..a9843eb5426 100644 --- a/pyaedt/modeler/circuits/PrimitivesEmit.py +++ b/pyaedt/modeler/circuits/PrimitivesEmit.py @@ -86,7 +86,8 @@ def design_type(self): @pyaedt_function_handler() def __getitem__(self, compname): - """ + """Get a component by its name. + Parameters ---------- compname : str diff --git a/pyaedt/sbrplus/hdm_parser.py b/pyaedt/sbrplus/hdm_parser.py index c3ea95e6179..444ea9b7054 100644 --- a/pyaedt/sbrplus/hdm_parser.py +++ b/pyaedt/sbrplus/hdm_parser.py @@ -26,7 +26,7 @@ class Parser: """ def __init__(self, filename): - """Initializes parser object with the interpreted header and a pointer to the binary data""" + """Initialize parser object with the interpreted header and a pointer to the binary data.""" self.parser_types = {} self.parser_flags = {} self.parser_enums = {} @@ -42,11 +42,11 @@ def __init__(self, filename): self.binarycontent = binarycontent def parse_message(self): - """Parses the binary content of the HDM file""" + """Parse the binary content of the HDM file.""" return self._parse(self.message["type"]) def _parse(self, type_name): - """Generic parser method, dispatches to specialized ones""" + """Use a generic parser method, which dispatches to appropriate and specialized parsers.""" if self.parser_types[type_name]["type"] == "object": return self._parse_object(type_name) elif self.parser_types[type_name]["type"] == "internal": @@ -86,9 +86,9 @@ def _parse_simple_base_type(self, format="i", size=4, how_many=1, final_type=Non def _parse_list(self, type=None, base=None, size=1): """ - Parser for vector or list. 'vector's are to be interpreted in the linear algebra sense, - and converted to numpy.array. 'list's are Python lists. Only simple base types can be - interpreted as a numpy array + Parser for vector or list. A vector is interpreted in the linear algebra sense + and converted to a NumPy array. A list is converted to a Python list. Only simple base types can be + interpreted as a NumPy array. """ assert base != None res = [] @@ -115,7 +115,7 @@ def _parse_list(self, type=None, base=None, size=1): return res def _parse_object(self, name): - """Parser for an object message""" + """Parser for an object message.""" namesdict = {} for l in self.parser_types[name]["layout"]: type_to_parse = l["type"] @@ -163,7 +163,7 @@ def _parse_object(self, name): return self.objects[name](namesdict) def _read_header(self): - """Parses the header and prepares all data structures to interpret the binary content""" + """Parse the header and prepare all data structures to interpret the binary content.""" def build_type(self, key, val): type_i = val["type"] From bd026c94452387aac8fff57f67804b5814b6e612 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Wed, 8 Nov 2023 09:43:09 +0100 Subject: [PATCH 58/78] Siwave SYZ bug fix and refactor (#3840) * fix * fix * fix * fix * fix * fix * fix * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * fix * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * fix * fix * fix * fix * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/generic/LoadAEDTFile.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/simulation_setup.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * fix * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * fix * fix * fix * fix * Update pyaedt/edb.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> Co-authored-by: svandenb-dev <74993647+svandenb-dev@users.noreply.github.com> --- _unittest/test_00_EDB.py | 208 +--- examples/00-EDB/01_edb_example.py | 2 +- pyaedt/edb.py | 38 +- .../edb_data/hfss_simulation_setup_data.py | 628 +--------- pyaedt/edb_core/edb_data/padstacks_data.py | 4 - pyaedt/edb_core/edb_data/simulation_setup.py | 723 ++++++++++++ .../edb_data/siwave_simulation_setup_data.py | 1018 ++++++++++------- pyaedt/edb_core/siwave.py | 2 +- pyaedt/generic/LoadAEDTFile.py | 12 +- 9 files changed, 1417 insertions(+), 1218 deletions(-) create mode 100644 pyaedt/edb_core/edb_data/simulation_setup.py diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 82877a0249a..b3df33be11d 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -2060,6 +2060,7 @@ def test_129_hfss_simulation_setup(self): setup1.hfss_solver_settings.relative_residual = 0.0002 setup1.hfss_solver_settings.use_shell_elements = True + setup1b = edbapp.setups["setup1"] hfss_solver_settings = edbapp.setups["setup1"].hfss_solver_settings assert hfss_solver_settings.order_basis == "first" assert hfss_solver_settings.relative_residual == 0.0002 @@ -2226,72 +2227,55 @@ def test_129_hfss_simulation_setup(self): def test_130_siwave_dc_simulation_setup(self): setup1 = self.edbapp.create_siwave_dc_setup("DC1") - assert setup1.name == "DC1" - assert not setup1.compute_inductance - assert setup1.contact_radius == "0.1mm" - assert setup1.dc_slider_position == 1 - assert setup1.enabled - assert setup1.energy_error == 3.0 - assert setup1.max_init_mesh_edge_length == "2.5mm" - assert setup1.max_num_pass == 5 - assert setup1.min_num_pass == 1 - assert setup1.mesh_bondwires - assert setup1.mesh_vias - assert setup1.min_plane_area == "0.25mm2" - assert setup1.min_void_area == "0.01mm2" - assert setup1.num_bondwire_sides == 8 - assert setup1.num_via_sides == 8 - assert setup1.percent_local_refinement == 20.0 - assert setup1.perform_adaptive_refinement - assert setup1.plot_jv - assert not setup1.refine_bondwires - assert not setup1.refine_vias - setup1.name = "DC2" - setup1.compute_inductance = True - setup1.contact_radius = "0.2mm" - setup1.dc_slider_position = 2 - setup1.energy_error = 2.0 - setup1.max_init_mesh_edge_length = "5.5mm" - setup1.max_num_pass = 3 - setup1.min_num_pass = 2 - setup1.mesh_bondwires = False - setup1.mesh_vias = False - assert not setup1.mesh_bondwires - assert not setup1.mesh_vias - setup1.min_plane_area = "0.5mm2" - setup1.min_void_area = "0.021mm2" - setup1.num_bondwire_sides = 6 - setup1.num_via_sides = 10 - setup1.percent_local_refinement = 10.0 - setup1.perform_adaptive_refinement = False - setup1.plot_jv = False - setup1.refine_bondwires = True - setup1.refine_vias = True - - assert setup1.name == "DC2" - assert setup1.compute_inductance - assert setup1.contact_radius == "0.2mm" - assert setup1.dc_slider_position == 2 - assert setup1.energy_error == 2.0 - assert setup1.max_init_mesh_edge_length == "5.5mm" - assert setup1.max_num_pass == 3 - assert setup1.min_num_pass == 2 - assert setup1.mesh_bondwires - assert setup1.mesh_vias - assert setup1.min_plane_area == "0.5mm2" - assert setup1.min_void_area == "0.021mm2" - assert setup1.num_bondwire_sides == 6 - assert setup1.num_via_sides == 10 - assert setup1.percent_local_refinement == 10.0 - assert not setup1.perform_adaptive_refinement - assert not setup1.plot_jv - assert setup1.refine_bondwires - assert setup1.refine_vias + setup1.dc_settings.restore_default() + setup1.dc_advanced_settings.restore_default() + + settings = self.edbapp.setups["DC1"].get_configurations() + for k, v in setup1.dc_settings.defaults.items(): + if k in ["compute_inductance", "plot_jv"]: + continue + print(k) + assert settings["dc_settings"][k] == v + + for k, v in setup1.dc_advanced_settings.defaults.items(): + print(k) + assert settings["dc_advanced_settings"][k] == v + + for p in [0, 1, 2]: + setup1.set_dc_slider(p) + settings = self.edbapp.setups["DC1"].get_configurations() + for k, v in setup1.dc_settings.dc_defaults.items(): + print(k) + assert settings["dc_settings"][k] == v[p] + + for k, v in setup1.dc_advanced_settings.dc_defaults.items(): + print(k) + assert settings["dc_advanced_settings"][k] == v[p] def test_131_siwave_ac_simulation_setup(self): setup1 = self.edbapp.create_siwave_syz_setup("AC1") assert setup1.name == "AC1" assert setup1.enabled + setup1.advanced_settings.restore_default() + + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.defaults.items(): + if k in ["min_plane_area_to_mesh"]: + continue + assert settings["advanced_settings"][k] == v + + for p in [0, 1, 2]: + setup1.set_si_slider(p) + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.si_defaults.items(): + assert settings["advanced_settings"][k] == v[p] + + for p in [0, 1, 2]: + setup1.set_pi_slider(p) + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.pi_defaults.items(): + assert settings["advanced_settings"][k] == v[p] + sweep = setup1.add_frequency_sweep( "sweep1", frequency_sweep=[ @@ -2300,7 +2284,6 @@ def test_131_siwave_ac_simulation_setup(self): ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], ], ) - assert "sweep1" in setup1.frequency_sweeps assert "0" in sweep.frequencies assert not sweep.adaptive_sampling assert not sweep.adv_dc_extrapolation @@ -2309,9 +2292,9 @@ def test_131_siwave_ac_simulation_setup(self): assert not sweep.enforce_dc_and_causality assert sweep.enforce_passivity assert sweep.freq_sweep_type == "kInterpolatingSweep" - assert sweep.interp_use_full_basis - assert sweep.interp_use_port_impedance - assert sweep.interp_use_prop_const + assert sweep.interpolation_use_full_basis + assert sweep.interpolation_use_port_impedance + assert sweep.interpolation_use_prop_const assert sweep.max_solutions == 250 assert sweep.min_freq_s_mat_only_solve == "1MHz" assert not sweep.min_solved_freq @@ -2323,14 +2306,15 @@ def test_131_siwave_ac_simulation_setup(self): sweep.adaptive_sampling = True sweep.adv_dc_extrapolation = True + sweep.compute_dc_point = True sweep.auto_s_mat_only_solve = False sweep.enforce_causality = True sweep.enforce_dc_and_causality = True sweep.enforce_passivity = False sweep.freq_sweep_type = "kDiscreteSweep" - sweep.interp_use_full_basis = False - sweep.interp_use_port_impedance = False - sweep.interp_use_prop_const = False + sweep.interpolation_use_full_basis = False + sweep.interpolation_use_port_impedance = False + sweep.interpolation_use_prop_const = False sweep.max_solutions = 200 sweep.min_freq_s_mat_only_solve = "2MHz" sweep.min_solved_freq = "1Hz" @@ -2342,14 +2326,15 @@ def test_131_siwave_ac_simulation_setup(self): assert sweep.adaptive_sampling assert sweep.adv_dc_extrapolation + assert sweep.compute_dc_point assert not sweep.auto_s_mat_only_solve assert sweep.enforce_causality assert sweep.enforce_dc_and_causality assert not sweep.enforce_passivity assert sweep.freq_sweep_type == "kDiscreteSweep" - assert not sweep.interp_use_full_basis - assert not sweep.interp_use_port_impedance - assert not sweep.interp_use_prop_const + assert not sweep.interpolation_use_full_basis + assert not sweep.interpolation_use_port_impedance + assert not sweep.interpolation_use_prop_const assert sweep.max_solutions == 200 assert sweep.min_freq_s_mat_only_solve == "2MHz" assert sweep.min_solved_freq == "1Hz" @@ -2359,85 +2344,6 @@ def test_131_siwave_ac_simulation_setup(self): assert sweep.save_rad_fields_only assert sweep.use_q3d_for_dc - setup1.pi_slider_postion = 0 - setup1.pi_slider_postion = 1 - setup1.pi_slider_postion = 2 - setup1.si_slider_postion = 0 - setup1.si_slider_postion = 1 - setup1.si_slider_postion = 2 - assert setup1.automatic_mesh - assert setup1.enabled - assert setup1.dc_settings - assert setup1.ignore_non_functional_pads - assert setup1.include_coplane_coupling - assert setup1.include_fringe_coupling - assert not setup1.include_infinite_ground - assert not setup1.include_inter_plane_coupling - assert setup1.include_split_plane_coupling - assert setup1.include_trace_coupling - assert not setup1.include_vi_sources - assert setup1.infinite_ground_location == "0" - assert setup1.max_coupled_lines == 40 - assert setup1.mesh_frequency == "4GHz" - assert setup1.min_pad_area_to_mesh == "1mm2" - assert setup1.min_plane_area_to_mesh == "6.25e-6mm2" - assert setup1.min_void_area == "2mm2" - assert setup1.name == "AC1" - assert setup1.perform_erc - assert setup1.return_current_distribution - assert setup1.snap_length_threshold == "2.5um" - assert setup1.use_si_settings - assert setup1.use_custom_settings - assert setup1.xtalk_threshold == "-34" - - setup1.automatic_mesh = False - setup1.enabled = False - setup1.ignore_non_functional_pads = False - setup1.include_coplane_coupling = False - setup1.include_fringe_coupling = False - setup1.include_infinite_ground = True - setup1.include_inter_plane_coupling = True - setup1.include_split_plane_coupling = False - setup1.include_trace_coupling = False - assert setup1.use_custom_settings - setup1.include_vi_sources = True - setup1.infinite_ground_location = "0.1" - setup1.max_coupled_lines = 10 - setup1.mesh_frequency = "3GHz" - setup1.min_pad_area_to_mesh = "2mm2" - setup1.min_plane_area_to_mesh = "5.25e-6mm2" - setup1.min_void_area = "1mm2" - setup1.name = "AC2" - setup1.perform_erc = False - setup1.return_current_distribution = True - setup1.snap_length_threshold = "3.5um" - setup1.use_si_settings = False - assert not setup1.use_custom_settings - setup1.xtalk_threshold = "-44" - - assert not setup1.automatic_mesh - assert not setup1.enabled - assert not setup1.ignore_non_functional_pads - assert not setup1.include_coplane_coupling - assert not setup1.include_fringe_coupling - assert setup1.include_infinite_ground - assert setup1.include_inter_plane_coupling - assert not setup1.include_split_plane_coupling - assert not setup1.include_trace_coupling - assert setup1.include_vi_sources - assert setup1.infinite_ground_location == "0.1" - assert setup1.max_coupled_lines == 10 - assert setup1.mesh_frequency == "3GHz" - assert setup1.min_pad_area_to_mesh == "2mm2" - assert setup1.min_plane_area_to_mesh == "5.25e-6mm2" - assert setup1.min_void_area == "1mm2" - assert setup1.name == "AC2" - assert not setup1.perform_erc - assert setup1.return_current_distribution - assert setup1.snap_length_threshold == "3.5um" - assert not setup1.use_si_settings - assert setup1.xtalk_threshold == "-44" - def test_132_via_plating_ratio_check(self): assert self.edbapp.padstacks.check_and_fix_via_plating() @@ -2450,7 +2356,7 @@ def test_133_siwave_build_ac_prject(self): simconfig.solver_type = SolverType.SiwaveSYZ simconfig.mesh_freq = "40.25GHz" edbapp.build_simulation_project(simconfig) - assert edbapp.siwave_ac_setups[simconfig.setup_name].mesh_frequency == simconfig.mesh_freq + assert edbapp.siwave_ac_setups[simconfig.setup_name].advanced_settings.mesh_frequency == simconfig.mesh_freq edbapp.close() def test_134_create_port_between_pin_and_layer(self): diff --git a/examples/00-EDB/01_edb_example.py b/examples/00-EDB/01_edb_example.py index 6df7a797c2d..c2b71e1b18d 100644 --- a/examples/00-EDB/01_edb_example.py +++ b/examples/00-EDB/01_edb_example.py @@ -130,7 +130,7 @@ edb.siwave.create_current_source_on_net("IC2", "NetD3_2", "IC2", "GND", 1.0, 0, "I1") setup = edb.siwave.add_siwave_dc_analysis("myDCIR_4") setup.use_dc_custom_settings = True -setup.dc_slider_position = 0 +setup.set_dc_slider = 0 setup.add_source_terminal_to_ground("V1", 1) diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 3613c80450e..8e8f33f380b 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -274,7 +274,6 @@ def _clean_variables(self): self._siwave = None self._hfss = None self._nets = None - self._setups = {} self._layout_instance = None self._variables = None self._active_cell = None @@ -3195,7 +3194,7 @@ def build_simulation_project(self, simulation_setup): self.edbpath = legacy_name self.open_edb() return True - except: # pragma: no cover + except: return False @pyaedt_function_handler() @@ -3324,15 +3323,15 @@ def setups(self): Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`] """ + setups = {} for i in list(self.active_cell.SimulationSetups): - if i.GetName() not in self._setups: - if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS: - self._setups[i.GetName()] = HfssSimulationSetup(self, i.GetName(), i) - elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave: - self._setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i.GetName(), i) - elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR: - self._setups[i.GetName()] = SiwaveDCSimulationSetup(self, i.GetName(), i) - return self._setups + if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS: + setups[i.GetName()] = HfssSimulationSetup(self, i) + elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave: + setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i) + elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR: + setups[i.GetName()] = SiwaveDCSimulationSetup(self, i) + return setups @property def hfss_setups(self): @@ -3353,7 +3352,7 @@ def siwave_dc_setups(self): ------- Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCSimulationSetup`] """ - return {name: i for name, i in self.setups.items() if i.setup_type == "kSIWaveDCIR"} + return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveDCSimulationSetup)} @property def siwave_ac_setups(self): @@ -3363,10 +3362,10 @@ def siwave_ac_setups(self): ------- Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`] """ - return {name: i for name, i in self.setups.items() if i.setup_type == "kSIWave"} + return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveSYZSimulationSetup)} def create_hfss_setup(self, name=None): - """Create a setup from a template. + """Create an HFSS simulation setup from a template. Parameters ---------- @@ -3384,8 +3383,7 @@ def create_hfss_setup(self, name=None): """ if name in self.setups: return False - setup = HfssSimulationSetup(self, name) - self._setups[name] = setup + setup = HfssSimulationSetup(self).create(name) return setup @pyaedt_function_handler() @@ -3414,11 +3412,8 @@ def create_siwave_syz_setup(self, name=None): name = generate_unique_name("Siwave_SYZ") if name in self.setups: return False - setup = SiwaveSYZSimulationSetup(self, name) - setup.si_slider_postion = 1 - setup.pi_slider_postion = 1 - self._setups[name] = setup - return setup + SiwaveSYZSimulationSetup(self).create(name) + return self.setups[name] @pyaedt_function_handler() def create_siwave_dc_setup(self, name=None): @@ -3443,8 +3438,7 @@ def create_siwave_dc_setup(self, name=None): name = generate_unique_name("Siwave_DC") if name in self.setups: return False - setup = SiwaveDCSimulationSetup(self, name) - self._setups[name] = setup + setup = SiwaveDCSimulationSetup(self).create(name) return setup @pyaedt_function_handler() diff --git a/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py b/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py index 76e9cc8e6da..d7e6afecf7b 100644 --- a/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py @@ -1,487 +1,11 @@ +from pyaedt.edb_core.edb_data.simulation_setup import BaseSimulationSetup +from pyaedt.edb_core.edb_data.simulation_setup import EdbFrequencySweep from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.clr_module import Tuple from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler -class EdbFrequencySweep(object): - """Manages EDB methods for frequency sweep.""" - - def __init__(self, sim_setup, frequency_sweep=None, name=None, edb_sweep_data=None): - self._sim_setup = sim_setup - - if edb_sweep_data: - self._edb_sweep_data = edb_sweep_data - self._name = self._edb_sweep_data.Name - else: - if not name: - self._name = generate_unique_name("sweep") - else: - self._name = name - self._edb_sweep_data = self._sim_setup._edb.simsetupdata.SweepData(self._name) - self.set_frequencies(frequency_sweep) - - @pyaedt_function_handler() - def _update_sweep(self): - """Update sweep.""" - self._sim_setup._edb_sim_setup_info.SweepDataList.Clear() - for el in list(self._sim_setup.frequency_sweeps.values()): - self._sim_setup._edb_sim_setup_info.SweepDataList.Add(el._edb_sweep_data) - self._sim_setup._edb_sim_setup_info.SweepDataList.Add(self._edb_sweep_data) - return self._sim_setup._update_setup() - - @property - def name(self): - """Name of the sweep.""" - return self._edb_sweep_data.Name - - @name.setter - def name(self, value): - """Set name of this sweep""" - self._edb_sweep_data.Name = value - self._update_sweep() - - @property - def sweep_type(self): - """Sweep type.""" - return - - @property - def frequencies(self): - """List of frequencies points.""" - return list(self._edb_sweep_data.Frequencies) - - @property - def adaptive_sampling(self): - """Whether adaptive sampling is used. - - Returns - ------- - bool - ``True`` if adaptive sampling is used, ``False`` otherwise. - """ - return self._edb_sweep_data.AdaptiveSampling - - @property - def adv_dc_extrapolation(self): - """Whether to turn on advanced DC Extrapolation. - - Returns - ------- - bool - ``True`` if advanced DC Extrapolation is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.AdvDCExtrapolation - - @property - def auto_s_mat_only_solve(self): - """Whether to turn on Auto/Manual SMatrix only solve. - - Returns - ------- - bool - ``True`` if Auto/Manual SMatrix only solve is used, ``False`` otherwise. - """ - return self._edb_sweep_data.AutoSMatOnlySolve - - @property - def enforce_causality(self): - """Whether to enforce causality during interpolating sweep. - - Returns - ------- - bool - ``True`` if enforce causality is used, ``False`` otherwise. - """ - return self._edb_sweep_data.EnforceCausality - - @property - def enforce_dc_and_causality(self): - """Whether to enforce DC point and causality. - - Returns - ------- - bool - ``True`` if enforce dc point and causality is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.EnforceDCAndCausality - - @property - def enforce_passivity(self): - """Whether to enforce passivity during interpolating sweep. - - Returns - ------- - bool - ``True`` if enforce passivity is used, ``False`` otherwise. - """ - return self._edb_sweep_data.EnforcePassivity - - @property - def freq_sweep_type(self): - """Sweep type. - Options are: - - ``kInterpolatingSweep``. - - ``kDiscreteSweep``. - - ``kBroadbandFastSweep``. - - Returns - ------- - str - """ - return self._edb_sweep_data.FreqSweepType.ToString() - - @property - def interp_use_full_basis(self): - """Whether to use Full basis elements. - - Returns - ------- - bool - ``True`` if full basis interpolation is used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUseFullBasis - - @property - def interp_use_port_impedance(self): - """Whether to turn on the port impedance interpolation. - - Returns - ------- - bool - ``True`` if port impedance is used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUsePortImpedance - - @property - def interp_use_prop_const(self): - """Whether to use propagation constants. - - Returns - ------- - bool - ``True`` if propagation constants are used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUsePropConst - - @property - def interp_use_s_matrix(self): - """Whether to use S matrix. - - Returns - ------- - bool - ``True`` if S matrix are used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUseSMatrix - - @property - def max_solutions(self): - """Number of aximum solutions. - - Returns - ------- - int - """ - return self._edb_sweep_data.MaxSolutions - - @property - def min_freq_s_mat_only_solve(self): - """Minimum frequency SMatrix only solve. - - Returns - ------- - str - Frequency with units. - """ - return self._edb_sweep_data.MinFreqSMatOnlySolve - - @property - def min_solved_freq(self): - """Minimum solved frequency. - - Returns - ------- - str - Frequency with units. - """ - return self._edb_sweep_data.MinSolvedFreq - - @property - def passivity_tolerance(self): - """Tolerance for passivity enforcement. - - Returns - ------- - float - """ - return self._edb_sweep_data.PassivityTolerance - - @property - def relative_s_error(self): - """Specify S-parameter error tolerance for interpolating sweep. - - Returns - ------- - float - """ - return self._edb_sweep_data.RelativeSError - - @property - def save_fields(self): - """Whether to turn on or off the extraction of surface current data. - - Returns - ------- - bool - ``True`` if save fields is enabled, ``False`` otherwise. - """ - return self._edb_sweep_data.SaveFields - - @property - def save_rad_fields_only(self): - """Whether to turn on save radiated fields only. - - Returns - ------- - bool - ``True`` if save radiated field only is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.SaveRadFieldsOnly - - @property - def use_q3d_for_dc(self): - """Whether to enable Q3D solver for DC point extraction . - - Returns - ------- - bool - ``True`` if Q3d for DC point is used, ``False`` otherwise. - """ - return self._edb_sweep_data.UseQ3DForDC - - @adaptive_sampling.setter - def adaptive_sampling(self, value): - self._edb_sweep_data.AdaptiveSampling = value - self._update_sweep() - - @adv_dc_extrapolation.setter - def adv_dc_extrapolation(self, value): - self._edb_sweep_data.AdvDCExtrapolation = value - self._update_sweep() - - @auto_s_mat_only_solve.setter - def auto_s_mat_only_solve(self, value): - self._edb_sweep_data.AutoSMatOnlySolve = value - self._update_sweep() - - @enforce_causality.setter - def enforce_causality(self, value): - self._edb_sweep_data.EnforceCausality = value - self._update_sweep() - - @enforce_dc_and_causality.setter - def enforce_dc_and_causality(self, value): - self._edb_sweep_data.EnforceDCAndCausality = value - self._update_sweep() - - @enforce_passivity.setter - def enforce_passivity(self, value): - self._edb_sweep_data.EnforcePassivity = value - self._update_sweep() - - @freq_sweep_type.setter - def freq_sweep_type(self, value): - edb_freq_sweep_type = self._edb_sweep_data.TFreqSweepType - if value in [0, "kInterpolatingSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep - elif value in [1, "kDiscreteSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep - elif value in [2, "kBroadbandFastSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep - elif value in [3, "kNumSweepTypes"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes - self._edb_sweep_data.FreqSweepType.ToString() - - @interp_use_full_basis.setter - def interp_use_full_basis(self, value): - self._edb_sweep_data.InterpUseFullBasis = value - self._update_sweep() - - @interp_use_port_impedance.setter - def interp_use_port_impedance(self, value): - self._edb_sweep_data.InterpUsePortImpedance = value - self._update_sweep() - - @interp_use_prop_const.setter - def interp_use_prop_const(self, value): - self._edb_sweep_data.InterpUsePropConst = value - self._update_sweep() - - @interp_use_s_matrix.setter - def interp_use_s_matrix(self, value): - self._edb_sweep_data.InterpUseSMatrix = value - self._update_sweep() - - @max_solutions.setter - def max_solutions(self, value): - self._edb_sweep_data.MaxSolutions = value - self._update_sweep() - - @min_freq_s_mat_only_solve.setter - def min_freq_s_mat_only_solve(self, value): - self._edb_sweep_data.MinFreqSMatOnlySolve = value - self._update_sweep() - - @min_solved_freq.setter - def min_solved_freq(self, value): - self._edb_sweep_data.MinSolvedFreq = value - self._update_sweep() - - @passivity_tolerance.setter - def passivity_tolerance(self, value): - self._edb_sweep_data.PassivityTolerance = value - self._update_sweep() - - @relative_s_error.setter - def relative_s_error(self, value): - self._edb_sweep_data.RelativeSError = value - self._update_sweep() - - @save_fields.setter - def save_fields(self, value): - self._edb_sweep_data.SaveFields = value - self._update_sweep() - - @save_rad_fields_only.setter - def save_rad_fields_only(self, value): - self._edb_sweep_data.SaveRadFieldsOnly = value - self._update_sweep() - - @use_q3d_for_dc.setter - def use_q3d_for_dc(self, value): - self._edb_sweep_data.UseQ3DForDC = value - self._update_sweep() - - @pyaedt_function_handler() - def _set_frequencies(self, freq_sweep_string="Linear Step: 0GHz to 20GHz, step=0.05GHz"): - self._edb_sweep_data.SetFrequencies(freq_sweep_string) - self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_linear_scale(self, start="0.1GHz", stop="20GHz", step="50MHz"): - """Set a linear scale frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - step : str, float - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, step) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_linear_count(self, start="1kHz", stop="0.1GHz", count=10): - """Set a linear count frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - count : int - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - start = self._sim_setup._edb.arg_to_dim(start, "Hz") - stop = self._sim_setup._edb.arg_to_dim(stop, "Hz") - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, count) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_log_scale(self, start="1kHz", stop="0.1GHz", samples=10): - """Set a log count frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - samples : int - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - """ - start = self._sim_setup._edb.arg_to_dim(start, "Hz") - stop = self._sim_setup._edb.arg_to_dim(stop, "Hz") - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetLogFrequencies(start, stop, samples) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies(self, frequency_list=None): - """Set frequency list to the sweep frequencies. - - Parameters - ---------- - frequency_list : list, optional - List of lists with four elements. Each list must contain: - - 1- frequency type (``"linear count"``, ``"log scale"`` or ``"linear scale"``) - 2- start frequency - 3- stop frequency - 4- step frequency or count - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - if not frequency_list: - frequency_list = [ - ["linear count", "0", "1kHz", 1], - ["log scale", "1kHz", "0.1GHz", 10], - ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], - ] - temp = [] - for i in frequency_list: - if i[0] == "linear count": - temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) - elif i[0] == "linear scale": - temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) - elif i[0] == "log scale": - temp.extend(list(self._edb_sweep_data.SetLogFrequencies(i[1], i[2], i[3]))) - else: - return False - self._edb_sweep_data.Frequencies.Clear() - for i in temp: - self._edb_sweep_data.Frequencies.Add(i) - return self._update_sweep() - - class MeshOperation(object): """Mesh Operation Class.""" @@ -752,7 +276,7 @@ def __init__(self, parent): @property def _hfss_port_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.HFSSPortSettings + return self._parent.get_sim_setup_info.SimulationSettings.HFSSPortSettings @property def max_delta_z0(self): @@ -819,12 +343,12 @@ def enable_set_triangles_wave_port(self, value): class HfssSolverSettings(object): """Manages EDB methods for HFSS solver settings.""" - def __init__(self, parent): - self._parent = parent + def __init__(self, sim_setup): + self._parent = sim_setup @property def _hfss_solver_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.HFSSSolverSettings + return self._parent.get_sim_setup_info.SimulationSettings.HFSSSolverSettings @property def enhanced_low_freq_accuracy(self): @@ -993,7 +517,7 @@ def adaptive_settings(self): ------- :class:`pyaedt.edb_core.edb_data.hfss_simulation_setup_data.AdaptiveSettings` """ - return self._parent._edb_sim_setup_info.SimulationSettings.AdaptiveSettings + return self._parent.get_sim_setup_info.SimulationSettings.AdaptiveSettings @property def adaptive_frequency_data_list(self): @@ -1115,7 +639,7 @@ def save_fields(self, value): @property def save_rad_field_only(self): - """Whether to turn on save radiated fields only. + """Flag indicating if the saving of only radiated fields is turned on. Returns ------- @@ -1181,10 +705,10 @@ def add_adaptive_frequency_data(self, frequency=0, max_num_passes=10, max_delta_ bool ``True`` if method is successful, ``False`` otherwise. """ - low_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - low_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + low_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() low_freq_adapt_data.MaxPasses = max_num_passes - low_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(frequency).ToString() + low_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(frequency).ToString() self.adaptive_settings.AdaptiveFrequencyDataList.Clear() self.adaptive_settings.AdaptiveFrequencyDataList.Add(low_freq_adapt_data) return self._parent._update_setup() @@ -1211,14 +735,14 @@ def add_broadband_adaptive_frequency_data( bool ``True`` if method is successful, ``False`` otherwise. """ - low_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - low_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + low_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() low_freq_adapt_data.MaxPasses = max_num_passes - low_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(low_frequency).ToString() - high_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - high_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(low_frequency).ToString() + high_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + high_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() high_freq_adapt_data.MaxPasses = max_num_passes - high_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(high_frequency).ToString() + high_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(high_frequency).ToString() self.adaptive_settings.AdaptiveFrequencyDataList.Clear() self.adaptive_settings.AdaptiveFrequencyDataList.Add(low_freq_adapt_data) self.adaptive_settings.AdaptiveFrequencyDataList.Add(high_freq_adapt_data) @@ -1233,7 +757,7 @@ def __init__(self, parent): @property def _defeature_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.DefeatureSettings + return self._parent.get_sim_setup_info.SimulationSettings.DefeatureSettings @property def defeature_abs_length(self): @@ -1401,7 +925,7 @@ def __init__( @property def _via_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.ViaSettings + return self._parent.get_sim_setup_info.SimulationSettings.ViaSettings @property def via_density(self): @@ -1478,7 +1002,7 @@ def __init__(self, parent): @property def _advanced_mesh_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.AdvancedMeshSettings + return self._parent.get_sim_setup_info.SimulationSettings.AdvancedMeshSettings @property def layer_snap_tol(self): @@ -1537,7 +1061,7 @@ def __init__(self, parent): @property def _curve_approx_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.CurveApproxSettings + return self._parent.get_sim_setup_info.SimulationSettings.CurveApproxSettings @property def arc_angle(self): @@ -1623,7 +1147,7 @@ def __init__(self, parent): @property def _dcr_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.DCRSettings + return self._parent.get_sim_setup_info.SimulationSettings.DCRSettings @property def conduction_max_passes(self): @@ -1701,82 +1225,25 @@ def conduction_per_refine(self, value): self._parent._update_setup() -class HfssSimulationSetup(object): +class HfssSimulationSetup(BaseSimulationSetup): """Manages EDB methods for HFSS simulation setup.""" - def __init__(self, edb, name=None, edb_hfss_sim_setup=None): - self._edb = edb - self._name = None + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) + self._setup_type = "kHFSS" self._mesh_operations = {} - if edb_hfss_sim_setup: - self._edb_sim_setup = edb_hfss_sim_setup - self._edb_sim_setup_info = edb_hfss_sim_setup.GetSimSetupInfo() - self._name = edb_hfss_sim_setup.GetName() - else: - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.HFSSSimulationSettings - ]() - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("hfss") - else: - self._edb_sim_setup_info.Name = name - self._name = name - self.hfss_solver_settings.order_basis = "mixed" - - self._edb_sim_setup = self._edb.edb_api.utility.utility.HFSSSimulationSetup(self._edb_sim_setup_info) - self._update_setup() - - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info - @pyaedt_function_handler() - def _update_setup(self): - mesh_operations = self._edb_sim_setup_info.SimulationSettings.MeshOperations - mesh_operations.Clear() - for mop in self.mesh_operations.values(): - mesh_operations.Add(mop.mesh_operation) - - self._edb_sim_setup = self._edb.edb_api.utility.utility.HFSSSimulationSetup(self._edb_sim_setup_info) - - if self._name in self._edb.setups: - self._edb.active_cell.DeleteSimulationSetup(self._name) - self._name = self.name - self._edb.active_cell.AddSimulationSetup(self._edb_sim_setup) - for i in list(self._edb.active_cell.SimulationSetups): - if i.GetSimSetupInfo().Name == self._name: - self._edb_sim_setup_info = i.GetSimSetupInfo() - return True - return False - - @property - def frequency_sweeps(self): - """Frequency sweep list. - - Returns - ------- - List of :class:`pyaedt.edb_core.edb_data.hfss_simulation_setup_data.EdbFrequencySweep` - """ - sweep_data_list = {} - for i in list(self._edb_sim_setup_info.SweepDataList): - sweep_data_list[i.Name] = EdbFrequencySweep(self, None, i.Name, i) - return sweep_data_list + def create(self, name=None): + """Create a HFSS setup.""" + self._name = name + self._create(name) + return self @property - def name(self): - """Name of the setup.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - legacy_name = self._name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] - self._name = value + def get_sim_setup_info(self): + """Get simulation setup information.""" + return self._edb_object.GetSimSetupInfo() @property def solver_slider_type(self): @@ -1791,35 +1258,30 @@ def solver_slider_type(self): ------- str """ - return self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.ToString() + return self.get_sim_setup_info.SimulationSettings.TSolveSliderType.ToString() @solver_slider_type.setter def solver_slider_type(self, value): """Set solver slider type.""" solver_types = { - "kFast": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaWirebond, - "kMedium": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaRibbon, - "kAccurate": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaMesh, - "kNumSliderTypes": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaField, + "kFast": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaWirebond, + "kMedium": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaRibbon, + "kAccurate": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaMesh, + "kNumSliderTypes": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaField, } - self._edb_sim_setup_info.SimulationSettings.TSolveSliderType = solver_types[value] + self.get_sim_setup_info.SimulationSettings.TSolveSliderType = solver_types[value] self._update_setup() @property def is_auto_setup(self): """Whether if auto setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.IsAutoSetup + return self.get_sim_setup_info.SimulationSettings.IsAutoSetup @is_auto_setup.setter def is_auto_setup(self, value): - self._edb_sim_setup_info.SimulationSettings.IsAutoSetup = value + self.get_sim_setup_info.SimulationSettings.IsAutoSetup = value self._update_setup() - @property - def setup_type(self): - """Setup type.""" - return self._edb_sim_setup_info.SimulationSettings.SetupType - @property def hfss_solver_settings(self): """Manages EDB methods for HFSS solver settings. @@ -1919,7 +1381,7 @@ def mesh_operations(self): """ if self._mesh_operations: return self._mesh_operations - settings = self._edb_sim_setup_info.SimulationSettings.MeshOperations + settings = self.get_sim_setup_info.SimulationSettings.MeshOperations self._mesh_operations = {} for i in list(settings): if i.MeshOpType == i.TMeshOpType.kMeshSetupLength: @@ -1970,7 +1432,7 @@ def add_length_mesh_operation( """ if not name: name = generate_unique_name("skin") - mesh_operation = MeshOperationLength(self, self._edb.simsetupdata.LengthMeshOperation()) + mesh_operation = MeshOperationLength(self, self._pedb.simsetupdata.LengthMeshOperation()) mesh_operation.mesh_region = mesh_region mesh_operation.name = name mesh_operation.nets_layers_list = net_layer_list @@ -2024,7 +1486,7 @@ def add_skin_depth_mesh_operation( """ if not name: name = generate_unique_name("length") - mesh_operation = MeshOperationSkinDepth(self, self._edb.simsetupdata.SkinDepthMeshOperation()) + mesh_operation = MeshOperationSkinDepth(self, self._pedb.simsetupdata.SkinDepthMeshOperation()) mesh_operation.mesh_region = mesh_region mesh_operation.name = name mesh_operation.nets_layers_list = net_layer_list diff --git a/pyaedt/edb_core/edb_data/padstacks_data.py b/pyaedt/edb_core/edb_data/padstacks_data.py index ed25ff69b08..4c654868c4d 100644 --- a/pyaedt/edb_core/edb_data/padstacks_data.py +++ b/pyaedt/edb_core/edb_data/padstacks_data.py @@ -1037,10 +1037,6 @@ def create_port(self, name=None, reference=None, is_circuit_port=False): Negative terminal of the port. is_circuit_port : bool, optional Whether it is a circuit port. - - Returns - ------- - """ terminal = self._create_terminal(name) if reference: diff --git a/pyaedt/edb_core/edb_data/simulation_setup.py b/pyaedt/edb_core/edb_data/simulation_setup.py new file mode 100644 index 00000000000..adfe33d7562 --- /dev/null +++ b/pyaedt/edb_core/edb_data/simulation_setup.py @@ -0,0 +1,723 @@ +from pyaedt.generic.general_methods import generate_unique_name +from pyaedt.generic.general_methods import pyaedt_function_handler + + +class BaseSimulationSetup(object): + """Provide base simulation setup. + + Parameters + ---------- + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_object : :class:`Ansys.Ansoft.Edb.Utility.SIWaveSimulationSetup`, + :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, + :class:`Ansys.Ansoft.Edb.Utility.HFSSSimulationSettings` + Edb object. + """ + + def __init__(self, pedb, edb_setup=None): + self._pedb = pedb + self._edb_object = edb_setup + self._setup_type = "" + self._setup_type_mapping = { + "kHFSS": self._pedb.simsetupdata.HFSSSimulationSettings, + "kPEM": None, + "kSIwave": self._pedb.simsetupdata.SIwave.SIWSimulationSettings, + "kLNA": None, + "kTransient": None, + "kQEye": None, + "kVEye": None, + "kAMI": None, + "kAnalysisOption": None, + "kSIwaveDCIR": self._pedb.simsetupdata.SIwave.SIWDCIRSimulationSettings, + "kSIwaveEMI": None, + "kHFSSPI": None, + "kDDRwizard": None, + "kQ3D": None, + "kNumSetupTypes": None, + } + if self._edb_object: + self._name = self._edb_object.GetName() + + self._sweep_list = {} + + @pyaedt_function_handler + def _create(self, name=None): + """Create a setup.""" + if not name: + name = generate_unique_name(self.setup_type) + self._name = name + + setup_type = self._setup_type_mapping[self._setup_type] + edb_setup_info = self._pedb.simsetupdata.SimSetupInfo[setup_type]() + edb_setup_info.Name = name + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @pyaedt_function_handler + def _set_edb_setup_info(self, edb_setup_info): + """Create a setup object from setup information object.""" + utility = self._pedb._edb.Utility + setup_type_mapping = { + "kHFSS": utility.HFSSSimulationSetup, + "kPEM": None, + "kSIwave": utility.SIWaveSimulationSetup, + "kLNA": None, + "kTransient": None, + "kQEye": None, + "kVEye": None, + "kAMI": None, + "kAnalysisOption": None, + "kSIwaveDCIR": utility.SIWaveDCIRSimulationSetup, + "kSIwaveEMI": None, + "kHFSSPI": None, + "kDDRwizard": None, + "kQ3D": None, + "kNumSetupTypes": None, + } + setup_utility = setup_type_mapping[self._setup_type] + return setup_utility(edb_setup_info) + + @pyaedt_function_handler() + def _update_setup(self): + """Update setup in EDB.""" + if self._setup_type == "kHFSS": + mesh_operations = self.get_sim_setup_info.SimulationSettings.MeshOperations + mesh_operations.Clear() + for mop in self.mesh_operations.values(): + mesh_operations.Add(mop.mesh_operation) + + if self._name in self._pedb.setups: + self._pedb.layout.cell.DeleteSimulationSetup(self._name) + if not self._pedb.layout.cell.AddSimulationSetup(self._edb_object): + raise Exception("Updating setup {} failed.".format(self._name)) + else: + return True + + @property + def enabled(self): + """Whether the setup is enabled.""" + return self.get_sim_setup_info.SimulationSettings.Enabled + + @enabled.setter + def enabled(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.Enabled = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def name(self): + """Name of the setup.""" + return self._edb_object.GetName() + + @name.setter + def name(self, value): + self._pedb.layout.cell.DeleteSimulationSetup(self.name) + edb_setup_info = self.get_sim_setup_info + edb_setup_info.Name = value + self._name = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def position(self): + """Position in the setup list.""" + return self.get_sim_setup_info.Position + + @position.setter + def position(self, value): + edb_setup_info = self.get_sim_setup_info.SimulationSettings + edb_setup_info.Position = value + self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def setup_type(self): + """Type of the setup.""" + return self.get_sim_setup_info.SimSetupType.ToString() + + @property + def frequency_sweeps(self): + """List of frequency sweeps.""" + temp = {} + for i in list(self.get_sim_setup_info.SweepDataList): + temp[i.Name] = EdbFrequencySweep(self, None, i.Name, i) + return temp + + @pyaedt_function_handler + def _add_frequency_sweep(self, sweep_data): + """Add a frequency sweep. + + Parameters + ---------- + sweep_data: EdbFrequencySweep + """ + self._sweep_list[sweep_data.name] = sweep_data + edb_setup_info = self.get_sim_setup_info + + if self._setup_type in ["kSIwave", "kHFSS"]: + for _, v in self._sweep_list.items(): + edb_setup_info.SweepDataList.Add(v._edb_object) + + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @pyaedt_function_handler + def delete_frequency_sweep(self, sweep_data): + """Delete a frequency sweep. + + Parameters + ---------- + sweep_data : EdbFrequencySweep + """ + name = sweep_data.name + if name in self._sweep_list: + self._sweep_list.pop(name) + + fsweep = [] + for k, val in self.frequency_sweeps.items(): + if not k == name: + fsweep.append(val) + self.get_sim_setup_info.SweepDataList.Clear() + for i in fsweep: + self.get_sim_setup_info.SweepDataList.Add(i._edb_object) + self._update_setup() + return True if name in self.frequency_sweeps else False + + @pyaedt_function_handler() + def add_frequency_sweep(self, name=None, frequency_sweep=None): + """Add frequency sweep. + + Parameters + ---------- + name : str, optional + Name of the frequency sweep. + frequency_sweep : list, optional + List of frequency points. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.simulation_setup_data.EdbFrequencySweep` + + Examples + -------- + >>> setup1 = edbapp.create_siwave_syz_setup("setup1") + >>> setup1.add_frequency_sweep(frequency_sweep=[ + ... ["linear count", "0", "1kHz", 1], + ... ["log scale", "1kHz", "0.1GHz", 10], + ... ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], + ... ]) + """ + if name in self.frequency_sweeps: + return False + + if not frequency_sweep: + frequency_sweep = [["linear scale", "0.1GHz", "10GHz", "0.1GHz"]] + elif not isinstance(frequency_sweep[0], list): + frequency_sweep = [frequency_sweep] + + if not name: + name = generate_unique_name("sweep") + sweep = EdbFrequencySweep(self, frequency_sweep, name) + self._add_frequency_sweep(sweep) + self._update_setup() + return sweep + + +class EdbFrequencySweep(object): + """Manages EDB methods for a frequency sweep. + + Parameters + ---------- + sim_setup : :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup` + name : str, optional + Name of the frequency sweep. + edb_sweep_data : :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, optional + Edb object. + """ + + def __init__(self, sim_setup, frequency_sweep=None, name=None, edb_sweep_data=None): + self._sim_setup = sim_setup + + if edb_sweep_data: + self._edb_sweep_data = edb_sweep_data + self._name = self._edb_sweep_data.Name + else: + if not name: + self._name = generate_unique_name("sweep") + else: + self._name = name + self._edb_sweep_data = self._pedb.simsetupdata.SweepData(self._name) + self.set_frequencies(frequency_sweep) + + @property + def _edb_object(self): + return self._edb_sweep_data + + @property + def _pedb(self): + """EDB.""" + return self._sim_setup._pedb + + @pyaedt_function_handler() + def _update_sweep(self): + """Update the sweep.""" + self._sim_setup.delete_frequency_sweep(self) + self._sim_setup._add_frequency_sweep(self) + return + + @property + def name(self): + """Name of the sweep.""" + return self._edb_sweep_data.Name + + @name.setter + def name(self, value): + self._edb_sweep_data.Name = value + self._update_sweep() + + @property + def sweep_type(self): + """Sweep type.""" + return + + @property + def frequencies(self): + """List of frequency points.""" + return list(self._edb_sweep_data.Frequencies) + + @property + def adaptive_sampling(self): + """Whether adaptive sampling is used. + + Returns + ------- + bool + ``True`` if adaptive sampling is used, ``False`` otherwise. + """ + return self._edb_sweep_data.AdaptiveSampling + + @property + def adv_dc_extrapolation(self): + """Flag indicating if advanced DC extrapolation is turned on. + + Returns + ------- + bool + ``True`` if advanced DC Extrapolation is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.AdvDCExtrapolation + + @property + def compute_dc_point(self): + """Flag indication if compute exact dc point is turned on.""" + return self._edb_sweep_data.ComputeDCPoint + + @compute_dc_point.setter + def compute_dc_point(self, value): + self._edb_sweep_data.ComputeDCPoint = value + self._update_sweep() + + @property + def auto_s_mat_only_solve(self): + """Flag indication if Auto SMatrix only solve is turned on.""" + return self._edb_sweep_data.AutoSMatOnlySolve + + @property + def enforce_causality(self): + """Whether to enforce causality during interpolating sweep. + + Returns + ------- + bool + ``True`` if enforce causality is used, ``False`` otherwise. + """ + return self._edb_sweep_data.EnforceCausality + + @property + def enforce_dc_and_causality(self): + """Flag indicating if DC point and causality are enforced. + + Returns + ------- + bool + ``True`` if enforce dc point and causality is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.EnforceDCAndCausality + + @property + def enforce_passivity(self): + """Whether to enforce passivity during interpolating sweep. + + Returns + ------- + bool + ``True`` if enforce passivity is used, ``False`` otherwise. + """ + return self._edb_sweep_data.EnforcePassivity + + @property + def freq_sweep_type(self): + """Sweep type. Options are. + + - ``"kInterpolatingSweep"`` + - ``"kDiscreteSweep"`` + - ``"kBroadbandFastSweep"`` + + Returns + ------- + str + Sweep type. + """ + return self._edb_sweep_data.FreqSweepType.ToString() + + @property + def interpolation_use_full_basis(self): + """Whether to use Full basis elements. + + Returns + ------- + bool + ``True`` if full basis interpolation is used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUseFullBasis + + @property + def interpolation_use_port_impedance(self): + """Whether to turn on the port impedance interpolation. + + Returns + ------- + bool + ``True`` if port impedance is used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUsePortImpedance + + @property + def interpolation_use_prop_const(self): + """Flag indicating if propagation constants are used. + + Returns + ------- + bool + ``True`` if propagation constants are used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUsePropConst + + @property + def interpolation_use_s_matrix(self): + """Flag indicating if the S matrix is used. + + Returns + ------- + bool + ``True`` if S matrix are used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUseSMatrix + + @property + def max_solutions(self): + """Number of aximum solutions. + + Returns + ------- + int + """ + return self._edb_sweep_data.MaxSolutions + + @property + def min_freq_s_mat_only_solve(self): + """Minimum frequency SMatrix only solve. + + Returns + ------- + str + Frequency with units. + """ + return self._edb_sweep_data.MinFreqSMatOnlySolve + + @property + def min_solved_freq(self): + """Minimum solved frequency. + + Returns + ------- + str + Frequency with units. + """ + return self._edb_sweep_data.MinSolvedFreq + + @property + def passivity_tolerance(self): + """Tolerance for passivity enforcement. + + Returns + ------- + float + """ + return self._edb_sweep_data.PassivityTolerance + + @property + def relative_s_error(self): + """S-parameter error tolerance for the interpolating sweep. + + Returns + ------- + float + """ + return self._edb_sweep_data.RelativeSError + + @property + def save_fields(self): + """Flag indicating if the extraction of surface current data is turned on. + + Returns + ------- + bool + ``True`` if save fields is enabled, ``False`` otherwise. + """ + return self._edb_sweep_data.SaveFields + + @property + def save_rad_fields_only(self): + """Flag indicating if the saving of only radiated fields is turned on. + + Returns + ------- + bool + ``True`` if save radiated field only is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.SaveRadFieldsOnly + + @property + def use_q3d_for_dc(self): + """Flag indicating if The Q3D solver is enabled for DC point extraction. + + Returns + ------- + bool + ``True`` if Q3d for DC point is used, ``False`` otherwise. + """ + return self._edb_sweep_data.UseQ3DForDC + + @adaptive_sampling.setter + def adaptive_sampling(self, value): + self._edb_sweep_data.AdaptiveSampling = value + self._update_sweep() + + @adv_dc_extrapolation.setter + def adv_dc_extrapolation(self, value): + self._edb_sweep_data.AdvDCExtrapolation = value + self._update_sweep() + + @auto_s_mat_only_solve.setter + def auto_s_mat_only_solve(self, value): + self._edb_sweep_data.AutoSMatOnlySolve = value + self._update_sweep() + + @enforce_causality.setter + def enforce_causality(self, value): + self._edb_sweep_data.EnforceCausality = value + self._update_sweep() + + @enforce_dc_and_causality.setter + def enforce_dc_and_causality(self, value): + self._edb_sweep_data.EnforceDCAndCausality = value + self._update_sweep() + + @enforce_passivity.setter + def enforce_passivity(self, value): + self._edb_sweep_data.EnforcePassivity = value + self._update_sweep() + + @freq_sweep_type.setter + def freq_sweep_type(self, value): + edb_freq_sweep_type = self._edb_sweep_data.TFreqSweepType + if value in [0, "kInterpolatingSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep + elif value in [1, "kDiscreteSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep + elif value in [2, "kBroadbandFastSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep + elif value in [3, "kNumSweepTypes"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes + self._edb_sweep_data.FreqSweepType.ToString() + + @interpolation_use_full_basis.setter + def interpolation_use_full_basis(self, value): + self._edb_sweep_data.InterpUseFullBasis = value + self._update_sweep() + + @interpolation_use_port_impedance.setter + def interpolation_use_port_impedance(self, value): + self._edb_sweep_data.InterpUsePortImpedance = value + self._update_sweep() + + @interpolation_use_prop_const.setter + def interpolation_use_prop_const(self, value): + self._edb_sweep_data.InterpUsePropConst = value + self._update_sweep() + + @interpolation_use_s_matrix.setter + def interpolation_use_s_matrix(self, value): + self._edb_sweep_data.InterpUseSMatrix = value + self._update_sweep() + + @max_solutions.setter + def max_solutions(self, value): + self._edb_sweep_data.MaxSolutions = value + self._update_sweep() + + @min_freq_s_mat_only_solve.setter + def min_freq_s_mat_only_solve(self, value): + self._edb_sweep_data.MinFreqSMatOnlySolve = value + self._update_sweep() + + @min_solved_freq.setter + def min_solved_freq(self, value): + self._edb_sweep_data.MinSolvedFreq = value + self._update_sweep() + + @passivity_tolerance.setter + def passivity_tolerance(self, value): + self._edb_sweep_data.PassivityTolerance = value + self._update_sweep() + + @relative_s_error.setter + def relative_s_error(self, value): + self._edb_sweep_data.RelativeSError = value + self._update_sweep() + + @save_fields.setter + def save_fields(self, value): + self._edb_sweep_data.SaveFields = value + self._update_sweep() + + @save_rad_fields_only.setter + def save_rad_fields_only(self, value): + self._edb_sweep_data.SaveRadFieldsOnly = value + self._update_sweep() + + @use_q3d_for_dc.setter + def use_q3d_for_dc(self, value): + self._edb_sweep_data.UseQ3DForDC = value + self._update_sweep() + + @pyaedt_function_handler() + def _set_frequencies(self, freq_sweep_string="Linear Step: 0GHz to 20GHz, step=0.05GHz"): + self._edb_sweep_data.SetFrequencies(freq_sweep_string) + self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_linear_scale(self, start="0.1GHz", stop="20GHz", step="50MHz"): + """Set a linear scale frequency sweep. + + Parameters + ---------- + start : str, float, optional + Start frequency. The default is ``"0.1GHz"``. + stop : str, float, optional + Stop frequency. The default is ``"20GHz"``. + step : str, float, optional + Step frequency. The default is ``"50MHz"``. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, step) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_linear_count(self, start="1kHz", stop="0.1GHz", count=10): + """Set a linear count frequency sweep. + + Parameters + ---------- + start : str, float + Start frequency. + stop : str, float + Stop frequency. + count : int + Step frequency. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + start = self._sim_setup._pedb.arg_to_dim(start, "Hz") + stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz") + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, count) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_log_scale(self, start="1kHz", stop="0.1GHz", samples=10): + """Set a log-count frequency sweep. + + Parameters + ---------- + start : str, float, optional + Start frequency. The default is ``"1kHz"``. + stop : str, float, optional + Stop frequency. The default is ``"0.1GHz"``. + samples : int, optional + Step frequency. The default is ``10``. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + """ + start = self._sim_setup._pedb.arg_to_dim(start, "Hz") + stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz") + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetLogFrequencies(start, stop, samples) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies(self, frequency_list=None, update=True): + """Set frequency list to the sweep frequencies. + + Parameters + ---------- + frequency_list : list, optional + List of lists with four elements. The default is ``None``. If provided, each list must contain: + 1 - frequency type (``"linear count"``, ``"log scale"``, or ``"linear scale"``) + 2 - start frequency + 3 - stop frequency + 4 - step frequency or count + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + if not frequency_list: + frequency_list = [ + ["linear count", "0", "1kHz", 1], + ["log scale", "1kHz", "0.1GHz", 10], + ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], + ] + temp = [] + for i in frequency_list: + if i[0] == "linear count": + temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) + elif i[0] == "linear scale": + temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) + elif i[0] == "log scale": + temp.extend(list(self._edb_sweep_data.SetLogFrequencies(i[1], i[2], i[3]))) + else: + return False + self._edb_sweep_data.Frequencies.Clear() + for i in temp: + self._edb_sweep_data.Frequencies.Add(i) + if update: + return self._update_sweep() diff --git a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py index 71e10479425..90abe4e3f2e 100644 --- a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py @@ -1,19 +1,131 @@ -from pyaedt.edb_core.edb_data.hfss_simulation_setup_data import EdbFrequencySweep +from pyaedt.edb_core.edb_data.simulation_setup import BaseSimulationSetup from pyaedt.edb_core.general import convert_netdict_to_pydict from pyaedt.edb_core.general import convert_pydict_to_netdict -from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import is_linux from pyaedt.generic.general_methods import pyaedt_function_handler -class SiwaveAdvancedSettings(object): +def _parse_value(v): + """Parse value in C sharp format.""" + # duck typing parse of the value 'v' + if v is None or v == "": + pv = v + elif v == "true": + pv = True + elif v == "false": + pv = False + else: + try: + pv = int(v) + except ValueError: + try: + pv = float(v) + except ValueError: + if isinstance(v, str) and v[0] == v[-1] == "'": + pv = v[1:-1] + else: + pv = v + return pv + + +class SettingsBase(object): + """Provide base settings.""" + def __init__(self, parent): self._parent = parent @property def sim_setup_info(self): """EDB internal simulation setup object.""" - return self._parent._edb_sim_setup_info + + return self._parent.get_sim_setup_info + + @pyaedt_function_handler + def get_configurations(self): + """Get all attributes. + + Returns + ------- + dict + """ + temp = {} + attrs_list = [i for i in dir(self) if not i.startswith("_")] + attrs_list = [ + i + for i in attrs_list + if i + not in [ + "get_configurations", + "sim_setup_info", + "defaults", + "si_defaults", + "pi_defaults", + "set_dc_slider", + "set_si_slider", + "set_pi_slider", + ] + ] + for i in attrs_list: + temp[i] = self.__getattribute__(i) + return temp + + @pyaedt_function_handler + def restore_default(self): + for k, val in self.defaults.items(): + self.__setattr__(k, val) + + +class AdvancedSettings(SettingsBase): + def __init__(self, parent): + super().__init__(parent) + self.defaults = { + "automatic_mesh": True, + "ignore_non_functional_pads": True, + "include_coplane_coupling": True, + "include_fringe_coupling": True, + "include_infinite_ground": False, + "include_inter_plane_coupling": False, + "include_split_plane_coupling": True, + "include_trace_coupling": True, + "include_vi_sources": False, + "infinite_ground_location": "0", + "max_coupled_lines": 12, + "mesh_frequency": "4GHz", + "min_pad_area_to_mesh": "28mm2", + "min_plane_area_to_mesh": "5e-5mm2", + "min_void_area": "2mm2", + "perform_erc": False, + "return_current_distribution": False, + "snap_length_threshold": "2.5um", + "xtalk_threshold": "-34", + } + + self.si_defaults = { + "include_coplane_coupling": [False, True, True], + "include_fringe_coupling": [False, True, True], + "include_inter_plane_coupling": [False, False, False], + "include_split_plane_coupling": [False, True, True], + "max_coupled_lines": [12, 12, 40], + "return_current_distribution": [False, False, True], + } + + self.pi_defaults = { + "include_coplane_coupling": [False, False, True], + "include_fringe_coupling": [False, True, True], + "include_split_plane_coupling": [False, False, True], + "include_trace_coupling": [False, False, True], + "max_coupled_lines": [12, 12, 40], + } + + @pyaedt_function_handler + def set_si_slider(self, value): + for k, val in self.si_defaults.items(): + self.__setattr__(k, val[value]) + + @pyaedt_function_handler + def set_pi_slider(self, value): + for k, val in self.pi_defaults.items(): + self.__setattr__(k, val[value]) @property def include_inter_plane_coupling(self): @@ -246,130 +358,286 @@ def mesh_frequency(self): ------- str """ - self.sim_setup_info.SimulationSettings.UseCustomSettings = True return self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency @include_inter_plane_coupling.setter def include_inter_plane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeInterPlaneCoupling = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeInterPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @xtalk_threshold.setter def xtalk_threshold(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.XtalkThreshold = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.XtalkThreshold = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_void_area.setter def min_void_area(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinVoidArea = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinVoidArea = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_pad_area_to_mesh.setter def min_pad_area_to_mesh(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinPadAreaToMesh = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinPadAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_plane_area_to_mesh.setter def min_plane_area_to_mesh(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinPlaneAreaToMesh = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinPlaneAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @snap_length_threshold.setter def snap_length_threshold(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.SnapLengthThreshold = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.SnapLengthThreshold = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @return_current_distribution.setter def return_current_distribution(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.ReturnCurrentDistribution = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.ReturnCurrentDistribution = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @ignore_non_functional_pads.setter def ignore_non_functional_pads(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.IgnoreNonFunctionalPads = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IgnoreNonFunctionalPads = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_coplane_coupling.setter def include_coplane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeCoPlaneCoupling = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeCoPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_fringe_coupling.setter def include_fringe_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeFringeCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeFringeCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_split_plane_coupling.setter def include_split_plane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeSplitPlaneCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeSplitPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_infinite_ground.setter def include_infinite_ground(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeInfGnd = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeInfGnd = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_trace_coupling.setter def include_trace_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeTraceCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeTraceCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_vi_sources.setter def include_vi_sources(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeVISources = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeVISources = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @infinite_ground_location.setter def infinite_ground_location(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.InfGndLocation = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.InfGndLocation = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_coupled_lines.setter def max_coupled_lines(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MaxCoupledLines = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MaxCoupledLines = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @automatic_mesh.setter def automatic_mesh(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshAutoMatic = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MeshAutoMatic = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @perform_erc.setter def perform_erc(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.PerformERC = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.PerformERC = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_frequency.setter def mesh_frequency(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() -class SiwaveDCAdvancedSettings(object): +class DCSettings(SettingsBase): def __init__(self, parent): - self._parent = parent + super().__init__(parent) + self.defaults = { + "compute_inductance": False, + "contact_radius": "0.1mm", + "use_dc_custom_settings": False, + "plot_jv": True, + } + self.dc_defaults = { + "dc_slider_position": [0, 1, 2], + } @property - def sim_setup_info(self): - """EDB internal simulation setup object.""" + def compute_inductance(self): + """Whether to compute Inductance. + + Returns + ------- + bool + ``True`` if inductances will be computed, ``False`` otherwise. + """ - return self._parent._edb_sim_setup_info + return self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance + + @compute_inductance.setter + def compute_inductance(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.ComputeInductance = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() @property - def min_void_area(self): - """Minimum area below which voids are ignored. + def contact_radius(self): + """Circuit element contact radius. + + Returns + ------- + str + """ + return self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius + + @contact_radius.setter + def contact_radius(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.ContactRadius = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def dc_slider_position(self): + """DC simulation accuracy level slider position. This property only change slider position. + + Options: + 0- ``optimal speed`` + 1- ``balanced`` + 2- ``optimal accuracy``. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos + + @dc_slider_position.setter + def dc_slider_position(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.DCSliderPos = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def use_dc_custom_settings(self): + """Whether to use DC custom settings. + This setting is automatically enabled by other properties when needed. + + Returns + ------- + bool + ``True`` if custom dc settings are used, ``False`` otherwise. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings + + @use_dc_custom_settings.setter + def use_dc_custom_settings(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def plot_jv(self): + """Plot current and voltage distributions. + + Returns + ------- + bool + ``True`` if plot JV is used, ``False`` otherwise. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.PlotJV + + @plot_jv.setter + def plot_jv(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.PlotJV = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + +class DCAdvancedSettings(SettingsBase): + def __init__(self, parent): + super().__init__(parent) + self.defaults = { + "dc_min_void_area_to_mesh": "0.001mm2", + "max_init_mesh_edge_length": "5mm", + "dc_min_plane_area_to_mesh": "1.5mm2", + "num_bondwire_sides": 8, + "num_via_sides": 8, + "percent_local_refinement": 20.0, + } + self.dc_defaults = { + "energy_error": [2, 2, 1], + "max_num_pass": [5, 5, 10], + "mesh_bondwires": [False, True, True], + "mesh_vias": [False, True, True], + "min_num_pass": [1, 1, 3], + "perform_adaptive_refinement": [False, True, True], + "refine_bondwires": [False, False, True], + "refine_vias": [False, False, True], + } + + @pyaedt_function_handler + def set_dc_slider(self, value): + for k, val in self.dc_defaults.items(): + self.__setattr__(k, val[value]) + + @property + def dc_min_void_area_to_mesh(self): + """DC minimum area below which voids are ignored. Returns ------- @@ -378,7 +646,7 @@ def min_void_area(self): return self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh @property - def min_plane_area(self): + def dc_min_plane_area_to_mesh(self): """Minimum area below which geometry is ignored. Returns @@ -511,336 +779,292 @@ def refine_vias(self): """ return self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias - @property - def compute_inductance(self): - """Whether to compute Inductance. - - Returns - ------- - bool - ``True`` if inductances will be computed, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance - - @property - def contact_radius(self): - """Circuit element contact radius. - - Returns - ------- - str - """ - return self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius - - @property - def dc_slider_position(self): - """Slider position for DC. - - Returns - ------- - int - """ - return self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos - - @property - def use_dc_custom_settings(self): - """Whether to use DC custom settings. - This setting is automatically enabled by other properties when needed. - - Returns - ------- - bool - ``True`` if custom dc settings are used, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings - - @property - def plot_jv(self): - """Plot JV. - - Returns - ------- - bool - ``True`` if plot JV is used, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.PlotJV - - @plot_jv.setter - def plot_jv(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.PlotJV = value + @dc_min_void_area_to_mesh.setter + def dc_min_void_area_to_mesh(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() - @compute_inductance.setter - def compute_inductance(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance = value - self._parent._update_setup() - - @contact_radius.setter - def contact_radius(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius = value - self._parent._update_setup() - - @dc_slider_position.setter - def dc_slider_position(self, value): - """DC simulation accuracy level slider position. - Options: - 0- ``optimal speed`` - 1- ``balanced`` - 2- ``optimal accuracy``. - """ - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = False - self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos = value - self._parent._update_setup() - - @use_dc_custom_settings.setter - def use_dc_custom_settings(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = value - self._parent._update_setup() - - @min_void_area.setter - def min_void_area(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh = value - self._parent._update_setup() - - @min_plane_area.setter - def min_plane_area(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinPlaneAreaToMesh = value + @dc_min_plane_area_to_mesh.setter + def dc_min_plane_area_to_mesh(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.DcMinPlaneAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @energy_error.setter def energy_error(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.EnergyError = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.EnergyError = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_init_mesh_edge_length.setter def max_init_mesh_edge_length(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MaxInitMeshEdgeLength = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MaxInitMeshEdgeLength = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_num_pass.setter def max_num_pass(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MaxNumPasses = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MaxNumPasses = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_num_pass.setter def min_num_pass(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MinNumPasses = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MinNumPasses = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_bondwires.setter def mesh_bondwires(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_vias.setter def mesh_vias(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @num_bondwire_sides.setter def num_bondwire_sides(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.NumBwSides = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.NumBwSides = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @num_via_sides.setter def num_via_sides(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.NumViaSides = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.NumViaSides = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @percent_local_refinement.setter def percent_local_refinement(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.PercentLocalRefinement = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.PercentLocalRefinement = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @perform_adaptive_refinement.setter def perform_adaptive_refinement(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.PerformAdaptiveRefinement = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.PerformAdaptiveRefinement = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @refine_bondwires.setter def refine_bondwires(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineBws = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.RefineBws = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @refine_vias.setter def refine_vias(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() -class SiwaveSYZSimulationSetup(SiwaveAdvancedSettings, object): - """Manages EDB methods for HFSS simulation setup.""" - - def __init__(self, edb, name=None, edb_siwave_sim_setup=None): - self._edb = edb - self._sweep_data_list = {} - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.SIwave.SIWSimulationSettings - ]() - if edb_siwave_sim_setup: - _get_edb_setup_info(edb_siwave_sim_setup, self._edb_sim_setup_info) - else: - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("siwave") - else: - self._edb_sim_setup_info.Name = name - self._update_setup() - self.setup_type = "kSIWave" - SiwaveAdvancedSettings.__init__(self, self) +class SiwaveSYZSimulationSetup(BaseSimulationSetup): + """Manages EDB methods for SIwave simulation setup. - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info + Parameters + ---------- + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_setup : :class:`Ansys.Ansoft.Edb.Utility.SIWaveSimulationSetup` + Edb object. + """ + + def __init__(self, pedb, edb_setup=None): + super().__init__(pedb, edb_setup) + self._edb = self._pedb + self._setup_type = "kSIwave" + self._sim_setup_info = None @pyaedt_function_handler() - def _update_setup(self): - self._edb_sim_setup = self._edb.edb_api.utility.utility.SIWaveSimulationSetup(self._edb_sim_setup_info) - if self.name in self._edb.setups: - self._edb.layout.cell.DeleteSimulationSetup(self.name) - self._edb.layout.cell.AddSimulationSetup(self._edb_sim_setup) - return True + def create(self, name=None): + """Create a SIwave SYZ setup. - @property - def dc_settings(self): - """Siwave DC settings. + Returns + ------- + :class:`SiwaveDCSimulationSetup` + """ + self._name = name + self._create(name) + self.set_si_slider(1) + + return self + + @pyaedt_function_handler + def get_configurations(self): + """Get SIwave SYZ simulation settings. Returns ------- - :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCAdvancedSettings` + dict + Dictionary of SIwave SYZ simulation settings. """ - return SiwaveDCAdvancedSettings(self) + return { + "pi_slider_postion": self.pi_slider_position, + "si_slider_postion": self.si_slider_position, + "use_custom_settings": self.use_si_settings, + "use_si_settings": self.use_si_settings, + "advanced_settings": self.advanced_settings.get_configurations(), + } @property - def frequency_sweeps(self): - """Get frequency sweep list.""" - if self._sweep_data_list: - return self._sweep_data_list - self._sweep_data_list = {} - for i in list(self._edb_sim_setup_info.SweepDataList): - self._sweep_data_list[i.Name] = EdbFrequencySweep(self, None, i.Name, i) - return self._sweep_data_list + def advanced_settings(self): + """SIwave advanced settings.""" + return AdvancedSettings(self) @property - def name(self): - """Setup name.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - """Set name of the setup.""" - legacy_name = self._edb_sim_setup_info.Name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] + def get_sim_setup_info(self): + """Get simulation information from the setup.""" + if self._sim_setup_info: + return self._sim_setup_info + + edb_setup = self._edb_object + edb_sim_setup_info = self._pedb.simsetupdata.SimSetupInfo[self._setup_type_mapping[self._setup_type]]() + edb_sim_setup_info.Name = edb_setup.GetName() + + string = edb_setup.ToString().replace("\t", "").split("\r\n") + + if is_linux: + string = string[0].split("\n") + keys = [i.split("=")[0] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] + values = [i.split("=")[1] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] + for val in string: + if "SourceTermsToGround()" in val: + break + elif "SourceTermsToGround" in val: + sources = {} + val = val.replace("SourceTermsToGround(", "").replace(")", "").split(",") + for v in val: + source = v.split("=") + sources[source[0]] = source[1] + edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( + sources + ) + break + for k in keys: + value = _parse_value(values[keys.index(k)]) + setter = None + if k in dir(edb_sim_setup_info.SimulationSettings): + setter = edb_sim_setup_info.SimulationSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings + + elif k in dir(edb_sim_setup_info.SimulationSettings.DCAdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.DCAdvancedSettings + elif "DCIRSettings" in dir(edb_sim_setup_info.SimulationSettings) and k in dir( + edb_sim_setup_info.SimulationSettings.DCIRSettings + ): + setter = edb_sim_setup_info.SimulationSettings.DCIRSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.DCSettings): + setter = edb_sim_setup_info.SimulationSettings.DCSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings + if setter: + try: + setter.__setattr__(k, value) + except TypeError: + try: + setter.__setattr__(k, str(value)) + except: + pass - @property - def enabled(self): - """Whether the setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.Enabled + return edb_sim_setup_info - @enabled.setter - def enabled(self, value): - self._edb_sim_setup_info.SimulationSettings.Enabled = value - self._update_setup() + @pyaedt_function_handler + def set_pi_slider(self, value): + """Set SIwave PI simulation accuracy level. + + Options are: + + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy + """ + self.use_si_settings = False + self.use_custom_settings = False + self.pi_slider_position = value + self.advanced_settings.set_pi_slider(value) + + @pyaedt_function_handler + def set_si_slider(self, value): + """Set SIwave SI simulation accuracy level. + + Options are: + + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy``` + """ + self.use_si_settings = True + self.use_custom_settings = False + self.si_slider_position = value + self.advanced_settings.set_si_slider(value) @property - def pi_slider_postion(self): + def pi_slider_position(self): """PI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.PISliderPos - - @pi_slider_postion.setter - def pi_slider_postion(self, value): - if value == 0: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = False - self.include_trace_coupling = False - self.max_coupled_lines = 12 - elif value == 1: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = True - self.include_trace_coupling = False - self.max_coupled_lines = 12 - else: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 40 - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.PISliderPos = value + return self.get_sim_setup_info.SimulationSettings.PISliderPos + + @pi_slider_position.setter + def pi_slider_position(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.PISliderPos = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property - def si_slider_postion(self): + def si_slider_position(self): """SI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.SISliderPos - - @si_slider_postion.setter - def si_slider_postion(self, value): - if value == 0: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = False - self.include_trace_coupling = True - self.max_coupled_lines = 12 - self.return_current_distribution = False - elif value == 1: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 12 - self.return_current_distribution = False - else: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 40 - self.return_current_distribution = True - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.SISliderPos = value + return self.get_sim_setup_info.SimulationSettings.SISliderPos + + @si_slider_position.setter + def si_slider_position(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.SISliderPos = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property def use_custom_settings(self): - """Whether to use custom settings. + """Custom settings to use. Returns ------- bool """ - return self._edb_sim_setup_info.SimulationSettings.UseCustomSettings + return self.get_sim_setup_info.SimulationSettings.UseCustomSettings @use_custom_settings.setter def use_custom_settings(self, value): - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = value + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.UseCustomSettings = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property @@ -851,184 +1075,88 @@ def use_si_settings(self): ------- bool """ - return self._edb_sim_setup_info.SimulationSettings.UseSISettings + return self.get_sim_setup_info.SimulationSettings.UseSISettings @use_si_settings.setter def use_si_settings(self, value): - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.UseSISettings = value + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.UseSISettings = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() - @pyaedt_function_handler() - def add_frequency_sweep(self, name=None, frequency_sweep=None): - """Add frequency sweep. - - Parameters - ---------- - name : str, optional - Name of the frequency sweep. - frequency_sweep : list, optional - List of frequency points. - Returns - ------- - :class:`pyaedt.edb_core.edb_data.simulation_setup_data.EdbFrequencySweep` - - Examples - -------- - >>> setup1 = edbapp.create_siwave_syz_setup("setup1") - >>> setup1.add_frequency_sweep(frequency_sweep=[ - ... ["linear count", "0", "1kHz", 1], - ... ["log scale", "1kHz", "0.1GHz", 10], - ... ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], - ... ]) - """ - if name in self.frequency_sweeps: - return False - if not name: - name = generate_unique_name("sweep") - sweep = EdbFrequencySweep(self, frequency_sweep, name) - self._sweep_data_list[name] = sweep - return sweep - - -def _parse_value(v): - """ +class SiwaveDCSimulationSetup(SiwaveSYZSimulationSetup): + """Manages EDB methods for SIwave DC simulation setup. Parameters ---------- - v : + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_setup : Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings + EDB object. The default is ``None``. + """ + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) + self._setup_type = "kSIwaveDCIR" + self._edb = pedb + self._mesh_operations = {} - Returns - ------- + def create(self, name=None): + """Create a SIwave DCIR setup. - """ - # duck typing parse of the value 'v' - if v is None or v == "": - pv = v - elif v == "true": - pv = True - elif v == "false": - pv = False - else: - try: - pv = int(v) - except ValueError: - try: - pv = float(v) - except ValueError: - if isinstance(v, str) and v[0] == v[-1] == "'": - pv = v[1:-1] - else: - pv = v - return pv + Returns + ------- + :class:`SiwaveDCSimulationSetup` + """ + self._name = name + self._create(name) + self.set_dc_slider(1) + return self -@pyaedt_function_handler() -def _get_edb_setup_info(edb_siwave_sim_setup, edb_sim_setup_info): - string = edb_siwave_sim_setup.ToString().replace("\t", "").split("\r\n") - if is_linux: - string = string[0].split("\n") - keys = [i.split("=")[0] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] - values = [i.split("=")[1] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] - for val in string: - if "SourceTermsToGround()" in val: - break - elif "SourceTermsToGround" in val: - sources = {} - val = val.replace("SourceTermsToGround(", "").replace(")", "").split(",") - for v in val: - source = v.split("=") - sources[source[0]] = source[1] - edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict(sources) - break - for k in keys: - value = _parse_value(values[keys.index(k)]) - setter = None - if k in dir(edb_sim_setup_info.SimulationSettings): - setter = edb_sim_setup_info.SimulationSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings - - elif k in dir(edb_sim_setup_info.SimulationSettings.DCAdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.DCAdvancedSettings - elif "DCIRSettings" in dir(edb_sim_setup_info.SimulationSettings) and k in dir( - edb_sim_setup_info.SimulationSettings.DCIRSettings - ): - setter = edb_sim_setup_info.SimulationSettings.DCIRSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.DCSettings): - setter = edb_sim_setup_info.SimulationSettings.DCSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings - if setter: - try: - setter.__setattr__(k, value) - except TypeError: - try: - setter.__setattr__(k, str(value)) - except: - pass - + @pyaedt_function_handler + def get_configurations(self): + """Get SIwave DC simulation settings. -class SiwaveDCSimulationSetup(SiwaveDCAdvancedSettings, object): - """Manages EDB methods for HFSS simulation setup.""" + Returns + ------- + dict + Dictionary of SIwave DC simulation settings. + """ + return { + "dc_settings": self.dc_settings.get_configurations(), + "dc_advanced_settings": self.dc_advanced_settings.get_configurations(), + } - def __init__(self, edb, name=None, edb_siwave_sim_setup=None): - self._edb = edb - self._mesh_operations = {} - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.SIwave.SIWDCIRSimulationSettings - ]() - if edb_siwave_sim_setup: - _get_edb_setup_info(edb_siwave_sim_setup, self._edb_sim_setup_info) - - else: - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("siwave") - else: - self._edb_sim_setup_info.Name = name - self._update_setup() - self.setup_type = "kSIWaveDCIR" - - SiwaveDCAdvancedSettings.__init__(self, self) + @pyaedt_function_handler + def set_dc_slider(self, value): + """Set DC simulation accuracy level. - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info + Options are: - @pyaedt_function_handler() - def _update_setup(self): - edb_sim_setup = self._edb.edb_api.utility.utility.SIWaveDCIRSimulationSetup(self._edb_sim_setup_info) - if self.name in self._edb.setups: - self._edb.layout.cell.DeleteSimulationSetup(self.name) - self._edb.active_cell.AddSimulationSetup(edb_sim_setup) - return True + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy + """ + self.use_custom_settings = False + self.dc_settings.dc_slider_position = value + self.dc_advanced_settings.set_dc_slider(value) @property - def name(self): - """Setup name.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - """Set name of the setup.""" - legacy_name = self._edb_sim_setup_info.Name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] + def dc_settings(self): + """SIwave DC setting.""" + return DCSettings(self) @property - def enabled(self): - """Whether setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.Enabled + def dc_advanced_settings(self): + """Siwave DC advanced settings. - @enabled.setter - def enabled(self, value): - self._edb_sim_setup_info.SimulationSettings.Enabled = value - self._update_setup() + Returns + ------- + :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCAdvancedSettings` + """ + return DCAdvancedSettings(self) @property def source_terms_to_ground(self): @@ -1040,7 +1168,7 @@ def source_terms_to_ground(self): {str, int}, keys is source name, value int 0 unspecified, 1 negative node, 2 positive one. """ - return convert_netdict_to_pydict(self._edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround) + return convert_netdict_to_pydict(self.get_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround) @pyaedt_function_handler() def add_source_terminal_to_ground(self, source_name, terminal=0): @@ -1064,7 +1192,7 @@ def add_source_terminal_to_ground(self, source_name, terminal=0): """ terminals = self.source_terms_to_ground terminals[source_name] = terminal - self._edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( + self.get_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( terminals ) return self._update_setup() diff --git a/pyaedt/edb_core/siwave.py b/pyaedt/edb_core/siwave.py index 8d6b65c0ced..708a905a6d2 100644 --- a/pyaedt/edb_core/siwave.py +++ b/pyaedt/edb_core/siwave.py @@ -838,7 +838,7 @@ def add_siwave_syz_analysis( third_arg = int(decade_count) if sweeptype == 0: third_arg = self._pedb.number_with_units(step_freq, "Hz") - setup.si_slider_postion = int(accuracy_level) + setup.si_slider_position = int(accuracy_level) sweep = setup.add_frequency_sweep( frequency_sweep=[ [sweep, start_freq, stop_freq, third_arg], diff --git a/pyaedt/generic/LoadAEDTFile.py b/pyaedt/generic/LoadAEDTFile.py index fb669773701..584dba38708 100644 --- a/pyaedt/generic/LoadAEDTFile.py +++ b/pyaedt/generic/LoadAEDTFile.py @@ -80,17 +80,7 @@ def load_keyword_in_aedt_file(filename, keyword): def _parse_value(v): - """ - - Parameters - ---------- - v : - - - Returns - ------- - - """ + """Parse value in C# format.""" # duck typing parse of the value 'v' if v is None: pv = v From d6df01fb97e15e61f621f2b1abad32bb077a4070 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Wed, 8 Nov 2023 10:09:04 +0100 Subject: [PATCH 59/78] create port, probe enhancement (#3833) * fix * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- _unittest/test_00_EDB.py | 10 +- pyaedt/edb.py | 162 +++++++++++++++++---- pyaedt/edb_core/edb_data/padstacks_data.py | 27 +++- pyaedt/edb_core/edb_data/sources.py | 31 ++-- pyaedt/edb_core/edb_data/terminals.py | 80 ++++++---- pyaedt/edb_core/general.py | 23 --- pyaedt/edb_core/siwave.py | 13 +- 7 files changed, 238 insertions(+), 108 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index b3df33be11d..e1ea1b7ee2b 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -173,7 +173,7 @@ def test_003_create_coax_port_on_component(self): coax_port.radial_extent_factor = 3 assert coax_port.radial_extent_factor == 3 assert coax_port.component - assert self.edbapp.components["U6"].pins["R3"].terminal + assert self.edbapp.components["U6"].pins["R3"].get_terminal() assert self.edbapp.components["U6"].pins["R3"].id assert self.edbapp.terminals assert self.edbapp.ports @@ -494,6 +494,10 @@ def test_041_create_voltage_source(self): assert list(self.edbapp.sources.values())[0].magnitude == 3.3 list(self.edbapp.sources.values())[0].phase = 1 assert list(self.edbapp.sources.values())[0].phase == 1 + u6 = self.edbapp.components["U6"] + self.edbapp.create_voltage_source( + u6.pins["F2"].get_terminal(create_new_terminal=True), u6.pins["F1"].get_terminal(create_new_terminal=True) + ) def test_042_create_current_source(self): assert self.edbapp.siwave.create_current_source_on_net("U1", "USB3_D_N", "U1", "GND", 0.1, 0) != "" @@ -524,6 +528,10 @@ def test_042_create_current_source(self): ref_term.location = [0, 0] assert ref_term.layer ref_term.layer = "1_Top" + u6 = self.edbapp.components["U6"] + self.edbapp.create_current_source( + u6.pins["H8"].get_terminal(create_new_terminal=True), u6.pins["G9"].get_terminal(create_new_terminal=True) + ) def test_043_create_dc_terminal(self): assert self.edbapp.siwave.create_dc_terminal("U1", "DDR4_DQ40", "dc_terminal1") == "dc_terminal1" diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 8e8f33f380b..7dc1d8b4e67 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -32,16 +32,10 @@ from pyaedt.edb_core.edb_data.siwave_simulation_setup_data import SiwaveDCSimulationSetup from pyaedt.edb_core.edb_data.siwave_simulation_setup_data import SiwaveSYZSimulationSetup from pyaedt.edb_core.edb_data.sources import SourceType -from pyaedt.edb_core.edb_data.terminals import BundleTerminal -from pyaedt.edb_core.edb_data.terminals import EdgeTerminal -from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal -from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal from pyaedt.edb_core.edb_data.terminals import Terminal from pyaedt.edb_core.edb_data.variables import Variable -from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import LayoutObjType from pyaedt.edb_core.general import Primitives -from pyaedt.edb_core.general import TerminalType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.edb_core.hfss import EdbHfss from pyaedt.edb_core.ipc2581.ipc2581 import Ipc2581 @@ -357,18 +351,10 @@ def variables(self): def terminals(self): """Get terminals belonging to active layout.""" temp = {} + terminal_mapping = Terminal(self)._terminal_mapping for i in self.layout.terminals: terminal_type = i.ToString().split(".")[-1] - if terminal_type == TerminalType.EdgeTerminal.name: - ter = EdgeTerminal(self, i) - elif terminal_type == TerminalType.BundleTerminal.name: - ter = BundleTerminal(self, i) - elif terminal_type == TerminalType.PadstackInstanceTerminal.name: - ter = PadstackInstanceTerminal(self, i) - elif terminal_type == TerminalType.PinGroupTerminal.name: - ter = PinGroupTerminal(self, i) - else: - ter = Terminal(self, i) + ter = terminal_mapping[terminal_type](self, i) temp[ter.name] = ter return temp @@ -400,15 +386,18 @@ def ports(self): ports = {} for t in temp: t2 = Terminal(self, t) + if not t2.boundary_type == "PortBoundary": + continue + if t2.is_circuit_port: port = CircuitPort(self, t) ports[port.name] = port - elif t2.terminal_type == TerminalType.BundleTerminal.name: + elif t2.terminal_type == "BundleTerminal": port = BundleWavePort(self, t) ports[port.name] = port elif t2.hfss_type == "Wave": ports[t2.name] = WavePort(self, t) - elif t2.terminal_type == TerminalType.PadstackInstanceTerminal.name: + elif t2.terminal_type == "PadstackInstanceTerminal": ports[t2.name] = CoaxPort(self, t) else: ports[t2.name] = GapPort(self, t) @@ -432,7 +421,7 @@ def probes(self): """Get all layout sources.""" temp = {} for name, val in self.terminals.items(): - if val.boundary_type == BoundaryType.kVoltageProbe.name: + if val.boundary_type == "kVoltageProbe": if not val.is_reference_terminal: temp[name] = val return temp @@ -3640,7 +3629,7 @@ def _get_connected_ports_from_multizone_cutout(self, terminal_info_dict): @pyaedt_function_handler def create_port(self, terminal, ref_terminal=None, is_circuit_port=False): - """Create a port between two terminals. + """Create a port. Parameters ---------- @@ -3662,13 +3651,126 @@ def create_port(self, terminal, ref_terminal=None, is_circuit_port=False): ------- """ - if not ref_terminal: - port = CoaxPort(self, terminal._edb_object) - else: - if is_circuit_port: - port = CircuitPort(self, terminal._edb_object) - else: - port = GapPort(self, terminal._edb_object) - port.ref_terminal = ref_terminal - port.is_circuit_port = is_circuit_port - return port + + terminal.boundary_type = "PortBoundary" + terminal.is_circuit_port = is_circuit_port + + if ref_terminal: + ref_terminal.boundary_type = "PortBoundary" + terminal.ref_terminal = ref_terminal + + return self.ports[terminal.name] + + @pyaedt_function_handler + def create_voltage_probe(self, terminal, ref_terminal): + """Create a voltage probe. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the probe. + + Returns + ------- + + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kVoltageProbe" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kVoltageProbe" + + term.ref_terminal = ref_terminal + return self.probes[term.name] + + @pyaedt_function_handler + def create_voltage_source(self, terminal, ref_terminal): + """Create a voltage source. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the source. + + Returns + ------- + class:`pyaedt.edb_core.edb_data.ports.ExcitationSources` + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kVoltageSource" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kVoltageProbe" + + term.ref_terminal = ref_terminal + return self.sources[term.name] + + @pyaedt_function_handler + def create_current_source(self, terminal, ref_terminal): + """Create a current source. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the source. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.ports.ExcitationSources` + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kCurrentSource" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kCurrentSource" + + term.ref_terminal = ref_terminal + return self.sources[term.name] + + @pyaedt_function_handler + def get_point_terminal(self, name, net_name, location, layer): + """Place a voltage probe between two points. + + Parameters + ---------- + name : str, + Name of the terminal. + net_name : str + Name of the net. + location : list + Location of the terminal. + layer : str, + Layer of the terminal. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal` + """ + from pyaedt.edb_core.edb_data.terminals import PointTerminal + + point_terminal = PointTerminal(self) + return point_terminal.create(name, net_name, location, layer) diff --git a/pyaedt/edb_core/edb_data/padstacks_data.py b/pyaedt/edb_core/edb_data/padstacks_data.py index 4c654868c4d..4abd7768f42 100644 --- a/pyaedt/edb_core/edb_data/padstacks_data.py +++ b/pyaedt/edb_core/edb_data/padstacks_data.py @@ -998,12 +998,29 @@ def __init__(self, edb_padstackinstance, _pedb): self._position = [] self._pdef = None - @property - def terminal(self): - """Return PadstackInstanceTerminal object.""" - from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal + @pyaedt_function_handler + def get_terminal(self, name=None, create_new_terminal=False): + """Return PadstackInstanceTerminal object. - term = PadstackInstanceTerminal(self._pedb, self._edb_object.GetPadstackInstanceTerminal()) + Parameters + ---------- + name : str, optional + Name of the terminal. Only applicable when create_new_terminal is True. + create_new_terminal : bool, optional + Whether to create a new terminal. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals` + + """ + + if create_new_terminal: + term = self._create_terminal(name) + else: + from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal + + term = PadstackInstanceTerminal(self._pedb, self._edb_object.GetPadstackInstanceTerminal()) if not term.is_null: return term diff --git a/pyaedt/edb_core/edb_data/sources.py b/pyaedt/edb_core/edb_data/sources.py index 5adcb6e259b..ad17de61947 100644 --- a/pyaedt/edb_core/edb_data/sources.py +++ b/pyaedt/edb_core/edb_data/sources.py @@ -1,3 +1,4 @@ +import pyaedt from pyaedt import pyaedt_function_handler from pyaedt.generic.constants import NodeType from pyaedt.generic.constants import SourceType @@ -275,12 +276,16 @@ def net(self, value): def net_name(self): return self._edb_pin_group.GetNet().GetName() - @property - def terminal(self): + @pyaedt_function_handler + def get_terminal(self, name=None, create_new_terminal=False): """Terminal.""" - from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal - term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal()) + if create_new_terminal: + term = self._create_terminal(name) + else: + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + + term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal()) return term if not term.is_null else None @pyaedt_function_handler() @@ -297,19 +302,19 @@ def _create_terminal(self, name=None): ------- :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal` """ - pg_term = self.terminal + terminal = self.get_terminal() + if terminal: + return terminal + if not name: - name = self.name + name = pyaedt.generate_unique_name(self.name) - if pg_term: - return pg_term - else: - from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal - term = PinGroupTerminal(self._pedb) + term = PinGroupTerminal(self._pedb) - term = term.create(name, self.net_name, self.name) - return term + term = term.create(name, self.net_name, self.name) + return term @pyaedt_function_handler() def create_current_source_terminal(self, magnitude=1, phase=0): diff --git a/pyaedt/edb_core/edb_data/terminals.py b/pyaedt/edb_core/edb_data/terminals.py index 61de92cbba8..c178821eb70 100644 --- a/pyaedt/edb_core/edb_data/terminals.py +++ b/pyaedt/edb_core/edb_data/terminals.py @@ -4,19 +4,49 @@ from pyaedt.edb_core.edb_data.connectable import Connectable from pyaedt.edb_core.edb_data.padstacks_data import EDBPadstackInstance from pyaedt.edb_core.edb_data.primitives_data import cast -from pyaedt.edb_core.general import BoundaryType -from pyaedt.edb_core.general import TerminalType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.general_methods import generate_unique_name class Terminal(Connectable): - def __init__(self, pedb, edb_object): + def __init__(self, pedb, edb_object=None): super().__init__(pedb, edb_object) self._reference_object = None + self._boundary_type_mapping = { + "InvalidBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.InvalidBoundary, + "PortBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary, + "PecBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.PecBoundary, + "RlcBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.RlcBoundary, + "kCurrentSource": self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource, + "kVoltageSource": self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource, + "kNexximGround": self._pedb.edb_api.cell.terminal.BoundaryType.kNexximGround, + "kNexximPort": self._pedb.edb_api.cell.terminal.BoundaryType.kNexximPort, + "kDcTerminal": self._pedb.edb_api.cell.terminal.BoundaryType.kDcTerminal, + "kVoltageProbe": self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe, + } + + self._terminal_type_mapping = { + "InvalidTerminal": self._pedb.edb_api.cell.terminal.TerminalType.InvalidTerminal, + "EdgeTerminal": self._pedb.edb_api.cell.terminal.TerminalType.EdgeTerminal, + "PointTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PointTerminal, + "TerminalInstanceTerminal": self._pedb.edb_api.cell.terminal.TerminalType.TerminalInstanceTerminal, + "PadstackInstanceTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PadstackInstanceTerminal, + "BundleTerminal": self._pedb.edb_api.cell.terminal.TerminalType.BundleTerminal, + "PinGroupTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PinGroupTerminal, + } + + self._terminal_mapping = { + "EdgeTerminal": EdgeTerminal, + "PointTerminal": PointTerminal, + "PadstackInstanceTerminal": PadstackInstanceTerminal, + "BundleTerminal": BundleTerminal, + "PinGroupTerminal": PinGroupTerminal, + } + @property def _hfss_port_property(self): + """HFSS port property.""" hfss_prop = re.search(r"HFSS\(.*?\)", self._edb_properties) p = {} if hfss_prop: @@ -128,25 +158,26 @@ def terminal_type(self): """ return self._edb_object.GetTerminalType().ToString() + @terminal_type.setter + def terminal_type(self, value): + self._edb_object.GetTerminalType(self._terminal_type_mapping[value]) + @property def boundary_type(self): - """Boundary Type. + """Boundary type. + Returns ------- - int + str + InvalidBoundary, PortBoundary, PecBoundary, RlcBoundary, kCurrentSource, kVoltageSource, kNexximGround, + kNexximPort, kDcTerminal, kVoltageProbe """ return self._edb_object.GetBoundaryType().ToString() @boundary_type.setter def boundary_type(self, value): - if not value in [i.name for i in BoundaryType]: # pragma : no cover - self._pedb.logger.warning("Invalid Boundary Type={}".format(value)) - if value == self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe.ToString(): - temp = self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe - else: # pragma : no cover - temp = self._pedb.edb_api.cell.terminal.BoundaryType.InvalidBoundary - self._edb_object.SetBoundaryType(temp) + self._edb_object.SetBoundaryType(self._boundary_type_mapping[value]) @property def impedance(self): @@ -168,12 +199,7 @@ def ref_terminal(self): terminal = Terminal(self._pedb, self._edb_object.GetReferenceTerminal()) if not terminal.is_null: - if terminal.terminal_type == TerminalType.PointTerminal.name: - return PointTerminal(self._pedb, terminal._edb_object) - elif terminal.terminal_type == TerminalType.EdgeTerminal.name: - return EdgeTerminal(self._pedb, terminal._edb_object) - elif terminal.terminal_type == TerminalType.InvalidTerminal.name: # pragma : no cover - return None + return self._terminal_mapping[terminal.terminal_type](self._pedb, terminal._edb_object) @ref_terminal.setter def ref_terminal(self, value): @@ -199,11 +225,11 @@ def reference_object(self): # pragma : no cover self._reference_object = self.get_pad_edge_terminal_reference_pin() else: self._reference_object = self.get_edge_terminal_reference_primitive() - elif self.terminal_type == TerminalType.PinGroupTerminal.name: + elif self.terminal_type == "PinGroupTerminal": self._reference_object = self.get_pin_group_terminal_reference_pin() - elif self.terminal_type == TerminalType.PointTerminal.name: + elif self.terminal_type == "PointTerminal": self._reference_object = self.get_point_terminal_reference_primitive() - elif self.terminal_type == TerminalType.PadstackInstanceTerminal.name: + elif self.terminal_type == "PadstackInstanceTerminal": self._reference_object = self.get_padstack_terminal_reference_pin() else: self._pedb.logger.warning("Invalid Terminal Type={}".format(term.GetTerminalType())) @@ -471,7 +497,10 @@ def create(self, padstack_instance, name=None, layer=None, is_ref=False): Edb.Cell.Terminal.EdgeTerminal """ if not name: - name = generate_unique_name("Terminal") + pin_name = padstack_instance._edb_object.GetName() + refdes = padstack_instance.component.refdes + name = "{}_{}".format(refdes, pin_name) + name = generate_unique_name(name) if not layer: layer = padstack_instance.start_layer @@ -531,11 +560,10 @@ def create(self, name, net, location, layer, is_ref=False): @property def location(self): - """Get location of the terminal.""" - point_data = self._pedb.point_data(0, 0) + """Location of the terminal.""" layer = list(self._pedb.stackup.layers.values())[0]._edb_layer - if self._edb_object.GetParameters(point_data, layer): - return [point_data.X.ToDouble(), point_data.Y.ToDouble()] + _, point_data, _ = self._edb_object.GetParameters(None, layer) + return [point_data.X.ToDouble(), point_data.Y.ToDouble()] @location.setter def location(self, value): diff --git a/pyaedt/edb_core/general.py b/pyaedt/edb_core/general.py index 6be4a4b417d..a3cfcb63883 100644 --- a/pyaedt/edb_core/general.py +++ b/pyaedt/edb_core/general.py @@ -151,29 +151,6 @@ class DielectricExtentType(Enum): Polygon = 3 -class BoundaryType(Enum): - InvalidBoundary = -1 - PortBoundary = 0 - PecBoundary = 1 - RlcBoundary = 2 - kCurrentSource = 3 - kVoltageSource = 4 - kNexximGround = 5 - kNexximPort = 6 - kDcTerminal = 7 - kVoltageProbe = 8 - - -class TerminalType(Enum): - InvalidTerminal = -1 - EdgeTerminal = 0 - PointTerminal = 1 - TerminalInstanceTerminal = 2 - PadstackInstanceTerminal = 3 - BundleTerminal = 4 - PinGroupTerminal = 5 - - class Primitives(Enum): Rectangle = 0 Circle = 1 diff --git a/pyaedt/edb_core/siwave.py b/pyaedt/edb_core/siwave.py index 708a905a6d2..35ed2eb60b6 100644 --- a/pyaedt/edb_core/siwave.py +++ b/pyaedt/edb_core/siwave.py @@ -13,7 +13,6 @@ from pyaedt.edb_core.edb_data.sources import PinGroup from pyaedt.edb_core.edb_data.sources import ResistorSource from pyaedt.edb_core.edb_data.sources import VoltageSource -from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.constants import SolverType from pyaedt.generic.constants import SweepType @@ -1418,13 +1417,7 @@ def place_voltage_probe( negative_layer : str Layer of the negative terminal. """ - from pyaedt.edb_core.edb_data.terminals import PointTerminal - point_terminal = PointTerminal(self._pedb) - p_terminal = point_terminal.create(name, positive_net_name, positive_location, positive_layer) - p_terminal.boundary_type = BoundaryType.kVoltageProbe.name - - n_terminal = point_terminal.create(name + "_ref", negative_net_name, negative_location, negative_layer) - n_terminal.boundary_type = BoundaryType.kVoltageProbe.name - p_terminal.ref_terminal = n_terminal - return self._pedb.probes[name] + p_terminal = self._pedb.get_point_terminal(name, positive_net_name, positive_location, positive_layer) + n_terminal = self._pedb.get_point_terminal(name + "_ref", negative_net_name, negative_location, negative_layer) + return self._pedb.create_voltage_probe(p_terminal, n_terminal) From 70c105a558246fa34693bfdfccd59f351eab45dd Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 8 Nov 2023 11:04:17 +0100 Subject: [PATCH 60/78] New array class (#3850) * First array class commit * Array class first properties * Add array properties * Add coordinate system * Array parser * Edit Array implementation * Cells property * Add empty cell * Add empty cell * Create array * Unit test and documentation * Unit test and documentation * Fix codacy * Fix codecov * Fix tests * Fix codacy * Update pyaedt/hfss.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix comment * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Fix comment * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Fix export_array_info * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Fix comments * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Fix comments * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Fix comments * Merged Sebastien refactoring * Fix typo * Fix codacy * Add getitem method * Add getitem method * Add getitem method * Fix component dictionary * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Update pyaedt/modeler/cad/component_array.py Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> * Add Sebastien comments --------- Co-authored-by: Kathy Pippert <84872299+PipKat@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- _unittest/example_models/T20/Array_232.aedt | 15602 ++++++++++++++++ ...ex.a3dcomp => Circ_Patch_5GHz_232.a3dcomp} | 5193 +++-- _unittest/example_models/T20/array_info.csv | 35 + .../example_models/T20/array_simple_232.json | 44 + _unittest/test_20_HFSS.py | 152 +- .../T00/Circ_Patch_5GHz_232.a3dcomp | 5945 ++++++ .../example_models/T00/array_simple_232.json | 44 + _unittest_solvers/test_00_analyze.py | 34 +- doc/source/API/Primitive_Objects.rst | 1 + examples/02-HFSS/Array.py | 13 +- pyaedt/hfss.py | 28 +- pyaedt/modeler/cad/component_array.py | 720 + 12 files changed, 26051 insertions(+), 1760 deletions(-) create mode 100644 _unittest/example_models/T20/Array_232.aedt rename _unittest/example_models/T20/{Circ_Patch_5GHz_hex.a3dcomp => Circ_Patch_5GHz_232.a3dcomp} (52%) create mode 100644 _unittest/example_models/T20/array_info.csv create mode 100644 _unittest/example_models/T20/array_simple_232.json create mode 100644 _unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp create mode 100644 _unittest_solvers/example_models/T00/array_simple_232.json create mode 100644 pyaedt/modeler/cad/component_array.py diff --git a/_unittest/example_models/T20/Array_232.aedt b/_unittest/example_models/T20/Array_232.aedt new file mode 100644 index 00000000000..d7fc1f55740 --- /dev/null +++ b/_unittest/example_models/T20/Array_232.aedt @@ -0,0 +1,15602 @@ +$begin 'AnsoftProject' + Created='Tue Mar 8 10:35:21 2022' + Product='ElectronicsDesktop' + FileOwnedByWorkbench=false + $begin 'Desktop' + Version(2023, 2) + InfrastructureVersion(1, 0) + $begin 'FactoryHeader' + $begin 'geometry3deditor' + KernelVersion(2, 0) + ProjectContainsGeometry3D='1' + $end 'geometry3deditor' + $end 'FactoryHeader' + $end 'Desktop' + UsesAdvancedFeatures=true + NextUniqueID=0 + MoveBackwards=false + $begin 'HFSSEnvironment' + Version(1, 0) + $end 'HFSSEnvironment' + $begin 'PlanarEMEnvironment' + Version(1, 0) + $end 'PlanarEMEnvironment' + $begin 'Q3DEnvironment' + Version(1, 0) + $end 'Q3DEnvironment' + $begin '2DExtractorEnvironment' + Version(1, 0) + $end '2DExtractorEnvironment' + $begin 'NexximEnvironment' + Version(1, 0) + $end 'NexximEnvironment' + $begin 'NexximNetlistEnvironment' + Version(1, 0) + $end 'NexximNetlistEnvironment' + $begin 'EmitEnvironment' + Version(1, 0) + $end 'EmitEnvironment' + $begin 'Maxwell3DEnvironment' + Version(1, 0) + $end 'Maxwell3DEnvironment' + $begin 'Maxwell2DEnvironment' + Version(1, 0) + $end 'Maxwell2DEnvironment' + $begin 'RMxprtEnvironment' + Version(1, 0) + $end 'RMxprtEnvironment' + $begin 'MaxCirEnvironment' + Version(1, 0) + $end 'MaxCirEnvironment' + $begin 'SimplorerEnvironment' + Version(1, 0) + $end 'SimplorerEnvironment' + $begin 'IcepakEnvironment' + Version(1, 0) + $end 'IcepakEnvironment' + $begin 'MechanicalEnvironment' + Version(1, 0) + $end 'MechanicalEnvironment' + $begin 'SchematicEnvironment' + Version(1, 0) + $end 'SchematicEnvironment' + $begin 'geometry3deditor' + Version(1, 0) + $end 'geometry3deditor' + ReadVersion=11 + $begin 'DesignMgrEnvironment' + CompInstCounter=5781 + GPortCounter=0 + NetCounter=0 + Alias('Ieee;Simplorer Elements\\Ieee', 'Std;Simplorer Elements\\Std', 'Basic_VHDLAMS;Simplorer Elements\\Basic Elements VHDLAMS\\Basic Elements VHDLAMS', 'Digital_Elements;Simplorer Elements\\Digital Elements\\Digital Elements', 'Transformations;Simplorer Elements\\Tools\\Transformations\\Transformations', 'HEV_VHDLAMS;Simplorer Elements\\HEV VHDLAMS\\HEV VHDLAMS', 'automotive_vda;Simplorer Elements\\VDALibs VHDLAMS\\automotive_vda', 'example_boardnet;Simplorer Elements\\VDALibs VHDLAMS\\example_boardnet', 'example_ecar;Simplorer Elements\\VDALibs VHDLAMS\\example_ecar', 'fundamentals_vda;Simplorer Elements\\VDALibs VHDLAMS\\fundamentals_vda', 'hybrid_emc_vda;Simplorer Elements\\VDALibs VHDLAMS\\hybrid_emc_vda', 'megma;Simplorer Elements\\VDALibs VHDLAMS\\megma', 'modelica_rotational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_rotational', 'modelica_thermal;Simplorer Elements\\VDALibs VHDLAMS\\modelica_thermal', 'modelica_translational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_translational', 'spice2vhd;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd', 'spice2vhd_devices;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd_devices', 'aircraft_electrical_vhdlams;Simplorer Elements\\Aircraft Electrical VHDLAMS\\Aircraft Electrical VHDLAMS', 'power_system_vhdlams;Simplorer Elements\\Power System VHDLAMS') + $end 'DesignMgrEnvironment' + $begin 'ProjectDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='ProjectDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'ProjectDatasets' + VariableOrders[0:] + $begin 'Definitions' + $begin 'Materials' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.949999988079071 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='Project' + ModSinceLib=true + $end 'vacuum' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'pec' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=247 + Green=242 + Blue=232 + $end 'MatAppearanceData' + $end 'AttachedData' + conductivity='1e+30' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'pec' + $begin 'aluminum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='1.000021' + conductivity='38000000' + thermal_conductivity='237.5' + mass_density='2689' + specific_heat='951' + youngs_modulus='69000000000' + poissons_ratio='0.31' + thermal_expansion_coefficient='2.33e-05' + ModTime=1154373020 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'aluminum' + $begin 'glass' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal') + $end 'PhysicsTypes' + permittivity='5.5' + thermal_conductivity='1.4' + mass_density='2500' + specific_heat='750' + ModTime=1151073980 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'glass' + $begin 'gold' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='0.99996' + conductivity='41000000' + thermal_conductivity='315' + mass_density='19300' + specific_heat='129' + youngs_modulus='80000000000' + poissons_ratio='0.4' + thermal_expansion_coefficient='1.4e-05' + ModTime=1132068239 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'gold' + $begin 'titanium' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='1.00018' + conductivity='1820000' + thermal_conductivity='21' + mass_density='4500' + specific_heat='522' + youngs_modulus='115000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='8.3e-06' + ModTime=1132068239 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'titanium' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $begin 'Scripts' + $end 'Scripts' + $begin 'Padstacks' + $begin 'NoPad SMT East' + $begin 'NoPad SMT East' + ModTime=1017696647 + Library='Padstacks' + ModSinceLib=false + LibLocation='SysLibrary' + $begin 'psd' + nam='NoPad SMT East' + lib='Padstacks' + mat='' + plt='0' + $begin 'pds' + $begin 'lgm' + lay='Default' + id=0 + pad(shp='No', Szs(), X='0mm', Y='0mm', R='0') + ant(shp='No', Szs(), X='0mm', Y='0mm', R='0') + thm(shp='No', Szs(), X='0mm', Y='0mm', R='0') + X='0mm' + Y='0mm' + dir='0' + $end 'lgm' + $end 'pds' + hle(shp='No', Szs(), X='0mm', Y='0mm', R='0') + hRg='UTL' + sbsh='None' + sbpl='abv' + sbr='0mm' + sb2='0mm' + sbn='' + $end 'psd' + ppl() + $end 'NoPad SMT East' + $end 'NoPad SMT East' + $end 'Padstacks' + $begin 'Symbols' + $begin '00_Array2' + ModTime=1646775495 + CE=0 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=false + InitialLevels(0, 1) + $begin 'PinDef' + Pin('Array[3,3]02_Patch1_1', -0.01524, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'Array[3,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.0112674400000001, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,4]02_Patch1_1', -0.01524, 0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'Array[3,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00872744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,5]02_Patch1_1', -0.01524, 0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'Array[3,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00618744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,6]02_Patch1_1', -0.01524, 0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'Array[3,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00364744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,3]02_Patch1_1', -0.01524, 0, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'Array[4,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00110744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,4]02_Patch1_1', -0.01524, -0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'Array[4,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00143255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,5]02_Patch1_1', -0.01524, -0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'Array[4,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00397255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,6]02_Patch1_1', -0.01524, -0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'Array[4,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00651255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,3]02_Patch1_1', 0.01524, 0.01016, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'Array[5,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.0112674400000001, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,4]02_Patch1_1', 0.01524, 0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'Array[5,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00872744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,5]02_Patch1_1', 0.01524, 0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'Array[5,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00618744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,6]02_Patch1_1', 0.01524, 0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'Array[5,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00364744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,3]02_Patch1_1', 0.01524, 0, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'Array[6,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00110744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,4]02_Patch1_1', 0.01524, -0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'Array[6,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00143255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,5]02_Patch1_1', 0.01524, -0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'Array[6,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00397255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,6]02_Patch1_1', 0.01524, -0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'Array[6,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00651255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'Graphics' + Image(Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 8192), ImageData('D:/Array_Lunch&Learn/Finite_Array_w_Radome.aedtresults/5262493081646775493386.gif', 1, 'hI2g1--E++U+6+8RZLpSr6hJofls++CNl0k+8++++R4pkOKpb9a7hQCrRnPamhHc84QLcx0LE+90O00K-KP4Nd40sa3B7kpGi0AM07cDRbU+92PujsID3rLnFLhhLypnjCetQDxwb9yyrzyvrzz6qjsfzdzzpbzvxzz0DzvFzPDxjNzRTxxn-w+h++++++++++++++++++++++++++0kLLP3LtPx5QfizqNtgk2+jdf1wKzLfySvhTPDCvodz8U1kzQhvqGvdFPD0prg+k1M6NeOtsBbF5kM+P4JhrrTJrRcC+-jVhq7PqjDp9pPoz1U1MF4ZjHTiVuUOeCk-wCxpTd9NpjJbSzLIe++++++++++++h+7nHzBgZ+60p5E-UPEQ+KBg-+BAKxbPnfp6-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-FQwlsrcNornvh-aD5ttlsWj6hsBjLxer9nGCOZynX4LwkMlwCzXqplrah9CCcxXL9KAMTnAWrUqzLA4LQLYOy5LmvVWbXxX9mvS1PBIkNyLOy5LmvVWYXhrkvkvFeaX5kvfCpwilMh6xwCjdpjZp34jVpwisMd6xzChsBjpn-ZtBg-jZr1hZ73j-uvLRd\ +jBxXYPk9Rfa19mvE1TnYL9m9S1PyTPhKUNyLNwRqxrTfgK9ODnhqw4rwyommgWrUqzLA4LYqzZqwCoOdclwCw0rOtUmwio+rut3mwWrUqzbqvJch4TZqwCoOdclwCxwCjZr1Z73jtxilLRyS3Thq8zh-x1WqTKJ3ZSJZhmKBcnBCha4gorLcNIpv5RHBCTAzIMvsRTDiWjXr9awJtJpJdyz+VXKdTrIdGJOQDKgksh95qF4QioiEvVgT2BQof4sOTxt6nputvwbaZbrDDhsBgLxSrVEvefuUxRzLYzhlcvvrVtpd3-Cwf3RmMlfoQYSC933HwXss94TYv3yrNDTAroZsBj-hmzcqyTdhvQYBwpX3XfjSbh0WsySOdoJ5nXjdG44hX1DoRfsRTDj0jfpdIwRFgscNdzbqhGKRi7Dbqx-ORTo49LXxXSBrHrXDhqsNj-xzChzDhT1jT1fuRPyTPyLOy5Lkvhrwurwyo+rwurwypwCw0rwypwCxwCjdpjtxjtRfsRT1jTnfTnvLkvy5OybKzbhqzZqwCrjxCqbWpaBxciuuBgn9ibPJwtsDJROFfsRsBiHLLGzy6miKDVUD2S9hTbKiA3srsml50V3zbaQnwio+rvugPvzbe-RmoEwQxPMnVWw9jVrUqqRroL5Lh6Nz1FQRRzrnf4TZqU4xTm2LDZ94QTavtBX9SCwi6PkTsxfTvxUKD34vttoLDhPvyNQR2nQqP7m9Q1T9jnqtrTnfS1PyTPbRziz5Oy5LmvuwasbcnfmT1hsBhRhHwPpN3lDVaw5rwurwypwCw0rwypwCxwCjdpjtxjtRfsRT1jTnfTnvLkvy5OyhbKzbqzZqwCpwCxzChkBwCxzChzDh+BzChzDhT1jsxbJwSrj-eAFxKgCwxxhzhLhabhSV7AwdstsVjoXi5PkTTjeFjLqUQpPta4QjsUlbtRj1h0FtmmXUtMz7MhlVzAm9S1PxQkNRlSFfsRT9i48SDqAj9hsB\ +gpH-btRfsRT9i48GDT1j1h4eOAhT1igvLmv3WoXrkuybKyLIIOy5LmvVWYXrwurUqzLA4LYqs5dOvjBNjiQ1S1PhBIkNyLO+PySWNSHPkPTnvJeoX5kvjfirCvxRWtPFySrUqzZq4KLYqw4rOtUmhwipwCzVq1JB4jVrUqnJA4TZqU4zLcaLYqw4rwypOh6lwCzVq1JB4jdpj-xyihMQf6hzDhq8tjnsdxitLx65cQqvumcgfmghiGlh2N7wkpaauxX0ajslgmdfxbhuX5T1ftxIRyStQrWj8ieh5rsY2OpfqsZeOfH-mpa57Oym6lZqZm5wBXsVXYZhsz1HTb94ybJDTgyoAyvtRj1hWzfqw05RJTK5fjuw5qD5TKyDCZ6c7zbMfaH4hhSVY1tnMcWRYTD1MnwZMjyv7vtay2j1hsBgLxCrnxDPYVbagMgRRPoxcoT3nhnRCW6ySRR8GkJgMNSXjT1ftxMRzSh8bXe3b3XBBwyuEnBt7wSre9nfyUFOyThAPniOSyNxar1hsBjtxjtRfuRPkTTnfTnvLkvrkuybKzbqzZqU4zbqzZqjVrUhqzZqjdpj-xzChzDhT1jT1fuRPyTPyLOy5LkvrwurwypwCzXqRzfqowKgnjT9hiSWPAmveqqzDi8FjbmIXrkvkvQYiiZxwFZQgj1CSeoKzAZQMTqb43yRuad3jh-zXqSLrvDISxY6hys8WrbH3wKT1h+ByyXayzqruLQR4DfdSyuMmDXlHsRc-jhbxqrrnHkmvbc7nByJQMLtreOYKw5yDPNLTFmFkcrzTCWtvTTn9XcaHanNCHPh+PvRySrCPyTPkPTnvQtjRrsvrkuyrTJYL2z4xKHsRj1hfWTXSX8i7wCrUqzbhqzZqjVrUqzZqjdpj-xzChzDhT1jT1fuRPyTPyLOy5LkvrwurwypwCzVqjdpjhtxg-jdpjtxjtRc-jtxjtRfsRTDgujfqxM3HuDe3VFZqBQ7PTUXFdleEKzE\ +ANh7vpny5PkvMjuxcL4ISpfbiiBmzVv4TZqwCo75b98C1ZXwZX45wn6hsBjpn-Zhr3t4jVpwisMdszMmwirUqnJA4TZqjVpwisMd6xwCwCoOdclwCunhT9gK9GDTh1fuRPtRFFfsRT9i48GDTnfS1PxQkNSHP+PtRktGFPkSiprOPnTMt4w0rOtUmhwio+rwt3mwWrUqzbqvJc4TZqTCzOvjlq9Jd4tvS1PyTPNNGFPkTTfa58m9TnhvS1PBIkNyLO+PxQkNSHP+PtRktGFPkTTnfRfoH9mvS1PBIkNyLOy5LnvS7kJhyrMfyo5QC83xNIKJtKKrlMxHAePC3EMmrgaMy7s7MvsRTDiWjXr9azJtJpJdhyz+VXKdTrIdGJOQDKgks95qF4QioiEvVgT2BQof4sOTxt6nputvwbaZbrDDhhsBgLxSrVEvefuUxRzLYzlct5pTrp6sJmYczhGaNQWovqk6YhSY94-szxb6nphutvwbiYf+RwCjbp-rntDPoxiaAQeRhnpxcEK5HzLD0ouQht7FkdfNNmVhzDhhsBgLxipBaneCaZLAiCzh8nLAIKyDQx5d9HfzUVOxTgPkieSxNxer1RwCjdpjhtxjtRfsRT1jTnfTnvLkvy5OybKzbqk4ybKzbqzZqU4zbqzZqjVpwCxzChzDhhT1jsRfuRPyTPyLPkvLkvrwurwyrUqxzdqowLgnfT9ySWPwuse4yzDSCGjbqKhX5kvk9QbiyWcxXh9WsvmtByMwRtF1xwCwCqfyTNvjTrqTUsLbH9XRXDmvE1Thjddjjrixx4JQx8DfdKwuMrV0jVrUqpTnvNBOR9m9HazFgqOQlPR5d-jDm9Q1hTDig9fdRN2Oz6KXVQvwjtYfz9IWTaj3uffGAT1j+hnizrTbhT1jsRfvRySrChPyTPkPSvbcnfmPWS1BwCjhrpN3lDljJYy5PkvLkvrwur+rkvrwurwyrUqzZqhjdpjtxj-hzDhT1jTnfS1P\ +yTPyLOybKw5rwurwypwCw0rwypwCxwCwCpwCxzChhsBjLwSrhlSAGhwbBAmcel5Szfp9YGpumcld9LfGX2Z50ahabDWSsRj-hmzhhqlQOFvKjSOsr9iDjNSHPkPQbSAUdsyGAmKANTn+XrkuyLQCIQLgNyLPkvFeahXBj9m9S1PxQkNSHPyLPkvFeaX5kvk9Rfa19mvP0qPwOrNySwq9v0bOyDGeuThtw5hrNx7TziEwQvD2rSYcoLnvQ+jyzNV0PoOznrwSQ6xLraSqyC9tkYfRxFXhhKWybKw5rzt8+nwTznphyoyPz6DPftwbn5XztrboD3corkvkvTQOyDbszfJKhndn7qTBQzuTfVbyzvTwxz5YSDMwKnPQ1TDg1rrvFciwRTHnqsTT4nssOzd8ThFsjaqs3NpbOPnTMt4w0rrqjCdlvShuxRYFzqlQKyixjJiBuDyznsIHRjnqvkhBntntifbiTpnOh3wivIRTDg1rrvZntipjRbqSHRclwAGTH2SvbD6nyvzS5luhVaPAFTDhT1jsxjZxyoLvWirhMJyjvMSWiDbMNwyaFTDhT1jSj9PzlDJYlarwhhL4ng6Qhzf3OhDDPbRwCjbq3xjJWxnvPhkjvLp2YD3O9thjtRj1h8vGj3trthS5nevLboMvJcjdpj-xyyEji8vRuVgEzvlBuiFTDhT1jsxczmvTZJPyTP5GbkhvS1PjxmrLzPqDCTP5GbkvS1Pjxer1rJxKBWPhNpjRuH+hsBjzqPTDavgkttjhRuH+hsBjzqfTTh5MnvIAryt6UKw5rlvLjf7wblLZZ5qoPkxzHlfyzKZyhf-ThvsTvXCwTuxinjAm88baTo10bndXmCeuOQS7vdhvnvS1P3zLhxERhJpKvuZVjhVqMTBwu8TN7j9w80j4j2Gn2yDONPqAzCZWbCvlzhqyjZ8vZ7DbXgcqjIBpxthWErqkKAz7qDxiWSzNydlKYOy5LlvHABg3iTustOqvrdvZ\ +4zDbtkVQxbP9tuVhWDPhRGwB5zzF6TafsyEKbH-LhvWZ5WagaH3IUiFrHhDPyLPkvIjuxZ1+kcSihOpMlsvurFzXqcPe5BbvNq6jWvxmxbnLwzJX9jCfPyrIjeILbLx0WpwwMLjSohxonvhWbtRj1hGzjq4Ldvd4xzSfPAUzBVobnvuIBRJJ5XGGouQeskbi36MTaAhAzFqjVpwyyNxSnwSqjiJMyTPyLOy5LnvZzbqeBvChzDhT1jsxgzrvFTiDTXqh4soxfzVqjdpj-xyyARySBKhvlPTnvLkvyDMhyTNRQKmKxvlexbkvrwurUqzzhDBxywNhGVpxdzOmrRvxliltTzxPISgOfrxZushcnLxxywzvxzyLPyLO+PrzWhqzj3j9XsZRODT5hl5BPqoBv1QzODnQDODWn9xwPx5oVrmxDvLnyKPyTP+PvxhEKyzs2ZjPxPqju4rblFBzxW9X8SyTQh3Rzxpv7nvyxwPwypwCw0rBqhvQCArhxwAGrRsmPiCRPvxyJD3rQX9hbLT3uP41YyYvxj3gTBK2vnLtxX7KtTJsCRzShLv0f53qwOo5TTXpL4DDh+BzycazDwhOWrBhrmrijKTfPqvx6jL5zNhiTZjSihhtwgnRX7h9b4smgLDKvastvT9LfrlVTvCLlvr1IPtz1hfwz6hkBwyrLvOVF8hgmnzVSpWr0zFTwDUwTqPVHpgvLfSfTP3s4GeBBxygwZTXwALkRbhrIcvjqxzhpD0LwSrr4XvT1j1hhrlvhlETxfT56xByifqxCBXhyrTvYrIDfPsuCozavzNth9lSBzTmIaAszbxouBBWVhpzQzYe9TgppFzTqOPsxdPTnvE1TTXezjTstXkzqhsvJxi9ozjzrezjr0TeZZwWfVzDNvNvzAse9tRfsRTDiDLoxaT7Pvgyj75+RFhAntP7ipuAhSyrTJYbBwCwCpji7tAwRSRsdurBHsziduAwxjtRj1hrrwxaO4rh5mzyLOff\ +mHWzbKw5rzupptAt9Smi7yBuAbkvyDNhL9yxDwjRxRjtRfsRTDiKhfhxyRDpqjdpj-xzixuLmvLkvrkuyrSx9tRjtRc-jxzhGyLOy5S1P7tzTLj1hhT1jT1fuRPyTPyLOy5Lkvrwurwyr+ZblvSw4cx5q8PmxuhL6yDjLqyzR7wyoFhppewqeSpu2Yn7Vodf7Zlsbi4PkTTjfFjLqXwk9Qz46xwSzFXrtBlfPbSyHdyhQ2Oy5LlvUcSQAbvIqshdtwbgWpXTjZn4pSNusyjsmFbtRj1huvSjVvvxxbXYhquATeoLzM2Oy5LnvyirfDPpRWzuZX5kvy5OyLMjaqzZqwCpwilPBhkBwCxyihFTDhg9PnvLmv6kKy5LkvrwurCp9Uqw4rwypOBBzChsBjtxipO9sRsBjtRWqOhPkSiprOPnTMt4n1PqZtKiv7exhIlMdlZVwMzpDiqfgFoqcEaD4KjMQf6hyA5hpzNRipN5PzIviKWLxvlRraBQR7GvbXvacaLYqz5HjHpebrxPPxQkNSHPwKCxhDFgJwZT5cPTjHvrxxLCzcwsJbnvKA4JoTXjsRftRWtOFPkTTnfRfoH9mvS1PhyLMhaazbqw4rwypOBBwCwCpwislwCw0rOx2mwirUqzZq9Jd4jVpwCxyiFTDhhT1hyrPS5Ms3kKRqoQOFjnz7xJdFHxf2BQy8A0Epnucnl9LfZX-BTkPGAT1jshxUXTrbtNRDhxkXXOhxQTvTfPuZ+RRpLnhFIvncdxPABgNomNetqiH4WMIn8qhAlszD4Dx8eHBBGIXrkuyDOOrVqKtJHrxoVolThnPvnHAtUWueh9qLKyDPB57hAmOru2Yn7Vodf7YlT7Kgb73j-xwSuRjH4biKthjD4iPl41jiSrhIWxubnRJyhZSmbhiX6SJCD33PB4-umQYOy5Llvb4xDOylVbCHPNyXhKjFPAwvEqzZqwCpwhCxzChzDhsBjtRfuRPyTPkPTnvLkvrkvk\ +vLkvrwur+rkvrwurwyrUqzZqjdpjhtxj-hzDhT1jTnfS1PyTPyLOybKw5rwurwypwCw0rwypwCxwCjdpjtxjtRfsRhT1jTnfTnvLkvy5OybKzbqzZqwCpwCxzChkBwCxzChzDh+BzChzDhT1jsRfuRhPyTPyLPkvLkvrwurwyrUqzZqjdpjhvO1PyTP5GbkvE1TnfTnvLkvy5OybKzbhqzZqwCpwCxzChzDhsBjtRfuRPyTPkPTnvLkvrkvkvLkvrwurUqzz6BwyOIjkhvLLfuvTcQNe9Hdgf1B7Oh6mnNyHPkPR5xDNZxZ5hOtNlZ8SRNGnXqnDmvS1Phbxtbrb3IytdZ5CJdNlb9yDOAT1jsxjToRUpHlWInwirUqtzSNxulVWbX0VbthRj1hT9gKnPTnvS1PyLMhaaw5y5OyLIOy5RNqjZq9Zd3j-xzChqjFAj9hsBjthRWqOPyTPkPTnvJcorkvAg9PPP9ODqM1jxSoOdclwCxyCvTZqbZN4jdpjlzNwhisMd6xzChqC3rfvmySoOdcnCPrRyCzVq1JB4jVrUqnJA4TZqKBjtRWpOFfsRhT1jTfYL9m9S1PyTPNSHPyLPkvFeaX5kvk9Rfa19mvE1Tfa58m9S1PyTPhKUNhyLPkvLmv3gqrwyrUqnJA4TZqjVpwisMd6xwCwCoOdclwCzVqjZq9Zd3j-xzShxTO0PxSWyLOy5LmvVWYXrwurUqzLA4LYqs3ryDMwsxipu7zB4-cvrssByjPFh6jxsrwmMVo4vLrvQn9XKL42gsuxZz1ghuLkvBiPPftPuCqABIwOhNiHPgErThfa588CDX7gyrsqhxSt+hLHAz3Az5typfXPoNnPXCX5kvhi1PyyLx74RSqtyRhvP18rclaL4T4c484gqLsRbmZPmyvTsVrqceLlgqA3kxQS1CX4JSSAQelwyrsh9BySCbNSh6kmwirsLBySidqTSv14NYMnTh4AkDhxSx9yf+ihgXSX4Pxc\ +Fi1xhjXphr5SVN0SNsX1LaWiANNGFPkTTnhD880DT1fuRdnIXrkvkvKMo6xwCjdpjhtu7ZtBj-hzDhL9GAT1jsRdvKX4PYqw4rwvFatBg-jdq9Zd3j-zVq9Zd4jVpwhCxxiFXDmvS1PyLMnad3j-xzCowf6hkBwCowf6xwCwCpaB0DTzYMCJPIfWbefh-tNTjdqbBGDTjWKOtLqzPqEIy5OSJYOyTHDhjGlJRvuRdtKFPzy6dbqy4UxqhtO85XwRV1QzmDBlsSfPxzi8KSzQ2rwvHad3jLvldZyKBKsv5os7QXxhpizaehOVTzw71li9hzy3s6Lk5rvUaybOQp6xyyzBy-VZsxrcQarknehTqehtwSixzLhxyxKv8deliohTyROtj8SsBhtKVbtxeKpH3z6aoLsceiDFAfNrRdirqr1shzShcJAuzOBirVBwCowf6xyyEbJj4bJcqjLLo8VRrzPhUrgNfRK564rO7LpwnwmehnfTnh4PYqxxsObdMZYDr1ihkjsMDXXrQtyPxCtrSTY2ANwiAXk84JaxlthhthKXDmvOiSZxtOwL04nDXqQ4DRk+S9jViTzR8Kz9CnOANT-8BvYipwCowf6xyyhzhYmLPKq+bx3RPTNP-ykTHXXgqJc2k1M1BTzv+U+++++++++++++++++++++h+++++++++++++++++++++5kLzkxEGk209E+I++6+0+0bNJxLhm9JR8wS++1ahQEg+0U+++++++++++0++h62+++++R4pkOKpb9a7hQ3-9-EM++++++E+-+1U+6++1L5U++++++*'), false, false) + Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 0) + $end 'Graphics' + $end '00_Array2' + $begin 'Array' + ModTime=1646764268 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'Graphics' + Rect(0, 0, 0, 0, 0.00254, 0.00254, 0.00508, 0.00508, 0, 0, 0) + Rect(0, 1, 0, 0, 0.000423333333333333, 0.00254, 0.000423333333333333, 0.000423333333333334, 0, 0, 0) + $end 'Graphics' + $end 'Array' + $begin 'HFSSDesign5' + ModTime=1631310487 + CE=0 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=false + InitialLevels(0, 1) + $begin 'PinDef' + Pin('A[3,3]02_Patch1_1:1', -0.01524, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'A[3,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.0112674400000001, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,4]02_Patch1_1:1', -0.01524, 0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'A[3,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00872744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,5]02_Patch1_1:1', -0.01524, 0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'A[3,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00618744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,6]02_Patch1_1:1', -0.01524, 0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'A[3,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00364744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,3]02_Patch1_1:1', -0.01524, 0, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'A[4,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00110744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,4]02_Patch1_1:1', -0.01524, -0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'A[4,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00143255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,5]02_Patch1_1:1', -0.01524, -0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'A[4,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00397255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,6]02_Patch1_1:1', -0.01524, -0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'A[4,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00651255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,3]02_Patch1_1:1', 0.01524, 0.01016, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'A[5,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.0112674400000001, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,4]02_Patch1_1:1', 0.01524, 0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'A[5,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00872744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,5]02_Patch1_1:1', 0.01524, 0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'A[5,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00618744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,6]02_Patch1_1:1', 0.01524, 0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'A[5,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00364744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,3]02_Patch1_1:1', 0.01524, 0, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'A[6,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00110744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,4]02_Patch1_1:1', 0.01524, -0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'A[6,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00143255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,5]02_Patch1_1:1', 0.01524, -0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'A[6,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00397255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,6]02_Patch1_1:1', 0.01524, -0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'A[6,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00651255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'Graphics' + Image(Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 8192), ImageData('D:/Lunch_&_Learn/Finite_Array_w_Radome_Practice1.aedtresults/382441681631310486462.gif', 1, 'hI2g1--E++U+6+8RZLpReFKpD9oo++CNl0k+8++++R4pkOKpb9a7hQCqRjLbXhr98ZQSp7s+N+Mm8M+AO0AuP0c14V6+pOpo6k14+Wi1t4lDufjvo7Gidi0LfThFoQDXtdWvqNzLGcgf3fpjzzDzzizzqBuw9zSzzQzrzzrrzyFzjQTorziLzyjhzCiG1E++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++s5LStaqOhhiGzyxoSLk++A0DtbPTrYcxTvgyujnPkfg0h+D1nmzimZzHtIS5TDkA+k1Z6mgnvlrPbnE++C2hhjyPKbRcC+5+GvbjHThZjheZttCk++Hh4ovofvPQoDOBo-+5suyIPereszmXirIk2+++++++++zV3jr323h+1URhyJFrV5S+E-CJhhHSPyFDk++Q8uybT6C+51CpbpyT1kjvzRpixzPNk++hy7MwxDPfBiqprRxOjSpZz9PibrAljyTDuSg++D+hyzMI0zbsiCFWbXfnqvUnhTznegyQ++A1TNmzUhoTTTYyeiyXAbnqyZsyzRxdpKePPbFg1++0XkWvzrpgKhrUzLufpjztjZzTOcvNSr3JAy+A0cJ6diz3vRAhBwZpzjTbvoz5TlCbzXdl3xhCk1+Grrv7WqFQrdwDxGrPrz7AvDrvFBxCk1+e3EeZogisrjwvprsriz04-bdhvRhTuxvjPygwLOSrtQ6BL+0+srrvkmcX7ZLTlZCfeazzsufvSviS-7ZRQWRxh5U0UovQPjzeKirEteJczaqR8jPppvuyLxzQyz9pW5zYtJBKMVn7nbKXR+E+ChxiqpaCRVpIIwjbPvxjSeaofoyyRLmzjXircTuyCXBCrnp8GMLNktx-A-+C1rhxSpOPlRGn9o7AiyDppnSEvr\ +R3iHfwt9voAnLWuXVZpn7oyBpSfhT8Bo++3zGhhwiCDSXPZvVj1zdhJxvf9np8ybdtewLQTXlyZPwK+6-DxSq-rfuxefSzaOtPhZzSrytlOwTeQFoyypz1uzDofHLs-+6+jvBhxxmsTFxwiyjMpxyGpFKwja6ithzPfgujaf++1sgfsxwfRLHrjJqzpnOhyyZPsxWmrrocpT8RQ++Dy+FvTwGIRuhuhiZt97Cjaw5+60zKRixrbvwwxjpSZiKlyTfBRw43LcvPmw+k1wdv7zdqpBVhHlxjmt6uxWn6IBg-+DtJPRx5XI8xzSbXFxtv8infaXvjLdTaVy5h-E1s+Lqvhqt3OazPo6JriTrJJ-k++aBeyRjHqh2fDvYWpjCoRypievLwp1F6++2PZTGh7hLr75ueijQoidAhjx9yxU+U0+i0mjutSIsenPdytxdKw5+DWbD0jghyiw9JTthwTV8y1drybM+U-xErbBVRtxvtFqx5E1UitRrpv2TvRvdqk2+jU3ldtqux5KlhVTrx8ubgluy1rUs+w5pOxvLPhzjmbXtufoDT1U1kPPjr79kggxDPtpWEmPLxhXhsC+D0RKjRvo9fLXzKOurnuSCZp++1UatJrOMDAbPnjpSg28sIR+C1PpTOChb09PRNAhEn25+DXqS7T9YKkN++1sviJRxCGtaBQPeE++Q-eiQwzH1U++DvKHhnrovhFo+s3Fxysqy5E1Ub5ovSXg+k8buRjFq+60HxirIRU0+IzLhuCo++0Thhqx5P+E-CJxX50N+++D01G6KRquY++4TeqyT9Yoqd++1kst-BCpMN+61HIDQih+E1+KPUVhUA+b+zwvE++NunhiPk1+A17mXg++7m+samzJOjAij0i++1wO4v9hghTnlpcx--Y+UDCIxyjSihzjj-I++CQevvh1Vj6C+5+avigBdFo+s5kgmmBJhtfvmHU++b8iwdu+kZ-Y+U-zCiXsAYCwRywA4iLxSORo-+++\ ++++++++++++++h++++++0y6xBZaKMgLU++NubewvcLxaaOBgcv+A-7GjdZSjxwiuyDqbuNS4Q+h+5tYJLyIx9qeDofujLvgTHip5E1UltLoBLLdSrzyLgxLyNay5E1UdpLpGHPehaqXLBx4rjnyaREQ+yBMZLGXeiHyzWpvRDLujvMzDp5M+U-zGe-ztq4gvTHg+hk1QguKjpjLV3TTmtxirjfwCP0E1k9IduORGHrKKUeszpRZdr+6-zLBKZcZvohwp9PpmAOixTP5vRHQQg++Dn1YVsduf7jTyYXuSrovE++Tvie5p1IIqrTBTCDhuCrtASIR+C+jZDFX5bJdRzakrYvf1U1kNujuWlvpp9QLnTm1SXhxCk1+bmbdhmwQwueNjztXSbfvxzEnwFE++T2pJfsfu6xrZNQowxyrPTRTYpz+tPswLbxszh1zHqx+fwRE++T2379sru7iki9qbapiuWbzBSnzSGrVvox5MYRk0+nwYj6djlhvZANLxDAexuSBDDgJxyvRCK-rqjvB2oxjNqy5E1UcmJx4QXdLq7H3zrtafuMhjZ6zSbcvfHg+kCjmmzEoxGLpvHrBT8mrdmvRRCNJMuxuioZlBrcvPVY+U2AZhrHLe+zqwdH8ycfTjRLh9LPddoPTGjNiyjOSrYyIC+D-ATdZSweX9JAN14fjchofCzjOylpusyxT+xjNpAG+0+e8EjMoLxGqneHXNTYmMHGija8yNvXRtSRufmhJkY+60R7Gy9iyi2oxS7L4LfIvyIfiHDTt5BGtqwuRhCxumi3FIv0HdFq+DXZhJJpsp8iCbSkifrfIBqpr0HreFXyjHdXIhrRORCiKGMxnZtt0lhnt+E-yPoaDhDCdW-CYpXvfhqsxtpDBnYYx4RybmxSjfpCTIGJVzbbHRkRwm+Dl4yOKjWbzGhdjuqzwU6DSd4QexBS0fFwcjdVsjgw2ozbovczSrhiUA+sDSIx+CPGKiumkTohxhdR4wpwo6\ +5LjhpAdAfiDGbekRSRjvqakTCL1U+bZpxSwOW5RdTlwpgjLPdchqPfLYasuQBbAJrxvzK7imrKqd5T9S5xvvRiFNE1Ub0LxElvpvGvuxaASRRKrhCnS9x8IPlsjAYv3uSpLIlJK4Rwjox5OmNE1URD99dnnegaxzTtq-ERpsp2LThjcMSRRalpmtRuCrNc3vvRbry63hac9QH9+A+NmbdJZ5zN7duan-p5bLjM73Rhx-3Tib5Fv0d8wuXbjZpeuS2oerZCQ9w++C-5mmzKsyrh9gTxuebjrMHYvf7Qh+cyui0JuvrbIdTNSEbrrYZtguh6DLsBzrFbmBI9u4Bkj65k++5taGFS8R9F9hx6VarhCfQnO9RfYADCdSPqyNY8v1rpx5HQ98AyHdpDrwlaaHjpvoSNbx5duThzos+s0T79kTKYbv4dWtgt8h7Miltp4jTvaneegDT6pxKTTVJmCNf5HjJDTxOh4zKbYfjOsUE+wDp9iYVBCNXiwhHB5WbeawhvSH6ZKXjh80h4ShGvYv-SVlRihyOqygYa1Z3YosTo0N-Y+yCsZzFKDSjJypqwtu34jLPHLq9p5rHn5T4ClinHThXhHDtKAtZmdRBuKerkT7Y195lhkjc5I5UCxMpMqWzi6Soe-jDy-Frsca2zf7hXTj3twbI9foaCXsxTwiHiJnr5kFLIRI1Nsv7RPTHeSMe+9QA+5mXYhsOxR10hzNdBTJuDSBHpSCYeFoEv0Sdfx6p7IJzAJM1lhCjLrsjtP2iu53+prygxAvoZhejHh+D0Bt-SVe9RIlex6IlzftvodITwQst1NCyGZv2ghCScuaxprrOZ9jlJ3hzKrRPvNeporc+bewuDpiRLubhqQDDC21+D0j4jKCFxrMLJv8J8zSPqpKiMTuhiQdmWR9IdItixdYqFJrdrahxhHfTqVfpyNfHppCXjXNnnbvUuop6Ey6x0ONHhdJj4uyqovU1kXyGLYIQxuBhTpBh1PRlcvD\ +6thRAKrTLiBb2RjdkYfNCkkSGdhi+d6rzLSbvSPdChOLH4dPrxP5ueCGdKAwb-A9cpqqeUf-Kcv+DnJYbv+cmtHh1HxaItQRSoxXBvsLxsqqkkwxuY9cLgrfJwqwSRFLoLijSnrTizTwKDHhtRg1hfJtyJVevLO78PES+DpnJLzGcTm-BLTf1bqkv2VtpuIWFYttpkfFAYbOrBQZIhFihvbmTjIOxRSifSIw3DXlw3CPhZx5lfZ4DXrH8-slqr1+1woN9ycYTRd8YThwOVjccgqDb0TbSsxueZ6yWJ5HnreayeoZxdvtsz96ZvhKgdszgVGH0jjxqGPhYTChzjThNPYvjLqVRES+Dm0zR3ABXnnC6oXx1DNSma9MFTidoYX5rhcYOR5AhbrjIwqpHRNCoBxaueyuhGoyDWk7zfrqvxAa5PVbtNl3zrYpiOwdtBE++LpDGhJMVuKh1whKbelg3W35Iz7Lf2crufWPhnrNqoDjKNNyi9YBATnPZEvspabZfrhFlZTKzSSRTUgiGzmz9ogxl6yc2DU7tiBKS8C+E+y6vxALZ5DfcyjG3Azt35DhAzj8-rv6cnujdYgDCySWkxh7oilvmPzLhEcpFXBDPVadhkhNdXpKJlaLoLFehjWCEvXivWE+qe+9+llhpjSr6uC5JdjuGFxqY4Vvre5ixLLPCgIRRHw7iRbdohAdftEp3TuxXFrc3b8qDHn8JRFqfauNSArZveSLiwmHzCD5aRrxsIGBQsKayjhLWDy8kK+3yKLOSlFhrrvWrevu2uLbgPiDCd-zbYuMQyXrjC5Vtet1D8ebPDLhnCLtLSRzBLevRAhIjRrcuaCrH9srsGRVeSo+w277Lsyj7QpmEKQ1OSx1mgXVhZCUUan5wFipFbvl5jOMmyixhezfm9M0ge+woQyauANdtjdoejXRT-EWDXH57hZrSjzIU8-pFvWSuIRk-sIh6XFTo9oxHxlCJUqt5rYwjToTfAXor0yhSrqM\ +mFhFprovKr0JCXhIxjTSexxSybMYquzDxzbsRHf1byJN3l+SR2S4pE-s4-J3lvphJnLnHPOCzSQM1HkQ9loYaFghiiOleBPraIRRC3gKuLvlit+COSPCdevww1ZMhtdcuT5DJ6DSZmjCDgqJervvFhkD+YN7SBriyfdbPjfqX4wRt8Lc9oitXaEMthuWMRAQYLOdDFq8CSrCb0cqumNMtftfYP3pQ-tgyMGbdspJ1iI0ldKtCNh-qshNJHTvaM2m6E2+CxFfovd1xjIPq6FYZ59bKixvF9hRSnSvpqzK2dovLLLLXO9hgPuw0Sh9HLptJHCLrjKCHLrpTbKtCpKSLkNIpjqhzjmaPqS18U0sYhtJp9wehHHqQ7DISRP4HeChFBxpvCryMmiVTrrbIdHDb7QowbX+JbTzUmYJBYeMQS53yhuTnlHW5HgMwreD7TCA-jfCd1XrdnGbxIPuxfX9l5rLiqVIxaBR2iIdzDfuyrhBFaxCZmWZ1Jntp4j5dibabbeqsrSPhomtTnpXlxboQUEyq7H5tlTujDaXY-DhPuRj-zXBWjdMDqxxyyhuSotN9-CODMyupN1ZxZ8F+nDqeAhIFXCd8VkagITxhJQqwttNdjVSZtyifZLnJc8uGwdq0vjZLSTtkfujxLdpgmLzn+9x+TdaCSxFBh8iB-UvdqauyWRSxup8IXFSsPJHvnSMbCjzdaBEVpf8gluazRpwlHrxvHn3Dbhfvurv1yJyfbqienaz3tvZv8trQQeTWHpQb9Mc+fkWrjpuED8yT2oRSBUwJCWhDXixBk5exTOb5jJudJ+JRPYOcndbDeyNmoH5dBiv9DRBtx8o9jr7hWZlzYqihxdWbA1wbn56DBuXmrnz+SKjvFnHng4wzsZ5jXtQywOVLjHq9qwoiwgGXLduqhe5X4O99p7QowzPaANisxudiIiDrtbIQxoBJn4JyePuRrzWfsm4H6aiISxipYhEU8QhfNfDTPssxf-xXM-x\ +FkgTYeoZqpidZ-nWGuxvjvpynXDr4QntZQEaskChOiPpwI+n5zXtmzZLQzvCSmhwCx8ogocbXBfTujzgwTMcwFWr1A0tOzjSNru-hHLqMwR7oQbZ9p1TeLMzuNOY-YaN0oriwnGGdKIjeBd0CBDCq-OYwnZCcKXDjhSRFJV6ssjvni04t7vCRLXLfpvOV6mHKwjn0ErBaU0j09OjiboxFv5bLTULixhzM-5DNu2ZNpnupHrLXTtKqezbPdQgwacnLUKhoZj0t78NQkz0dKHtsZ5TEtGh4KiSjB5AHOxyinRLHAqZISxVB3rfYX0rI4ybPkQsSxwyTIljxxespxWxcivHhp4IQijRsVuaAKmQBAanIkop4+wrQvn0hrmtw9zS-NetxCuh6InxoTXY7Or7dhnDZvKSuFAQbqvFiGCw1NyrOjaMwTmqskdObrr-dVnYbcuCVtj5jSPBDtJsxrhrKrOpQnZ-h96NltiEH6SRH5BCaaDyVewNdoGxJYr8R4lyLOiQV7qQ5uHFHz6hQXSOjxLbQQg+b9GqPxhqo8PiJBnFheD6Pfq4qojrzbPYwNPyQ9bVhBZ6VVtphctbvO-SdaGirHD8cZsqZDMyxbsEBDTPaGYSbjcVf57R9MnLzofQTqRxe7DQUhMENN-i1YhTo3XrfR6VFqWPZXjkRNAKrjYhPAbrfIFNuAGboFGjhoI1BDXriOhSSfPuyzWghkrtoVNkeiAm4BT7rxLbpQnDfzNsWHDrrA8tNuwNAt5zjOZL0KFh0EZkwfuxdv5vPflaZSHz8nHno8BiNmcTXOulWkkxuaL4oun4A5OLZ6LiDSdGhAtTL1X9OFSskxNtneNbjVqzPXYnSGtWdrWGXBaSuVddtS5ttjw-QywVQbJuKhSth5e4yyW8mVREQsQKqLeMOxPD+m4VBDWQdCCDnSr0haVLyGySfSPK6wui6yhMx8QJH9YEQpQDitdtYzwz7COt-LbvzbAZxmfplx7evnGq\ +Pla5bfgkzA9Rwr6h9RDiFxGss6jCoe4q+tmohXyJr5pDvhDIXITRT32O+axFea5cINQSPzYv7Yyyhgub5abbHqALXOaLI4oVXXrdip8QhxhU9ft5me3yKavn7en6YqzYTjzrftyxphzfRyWeNswyruKjsV+7mqhUxRvWNRg+cFcfgCIVlBBeAk-8vSPO9G0tp5jLP6h7dJlc7YD7YmH6oLuw5gHdifwsGMXTTuWaHR3TFBL4IrqqOyGujZTri9IAae0h4E3l9qBdPdlycXhCG61HxypXjRrrvJgb1frbINTt8diSJ8qhPwyXPXJnZOOyhSgrQvn-Brmtw9p9DpvhNPPPY8Xjkw1v069bFtgY6cGPIn2CDTLLLmzD9A5ZnhzZ-mBztqBeU0b9uqPxgcXnroYwSufj-sVnekoPfBhW0HEnvGb7DPj8CNSvR7hrLxeoV3BtxnneBTPc845j5TyL4nLJKwyPKuNI1CDvlSIDuzRLNKQA0PiC2zmhqWnrkBzSwXk-sAGpzOanTHKF9BeaDcoxuZcYjwdyKCs1DO6tapF4ctYrhoblhe8jMSO5t0rbzyTbPsLQ1cMc9hciQpX02dlHqb71HownfyIgqne6uzy1wYxVdh4vhZ-VhIYKI+nhyrDxDPulMYgSocm4PdCHTYX4TDsrp2AuydX83abXrkqeAShPX7GOjYndp+hnfRcqt3yTjddgUedN-I9l9AaDxXWJBDazKFioxj9F918-SdRhPP3-3S0rpbPNPEvoxZmaGeDcvG8llrjKEJVvFyqgU6QoQq23v4fasSAuUWEJhRK4wvyScLlMJ1V-CpofBj3p2f7oMlhLPp3wvTz1a-xYmjIl6ePRjGCs+turhhqvMBIUrhhWCl9pLgDtquCSEuFxrekAQowr+9obV0Ate8PFtvRQux7szyj+xhhz9OireCSZy6JTvvKn2KVLZRHbBjXnVOb6yTrgk0xjmwNnV1evTHh+0SjvEQYhxvddp4S4\ +GwrQSxHPWCJyYnFABSldti2CItCarggn3lvpJSt61HMQnLd1uuluhRNozbwPz3nYZOXLnmn96jNTuSNV35trTqBHLkNgjxpKpRvWXhqT7bT+-U-DrhvItjHmKidvS5PdYqwmVmmBBnXeQODdrEJ4bezEZBZGodRD81toxRxuFKQexJhAxTvK6pajVexLJV+GwxgQrIKdtYjNWSgDvxDp3ErSNpPVUqe+9yhhgjKrLWwhjSb0S9l9pgcYf0xLaIASOyOvHLrUAzQvHCLyIri4SEcxudjNUiEwxf7jBtimhxQVhANNI8uCneQg-dNtHeDfPtTq0ggF8b9ywyMDnutGSmTXknRyOamysWzQEhmFrUt9LRxcfl9gvBNQIQweWzZ4dcr17JhnROgNuELLS3TvHDpClgBL5-OfeqhctYrXrdFjoDBD7TrhSuEeWJxQDvaIMwRCz6RZcaOsjkaDpzR2t3xinY1THj+hiKivxLV5YbiHbJSNHpsvz63afZ6BUnHptX-7TPjoSBxQ8eDKb8r5Sy0lZntnhbmotpgnPxwvKve8QAAaLDezeDc78IvSOyRDnWvTu8hT0yXTTNvanEFLUxxPqhZ4cMihmRretGIu7gaQyb4VeDhxxYJ5D6erzyuLFhxNZ9vTdXafat0b07Z6jrhz7ghGDIeGLZp-iTDypujsJJGDph4RD7gI+LsbPKxbmoH1HYejTqsNWsTPzowhwz-lmo6LqteA3OHfIRT9dgqJm55Bz8NhXO3aDXVzjZvEhnD04E2x650x0RzFhPPJPOADxfHsHAhHPuRg-nhurHmBzhNkbZLfv7p6BNGfXozqh9MRwIVYsMY7nh4LjIVGkniJH4WrnBhatDuCqrJPVZl-Mbcs2TCPzjfbqWNdil3KyypCQ5Ak9phRRE7ZQuzuPAFDU-kwfsx27ZZUfekSRigZIUn5yk+9JN4ozcCDSfnN36NNRxihBvF4WffGb6iJQO0NDvCdlpbotbKOxQLR\ +9vX3WNfZXYCNt2qy6tifotwF0BomhP3+3y7qpTFDNAe3vd5P6FUAzbaccn6HLLedVuD3i4SblZ4LLcuuiAcGcsZANhjKNixDOKGmBx9m8FoaXareASbZxiYX7LGL8GBwXJuQw6x1nksENJLCs+tuzhhEd5iNQiMDO4xJABk-qXRTqf4w2rfqzCcWl2SdGT9-IB4IFzsn4hjrz4Nfw5rhZd7yixjv-JjpaQifX4DbPtezxuUDQbK4Ak9pP4J3v0fyvenSHhwCQ4NBNXeIhtKvqb6tH1Mp5DIkpB-COMsyuj3767JdSNOVxf5rBD2VHRpiQgieiDSf5nxzHhriIxWrdz6TGcDwrJSFCOTxum3CpjhPvrsbG87a2dvk+beSrmDhqKLSv9wq0NhdhOiiYZKabZCUBESRNSaParS+sxrOx3nXjfRypuCOCMhpvpAWMOOSGrdDgJFhFv6glwxTFpxBr52k0TggJwTA0DFmRI97LRxr23R7+D11OrihtvPOxnScaiZIhgw5bdJF1jMp6P+hmKffKh-StYvHa+sESyv3a5eMm4gqwtnarJgnC3IqI3PyshbOe9WnhSbqlWQXA0jGpIEKPCpaM2kdqq+5-8jLrHaN14umuRobsTe4Zx-tbYhiP+IavSliwESvxqX5esZHEKwGRN07kwpQyBIYTQ9hbPRwSnwlONSnmYm6Srthgw5y2VjgxJ8eftwF279vjJrpu1RTzfbspk3knhdy7Aixx7ZGTluY4WeDxqKFhBkqRbdxjO+cBLDKuhyGcqHjYf7y9JANo3F-etZ7vnnwRpXWJwMZ5jKkvWgxzhaPFaPfQppIfSx5yVyTy74M5SXhTsLU-i4M1nxipVaYd5QZxB3qrQ7c55KsIKh8WpOtvegAYR3uipK9Wv3guSN1qneJKxrplriz46GpYjK7fz3tCq2XPcwjkVOhbyLtjqd4k2jirhxSvYFEqk3CJRuDPZ-pyGpVei5MsmpH1OB2l2ZBkccA\ +yRVbhfZANEwrQv10hBgUhqi7IJLejGDTCfnnYwjnvJICRV9JvZ8n5TXayVIdZMrOqhI6af79LrJjLh4rovk8yevTQkKwMDe5NG1NRS1fYNsH4N7m8mNVpsp3gqmqKFhtR3fthPZQZ2dXjtyEFv+3lvpI5grtuxzz2uqN1z9jSXk-qQ2OU8YLxIb-pHBhJN6DsTTyxb6TVD+-U1DLxdta5aGt0qS9Q6AQm3T7qohhOcf96JywFro9oxFvhyphHTpun4OBIFXRVyiHwtNf0SymbudnlKSuVlruvrpqWtada-CevNAsTSSmXhemGhhsTyRb2pFCgCQ7vmTb01edDQGuPureXfhOcXXreN74pfJKzKvr3IAwyzhSq-HPqsNbvJWvVTI-M9JGT92MtxxDdpgGOqNVyyYXuMNn+Xo2WbBatx0OIlShXQyK0TBYl8hFqk5CKxj59bTVZWbxwxHw9GtnliOEdpvId8P6pvGOQumNGyzuhokbBS7BFhK7eXvprmlWDSgqKrDMyrDXPLnqzpzlTb-4crLVrFg-jakfpRX6Vh+Lt1rzsomxpbXvzdNFDX5D6qYfa52hFIlf3aTe1pLLguiLnB4Y5XAwzZDM9EhM4zXAML5Dh1AczBvXzrl4E2TRqla-CeDBeCoGv4xNgh6jNpg4M1HxyqxeQn+hQS2wwAqpYXLken22pUtHdVdikjgxaX-RFSyuuabHsMFaajEIYv1qTc5iz8rahfnreYwlmPnwgN4vwo4Ajnpxz3DOqIDLCDtUFY7ezxVrdHAVkAlFi4M0nZDRkhUufCxqsSvqUBoxqvNOn5SlKi4CrH9bqvhub90RCCDZmmKKuR0QrEcmurC6KuhR3KtSltputBLOSe9ogkj6wbRSCn3TCierblhTEZb-Bk7JzYX8Jn13BjyuRg-hHZvPKo8Ux7y22stqwj4WijfewFuZ4dPmu1LniiFCOSmvZR4Yl3WTSRyXremAhvXt0PmRgnmQjDDN9Nw9\ +IbfwyTnkX6AwTr0wkJmhH25RgLXDCsLRxyziTW5wRh+4ShvQvX5OxDpE44RimcWioa3uKKxzNsRqu5afZcTNh5jLPRaxu0JDSrmYMrhp8vZyKjtZL55nHDTpwmBNnvInDrtBvg3mQo6L7MXtpTrAisevfWyyO5qPatMhmDBghCs+NmbjMENUnyBhiYHHGIexzPJIkvpjvqbahIAqDbDLQms5rGPpTc3khm8iRd2ejviHGJ6yuwiesL-otVSfDrzDM1wsjvagcrt5TshGvJy9jBQVCbhcChQCPO5faUkxPR8x8FNfuML7GQOfWefIkxnLngBga4Fb2vECOoVrbaKSsEYuHNh7Jt5PUxftbqPSXT9rKXyQV9KfrOBxeiuBRbjJoP-aqyzpqF0xYQ4Y4I+nZnPhlpbihJSImMoWZR3ctY4ecRo-8jHVrUvE89pkYRbdIjDrLOhAQF2tubsnoLDBhjDOuhoXnTneNunrqtjmRj7p3ycu8mmXD1eHL1DSrabgWNcCeSMlP-i1QhPrqhetg717F8RKZoXEtgBTBRQXRuixo-uZfT7lvpSF6qRPIbx2qAIkp0s3IKTR5khbqfajPsxDIRetWCDicsvXaM27dJyKQ7Yuc-+TTDTahQcbV2kSbuvXm+pRfobh3pY4s+HZjJjPXQxQS8dXlsL6WXaSOaXoxj42djFsqqGJ8DT4SvmB8oNtnZgehMwi84LXgtMFdqKrlN+jJTbuPS1bifiLtwkz5zHbqeYTA0DGmu9JjTyfqvLTuhRc1HprPZwPtp-ZFBBlhfth2Co8EJJryvHHKgiooXXvTDS1QfbBHt9mfeLCSKhfxaX9h9IXKMSSilP6eLkq2Q9KBLtnLgJSinf1xNMILRNvYxb-A8QT5yzE2bihV+w+b9KqHprJTP+bJ9dBT8dVuxVH+eH66HRyyBEx1XnStacWRuHryuFjwUswhua4OSYwnZkdqKtPhDDP49NCrBLLC5uFTujD98l3zpKA\ +rAMYNUOmNXt6wqkNJhfvTXZU2sXScSJTJihclTkyFxppsnHv7AYct1KQBftaCDhvGddo7O0qOBFekShvttarXneZm-GQhBiaNevPgsgxKdzyD5tqpfJHfOYnr6TnkW2ypjZqMn9rKfjh7EGSTlc+tuXhgcTDhPrH9KizxCPr6jJqUAcQQXRJicYReRpIExi33gb38icphmCikNbtfNkUoQyZa1pANumFdauvhbpxDYidgmQvypYzC0BHTJrsqTPiOt8Koh+tl0ZUYLRjGmrAApHBvdPPHlEO7XQkAOarcl5zMwuWP6mqu4CeONuwSfb4wxhSjuYqyhhFntjFqJ9CcyxXRZwQIOUS6pKuRINN9ar1OfunKS18g+dBFbHhuhdhmWpqR5X5lRBIEub1JmiXQrFghLCK4bsRqnQ7Vrirj-fBTu0Npyg3yLXECITChYuLZtuVRgGfiS5nyuf4j7zmXAk7u2pAvDlhI+Lt1SKzWHBPAvxvf9jhA6r42heMOllrhKKtnw1Z0NPKUwuc5Tsl9MFHMvMPcOdspmrSnZJ4Xaut5nlltv2TAihnrPkz6yT-CPwwzL6X20MFKzC7jRYSLwvTHj+PuXhzOtpOhYgxNPZgkZBsp2Lhou-PPxhFnuASr7-heMlhTqik-QbhA4rNYi8el9hBUal7bQfcibHfIJSHg0P9hLOJ8jXMXI1TDXaQ2xiScXDdkFY1gh0Jw+C12hTo3mJqaAYfJRy-F1nJniNIphn04DTSP3aiUqY5NraCM6+iqlxvQASVtpsv4rSsvamNwzC5nlqBTnV7dtD0DEhrDJqFe-C-sQ7z2dmvmGuovc1b8mwewJAbEqeqWyxyGHkKZs45ixBZATGPGvGhimunlwSOiPMmxhkaWz4cenD5eMnfyDl8wlSj8SCCevvhDTNPa+MTOSNmFW-Dh-lHPtr-4M1LjUvlL2Zlru+qezBA+C4ph3uqjoRtxumvYYQLcmHqDRvAmucF1hYrwmpg\ +lfINKOjxTAQz2I5bKzWQZctaCDifHoG2JRuirXL7duzdPlfgxjRTsGhq1uM2OXtyS5tSrhIXRtCZXj+yTjq+nvhaWtM3SZStcnf5ewa9jXx8n8BLDPehMwpQDVtAO6OdX3gp-CMU9yrJuSKcqkHsfTbnCpboHnnqwfcXaV5cSSn3yGRxhzbKEtSsn6SpfsdM-C4zTrggkRz9m8Vh3YssGtt0vSAAr2I7vI1ADoxEXarorhIxrMj8Bjhqa8NV7KuirpBNxZoLTWLDGAE7V35pytRBzwC+rmHSIPg22JsDnZhrNNuqPgCgqJY-xW4UAmynX05D0TKDYwpp598uVBRv0vFcQSy7PevGJ8njpJehzafgO3rBT4tpg+gfswVX5tvzs6m+WHgCnmyjYgnaeTdsg24JTlc+duvh9gixhXBWfOIcV9xlQU6ZolNV4LTeoumOaXiOwyUtK7X3K6Q8vHMFLLDZqFClMJtSKhSbXUG72yyGewdlidftzTNx35tqyHg6ANURtCqzdpRozY9gt+7WH+PybPXQRPhHeSq1h-hEJ9iYHEyLr96Loopn6KujwDISCmxquFZGoOdX755TV6vMRDjAcIShStAeqR5AZz-yUT5ta4ZKoOK9P2Zrjm16qmbvKuITFYybHbuyE3p56Ag+b9SqhvpqWx5Vr75SpDaZpciveQwWfNviZ4etlea3jVuZAQHHmhJGhhQ3yvLbgdSPjhb0GlFnrkq6goS8CNazg37cLGrmwcComPFnrIrfq9rWjegcoDAm3v4pHtpk3khXj6SH1ANXzTKGHLQizThPfrThQDzYZH1T-JECaGN74ZQ5o6nDt+Doy80pm-PhQiWl1xDUEwqwFEGPvIvFX60Q7-qTLwERLqrQgQVgZpQZMGOYTkydvE-bfipBhmvJSRxyrxr96spH1isklT7tei7IQxK0DOjbROkutgMgADCcmSR6TzaLBL3UNhjKMSbfxeyCrwZoAn+ecz3vsXsyflKS\ +uaYuwOirZAuktkvhciyxKSLnf66IyRhjBLAjmPJo4wmAVvvdrbapOBiTWF7rztlnPkx5atl4bbgYxjzAdYN+RbVKsSGhxFrRnTb1zOpyBqjUBN9NEE1kwwhvdvNDDNSv5BuFSbIpBxNgYthABRFuixo-h4hjIyltj2FQgTmzTCTQwuYOjDeuN1qnq9hbaoDbhzE6x6m+4-8vdDcJzwyiThOt0ZDt1QzENJzaY+b9eqitHjcf4P9hoY0fuIOZUTXpABfITx2eQOaXqVHHBThJyhFjonO5x6owwRj5qba7Vzas-Mbwnv6PIS5nvywfKpguepsvBhJnr-4k0FthNarTtT198EMm6E3CLBhJjfRf9uI661LkK1ATvU-Bib4MOVVuj8gS9YIVhuddhAVtjsseFabaCbGYSxJ+nxtpk9gvZSooKzRWXPisLyDA55bIl640mrDqAUAyWh1nAVEvqRP-a+QxRqgM0jjwp5HoQSGHKIrSNSHewapP1BOHODyiExua628SVshlFsBYJHNxtYrnrljWpD5MlyaAXOTSPr8C5nyACtsmWJxzQ0AE5WjF7vNuCqshNE1CIRvXqXsRXLDrvd3EAtRiaNEhcndbwHemwlxsj4IAMxKQSvuRLWuBwOXvh95fjgOzD1wyjPSfHeyQL5dV7LwIgFqM2lfYulj2SnUUUiECQfvP9yrFPDwhRhRs+hKIKZcoGdVX85r8QOXXQNxPfE3javXXnS+wpQlELrBTDKsLRG4SKqcmBihaJP4OwfBuDlDNUHAyIqWdgzw0LDsqpJGxic+kAyivONvnvLRNfCAghmZValOhrpuKiwkVfu5cRJiEoDkv5iweYhjJ4BifabasmQVctUCDjNVIbSHtknyjwirMhiCBqTdR35wk6j6bKrQk6P07FgtSN6nJzCEavgI2Js2GeSzWJQNutnqlz8RJEhtN1b97Fds7MFKffNZ9rSd1RSC5aCOCNSDnSOyM5nfx7NJAttXwzzR-\ +9qonA0hlSgGiqLgvpJqhhdxfvXQ+ItSqkxiI3LC2xwtllvjWvRt-tpnJOFnWcgOCxeYhgOHSIVlftb3uSNZIpHPpsTZ3seuxLu+pwrdysnhGyqT9fsOOyNTA01FNNZvYhahTcHUGNY+0zcqwTNfYvzRaa4gMSvrZuYgecQaaKJVK9FnrQN3Gyxm6vNm3lhe5kMCTsjwaeuafb8ZclG4OoXlSHhm2ZMtv5zt6m+i05PgiU5zbYqe+9wqhcihR4OJ9KAm6Mry93jTUQTPd-d8DHzLE35wdTxQyieJnrlSbIrxDhtVqeFyQEPthvOqYeql7Svz+TazSuvH6i4CnfQYSEAGCSQpwA0CEdZP5Ak9pFt7riETyxj9ahwuw1s2nZrKtE5HdJScs9qHoCDCdm-2ZbXAh2get5LKKtWoHotpiQpZIZe+izhhr4PG6zu67JFti4MN+PtLVotTmxLlvVZgizcmTbhJN97Zd2SSzdqU3xIqpyEhr3IucdWFT76DovlzOOSeW1SITSNMAmzZQMaWLKGWMzCcqwszwBUj9txT8CfdhXuwaMHgPJ2JQwD7oFe0wGsiRfUpb-4OfqsR9JABv2CauUrwR+0TjqsRNvX7Rhg0vUuuIOVdqzH2p75VjjZbaeaIijXbHgG9RAY98cBLBnzYASyyeKQSTrKTE1hXvqT2N0OSNgCu7yzz6-EgKDXSlZgI+Ls7SLRPq6ONvbLw65EtiprU+ffm1L7hm1splRh3ldetTykpwoASyx9fmXzLm8Cir6l8Pkynu5iRTmRGQjrMyMITNVeQhrqStKxwygUn+eKhvDtJFiKK89zfSQtgI5TVeQgVf3YfupI4ecR5AKr3PpIOYhwMGaRMxQfa9GLxwj20sUgJBpIHhVvTaLnQMRjrNyctYzmP4rQQRfPoP+i5QahjE1FuypYEU9wUhdyG58LSfjgb3KLe5D6PrZHxWPnIUOdVZIn5xbImkWGHZBrhrP8ojWXNCSjGRLyfp\ +wlBN6pSCFfOp2TbXusvbgw6hDCvykJaSulq3eoa+NsBheU0zhfMrXLfH5iyVsw7fte55yxJIkr05OFrPnrqvHaIQSxF1Xvowzw0X5aGthmkqeUKOyyDg3tjnmeWTgz3KqNCTw+syxQQhYlNsBeU-b9yy-sroKUtzOslouh9ekNEnL4fODqKSvtQNFeiBY7InoZKYeur1Rexdz8p7GllnswjAaKvDfYWtIlhxda5xkj2XuH-X6+wjwq53yTjjTbaz42adB5PmL65C5ZhnovjOPG9IqlZAhtjhsz5yN8dVYqWeFvqcru55jiOf11neeLRpafZAr3rPGNl5jKfanOainlyvNQfnhZIibCmAkDTLMptqetWf1rzgEDjksVpzqvMED+7mqhUwre9eyTHLVt5OGJ8MOhfgxH1MpabVJjvJ4zWJH1o4ATNg9MDP-tn4flCobpyRS-lpt88u3arbsLtv4DhnuxrkjNqcNM-pOLuXYlz5aOtgo2JsDSIxsAPJ3qKilf4B-tjdtYjFp6BFlCahrX2WybMt0GgbNrjt8fbHffpiueIXXrpDAtQSyoqYAjdQ5NylMwtT3LIl6n+BhnryJ2KddatKOCsWuTLajlDPePcAeznE+HZrPvsBgaRcf8epMqoIqaKecxLOnh+vFap-XBjCTljdass5ZuKyNdiPGneGnuJKJ9OcyuuKMDOiP4eS95MpwxzxNlhmqkaKp6A0CHrItHfrjvKMUFOjSFix5PuRc-Tp9TP5OZPwvRvjTqDdFderwuphrHFw9ybfLhWLqIlcxXneEfKSH0eXqRzeBLBNbBLXTVNxRDuZjcRVRuqjMVPHhexQTEyzY5svJOxH7cZRvPwieXe-jjyCK+HVtPHQuQqWxY4sHYuyiBDCOOhXNh+NfIMnyVCT8cDmdteiqnz6UownJSemcptm-BTHKzCfOdmnHso4BjgWLxzM76h43yfXwUoujZW7tcFu4LFxmFrBeU0b98wxp7zelROi\ +OaRKwNpxKI8QdVeK8KMhqd5uJ2DhwFO8SijGGxyS-7brfyjc+uac4syuoCe1JANMArQvKCLyIxZdampIhBZhmgztnyKSjeMnu8iZOrzAq3y-a-ANNx37jvyJtsb65C5xhXv8yVLVvfzTjhX2kFOiNa-qVBU7EN8INn3UuHoeWzhyJv4QxRiiXPQoQuHmtlhyhFpvQm3qpHhppbonaBTbqzC9yRPwzZpDCBaghnR0PjX+p4Kyw2N+LAqaNbjxTOG0Ibs+A0dhOfhIp6wYCVexTN-e85D6SuaAcjBg5azJaSj5hRByipnStjSDQdBraJjzDxHAhsnHsXZiaDhBhbhcWBwuHT7Uu6y+JRHY3r9jewTQgKitxt7MlKSvVX60wGi7Th-w+7J5RNttxiIDJfa+OdVa9TOAgVBkuHtjRCanpfyuqpR8yfDwfscuFTaYRxh1XnesnHpuaCDohHJjhRScaCnMdMs3z58LMyuW1gCSbWRFTyd4M3EnrQn+bRphZIFd-nV3ulsan6kqe6cRc1KrzBJIktN1bjhbuJ4Tf7MibH+DySLmrei9YbuthLKRtBL3QAkyiCtlazjfthu5Dz0cHvBCIfbkzcmnuHwo6BCzuTUOZvRSsMD3Rhp5O+ozHhMKoDxTNc1NAh9xub5HvCVKLOd9shKxyYgPS4QmzdgZ3L6tZ3ZhazhTFtftbsmJBsjA4uHq8Ci2rQrBm5vp8CiEinbumRb-BuTgubtr5KEtNsDoq6KhpBxjzVA-k2ZfSwxbfjnGudPW8BIkm7MgxkrX1ISZzryvDcfqPNvPHJ9FdPwzhHbrvSxazLGwmZH4MABLtAAr4iRfnVqsHZspdvlT6nhZftgeXLffoddabPDYshJmSM2N-i4HAXs8S1TK8YG5K9vUJEqk5CJRszg22pr66YJ3zXIOzKYG0JwKMuhn5ZGBoZrRHqzzZvGem0HTqayy+bBedaDci1bpKxlAhqymtOAnywpQxyZ7yi9hpQnb\ +dHQXoAdvB0CEDT-vPlzRAV0uzM2BejHh+CSjvQABehIdvJB8P7NvlyBhhNYLBRWRdO0nylemxp3vxwNjCSwRSDjQaBBIK713nKVRwaDg3oarW3SbkzAN-hp8t8viox4KbaZujIz6zD03H5ILWzEpsZ4PSAvRgrpPSH0Ebk4zdqcvovmJqBhsKiPShTXLQiXL8jOcVdHGPxSedmSyzC5FBASJpb4xir9P1FnuNN75bKHmXUshToxvZtdzvNnXGRVbabbujoRa-6fjuAWAU9f8A5pvu4xj3VdORs1nxiqx72DNh+GebhB4QbvZBeVIkG1WgqteGrWt8ijnQh7ctxyqvuVuuHJPXINQRvkTCrzOEhadqkcYAyfdazfKd4k4XayTIjptfNzal4cCiKYKTfuSr38EE+7mbj5xiU8dexhr0i4aHC-lnhZcJHfG9YVKAHqT0ApTtu1wetidyNGDsKOSKy9Yl0NgrkVzCTfh82SxBAxWv4VFpn8jtCfQpXMXICRPZOgbLlRoNkGWBzzSitRFTv1qPYDEhkCQhjPNrLCvGWpuQ9G997QWQgHbYZujrSAjEqhiXH3pOrrs7ybNHrbDTbaKNmnWJhIGL1WDD9DpTbOYJtp3DL9JAKLx9AtSADn+UoBqNtjXXzsgwjwie1j00tItLmh1b1WqdvOrJuKirFQPD44cCZd1baKf2ieMGuDKMSNHBxixDMamvH56ZuafzCLhesmpqhG1wyhRgKauJjPevT+dbh5Np+StCa8Yx0sWAFSXaHwvTvCvP7ohHfr6h4XaUigLq6Kcvk2b8SvV-BTNsVss9eyhiFjQq5izaWV4dVXJJwfMLRe4rDtRZhIhyS0rhLQpPNYjtyENVtLjvIKyqodpnGUpH4UKMya11BjdRbAk94RyFb-9mihPbPOVZbikHo6OXj+WKiv2cpJj45T8PpeavQc92Zq3VtjenbfphSdvWZSsBuvhbKfQBKN0IrfIPp2ecnlzZNr55bJz\ +Ta3HLkDBLCjhROcozJ+khnDYCQqPPzPJhScxxXHsknuYBj3b13DPhvvwXznc+HhmrVltpCNoOyAAbgpYp6rD6Cua4CoZjhjptGxmttaxxzZzLxwpvAuywmrP6ZwZ9xw-Yp0RgkJlB-njY-XvfJn3COSYQnhBquNZa1johHZX6+wTrmzk4T6xrTOmibIk0oXx5Mqe+8QiqyDDCe-t0uGoZInhDAZ84qbC9hKkz+X6wuTtKpDFZiKxTZrwvBVebpxyFp2YFIbLXvDyb8kjgZ4ThNVqTy2knBuaAFXCjPdaYqtixdM55rbbIlnA0zYeYbXzQveFb2u8hIgUm+8Qchvq24cB4WEppLtdaPFZpm9BIkDvD8AeKSvqLwoP4zLorQ5yKxT9rSSupxyytphHxmZGmSxwWOi1ddXF5XIhGhaCOuNpp6NOiPJmSxroOdAbfFf8NzhDjPManp8hzjnagTH+evvRuSrovE0zc9MzRvaPMQnOTVT7CUgODQqtOBSHIayQ63DvxfR9heSrLmyqGZTOWjQjjOfQAuVb2RIHme6jnfrSHQbZEAtSDStetrkAf2mancJ5ThnUVb-Aky8JbGdRtSwz-fq28oaBJiHHJxCy21+0SivGqPlKKtVys9wOhBtHsmhcKZfymv9e9sxjyPxoPqLfqzvF4fub3LuwZouaJkcwCZvpw+xofku-nHnrVOYhrVObdltvCkhEFeWAFxpR7FbrmmEbN8LSPfHrE4DLXbRY4M+HZDRiPLTNAXt-hLLOMFhCi1LAdXxTS1h1QqxTwKr27cDLqVmlH5iSyDIh1ysVHzGZESpSXyKiDhSha9ILysW3H4baPSjpykpK+QySq-Heur5Epa-5GXrbdpyPFBxzBGxdTrELnThPbhpwLV1QUQsRqqz-8sGvtOdTO1c8djGzXnJA5TOJz2sHOQOEKPPHH8hj8TWh99drVxVnOfdQwS7P2sv84I9BrCjhpGpHdYGLwFMbungGCbws0Sgx\ +uj9pupK4hoT1BZNFzfDfqG4xDTrNY4M+HxypGIPyBpX+NrrXhZhTl1h+mvnb7PtFiaSlmhnyv59LrQ5WP7SRgzwj2iZyoFyRi2bJmUGYZwBBv0c-tfteJjnqLEyC51wtSGh9hsWisIeHw6uXvfrqCgRGNAduH6HleT54CSGqm5f3Liz+JMvrabR+QtOqvLehOv9QjJiaRc-57XFZvtqxB99VfmvrFo9vZ5omFKlz9yCdaBzO-ZJ1tBglDjCdh5ZtvvBjnVMJGbpxaswUxeWuJgSpIvKto0XjheJoreIvvcjdtaKAXCraPdOwphSLaRpGMITA6APVa+bpzSPIYj-RzvqrqqXAs1LtIUv5O+WVnmmNLoHKL3nzZXhHklPIwRSOzjayjMmovGp3LhHJO4nDIPcz3BFqXRdg0zSZK8Gjmn0lbbp5bKHhmaWrCCZg4TzMxBv-EhX93DPPvSf+yKHY+KdailTPdQTSyKHmvE1yOE0Qc9OPh-ZvIxZsOsGGaC8LHMlhAO+cBiRtmPPJxvsTLeJOVyF2jYDfn99PLqhvuRXKAhaFPkaRvPOyPB43YpwpPPlRaQqmRANFHttpStvOUr6y-xtX6TlYyGxfvLL0LJhJzCHhjtpTByi7a2vvWY+yCamXCbPlmtrAloNHaXODOeZiUeZjQn19bAev2ZshGKLQr0pBBLxfmv9Ze7HsSR5Fn4jTberdIRxSFCxqnh0jfV7rxPMXYpQX3giihhyUaePGvp-bJrjS4efjLqpr15qt8PSQDfyM+s+GmXDZ8PsCemWdlXchlee36hbd3aZKpO9ax9ox7PMRwzxlLpieioOCCehexSwlRxiz5MvxQCYxkk3LSwNOTehoi80LLRRNkGYnxkvN7fLGDXPUyvxfeuMh2xStSefBAjCxhjaqqbbTz8T-+0QhefMrnTnSmtN7hQXgwEnnn2JkfUVySTzqNSz+rnwjgynJWm0H7tVGuaACy9rKhUewpwzYeOvjLn8L\ +SPeqM8NvFOzKH59BRHPOYGKLQb4j3tCrMhOeWqPutTP9yhEgZvMvlDNWhS3zxrZrwYpQWUuQZz++-kwfuxfljfnbAn2tcuauJsj3DxLCPOhgSSyTKpOyhiwv0YlSTxpQMwonSElghHm1wjhIN4afdnqqQ5isque9W4xwKrwhGctWhKn7SEdH4PpaDYVif9RHzHtNftY5qtHOzZOplpNQKNHhhqNgGbhU-e6Qh+7msPxSOyTrKmMGISfjIVpAYiCcJZm8kp+SdPix8izes8dSXGerFDbDXaTQyhQvb1JDoU8AwLRd5JK5qYFnquRv0ND-bdMlZvpCIBo1SxLh-vp2DnX5jnfIrRhjDYjrL+-U7CJRyKN4KlERFqXv2uPwdnQ6kz7tR4Nvpqui14unBLFbMkiBx4chrqOhdJyioiIWBLCt-QbsicpPdXfSvRMVsKmF7lxvp9rDL0fepHbHxuVDxjTJhSfjIq6oCPvSRaZFqQNIlzeibhUDwnhcSuipZZQye2VFnVDXXwfytNRu9yOuZhdz6i5uhhbbB8XxbO0ZFV3qatB+wztBpYecjmTdQGR-ulR-tvisQoznXMaeB4hn6SCDSfGNrvQcytH4LIbfnfnUIRRvXxhPzuwG1bxuJwxhFrUxzPhnv9QumvChBcwdIUpflpt9ij0lLydBoZfJayjXzTYm8T3mHOYmHpANdsjquXl9NKnNX9JLhRmuUUQzQSxHHyRDfyCyJvu4T2H0PYUMSxRvtLmfFp5O+Lp9SPObj4BqBudhHhI78WLgFnyNKae6hhdo4jKyuTRXLnSNBuioxZx7ftk8BiPBsyZR5jV5reINSihZFcX3ifbhzjReCvapQM4xRmcWnTzdF6hlt0dvE0zffPrbR949NABXPJ9PquNhr5bi4E9jdLhiCgmpK-bneijImIxVDbnlSqFNdfQ3GOMmZZH1bYSxLaLMJAN7hzamu19ANdwZjDX97YpdFXtBVjBtiNkF0XzfZNGi\ +X8SbIRU1uxerqWjjZjz3dhNvh9oRJ38nuZLATKdJz3fyuZzj4JSQvNXzD3d8Z9nHmjlctqa-PTGzCN3uSrhwxXfbP1Gvf9d9XrQ0GgZTJ4Qvy4Ie5aynqNoeTXhjcOzrz3stmz8yb8khjSuhx92c-k+bvhhf7eFGd2hbLhkgOTB3uxVnpPdSqUrHOvZzacBwIuwyvpiHhjcshDnwxwzr5F4T0p9VZrfzSGqKADBtrYq1NmuWLWPhVge9lZbSbF1gSRSZdByRjhOSfhz7Dre4zDPcbqGXep5S-LZTSUGglHmm2jsfaGo0yHYgrbeGFrPRvuYeGMhjIhjbzTbZ8yYjfry6B0OSEvgfPbfmTrWDDMuZR2quYNvBtdzvOh9rD3W356nh7GdxuPtjfwYqDMzuonHpqeUDziv0qjuoeZDP+LtvPRQSxTMs1lYJmTdOIk9mhqB4huBItgnQfuVTFhpx2rtuzoXknHXBDTLj8IMzHm6paTbaykxHsnApBLdyghO1neoZ4X2X9nTCUoxeXrohEDShGr8AbnM3KbhUDwuhdSwZvSNAQiyjPPDCYphnRLBiBIqDVLqLJ2DybOhigztloGKNKOXaLiDSirMVQpPSLV0Xvfjb4IyX4mwhhQgZm5XlTPhwnhWXLXrqnPFHfd6CJZfntbyUF+x2CE+sQqpzv8HH5LhuD0ZBh7VTkscd7guJvfqvuxhbcvOJLborTLfjrgISxtN+LNsiNA+oxuYNjJzbn7JKmhZuDi5HLa8i+ZXrdkzZQevSShXBFqUBCLxvWqCuIxToXhEifhpqlZZ1uNxbYjhvyCyjSl9BN7vZ8AyewFRrpqbykI1XvfgjMqzDId2LoDJLKMzaawQVC2rrx5fhWPheHlOp5E+yIBixrdsnjdEfFjLbMUH7TDql0pLfvOJL3swTnvY6nLkRSxE5heMkymwJvp9qrr2m71XneoWoXxLON7CAxuh8rwqfWfazIDqxHztWM+k+zjayzh94\ +ymIPTHdZBep6KifjhqqPp5TLhlmyGFpNjcqxymt-vbYAgRcA6TPXLngITRhH84OwJ7dPUar8LaPyeOx9XqDyd2rDqnIlvorhFo+lUrVdhSe-auNt3SjBoz1hjfpqvCLnKrD9N2zvHNFoyHdGAlxspADRcqf0RCVFhzhShRvSoRWbrVMejmyphK-av5jIXPztlLMLO1U-D9zO9nPgXiOTKjTPhgxPPNniROhom8Jt4DjxuOLevhQ9aDDSep7sxHLx7plx0XPXOEqZNwbiFrVKh7SnPpQMXuYHTzdS7APES+ELYlhxybm9CcnhsngoZATLfjuqnlPZzhgyzZIrarT9h6aEvRAq1ZLXzrMcqtmM8EHh7jTtcXCratJgdjoazSd8INwyxSPzVRcyo6I+s-mprQz0P5IuJTjP7ypmfv8AhvxiZ1Xxsb1fqaiWSjXo52PERcBOXPWNAHP7Wt567AZtY3bphjvpDdiRFBrqvhx8VjfmHiVazy-wcvhFo+ljqSr8+OHuSKFFgrQHipxip4Zj5OiyrP9tTGhnzGhkltHelTR7oSPZPl5jLtRRBd9z9pumNqNBUobGHiNxYhCPYxL4OxooJyGi2hhh-s0DpDOlt5vdxCp7AzQiRyhsJtfASoazvMLx7WJrfNb9PIQaR1pAKHHTuvwWhLSvS7nCkeHTttNwavZ9P+S-XTLjScrHA9KDuxav5LaRLfnZP7WYnfKyDgh0ZhappCTRMgZr0HYLfyDRWad7yzOITuBDOcPtxCrDrbBjKLUaU+s2SLRvBZ9wmKhYHB8pSIGxCp0Zea8SirDoyQGLt0zIdA5rgES1RCQaoPRS3pA5jj+cmtvRKBrhqIcYcz1MlxOLTtisGqo5U6zKxetPtZOWTJCLffHrudOtediYBx4TrqHTrduThNFat5IZDXvdyLbjIJRNumu8DDSexJAYm0HjJGRWLmiBTGxmZhUD+NzfqbiFyh2mtrePrfquanuRKJievpxa0bea\ +vIXISxxidSAxSVXjSSxGKoeFzoe4zzCb5rhwnNpOXj+9urh8LkUn59LPdbKhwxtExAX7OPcujPnL3ERsMHAiSvLGzCQLvH9h7QdsgNiAr5A45bLHhyh7q7yFiDj7Ku9IRc-TIhvx-hIkmnqpvj7qOivPewPShuRjftUudhwg6RqRN4LbINRzy+MzupY9IGnPXzAAGRnxHqx3Y+5tjPSxZiGyLhh4KdmX7GPqxiaJ94dO7i517JAuzOi7kkTGXSTMyuRAiMR2TjYswxujDuclBrhDpPPeSc+xCqlt5thaN0ePtT7ABIh6quYWYNxvXHeRuyrxnneliIiTGwyZJ59huIpFzvS7itxDIrwdVMOe1j+vmriwEPJov5hJjolnwt-LKGPequwZmroC3DLWhINT7ABvxsjreNWCGrbmoqRELfP2PFLrQyVuwGTcXPCeIR+-eiuzhPuaYJthrhZ+YNyBgjvNSAcbs93dWilfLidL8nHQatr8p5zJNgueqYRukjDndlRlnnHZI5hc9NryzOGExtnmyHe9HnhBp5kxvFqupfFijRIzGd8DlSOiIxrB4uNXYRRHN6Sh9swz853rs925+4fvE43sx9q1M-YNDW+OxR0XLhrdISgSdwG25bIfcSzToVdsheOXzUgFRQrWeCU+w9GxNnSusNP8bIKcjdIgjBdWmSwVtp2ICXAdghvhBhTPihDScpHRpvp9TLPScT8x5zr8NCGES+ZqivpBVRhYlfp5JEa54zF-9uuiBQF98uhOhGB9xrduYhPiXGzY9UPJjITJBiduU1kePvRRSlqqp5NVJpbHYoecxpzt19Ghuv6Ajo2ddn7qDSdHQQIz3ol05KPvOHNpGXc+jBc2laJ54hpHMH4GiwWKOEYnhPUjGE5Kjnuxxyw0ajgjdRhjFYRfyVl7rztdBbN6C+3xQqujqshkm9Ll+yqGOhxjvAcmubGeJbleSdvsfuN1neFqfvXovQdJ25U0yjvOdFRxYmNY\ +-JxSrnpBDMhXISxqaAqcPpjcazTsrOLQHPXM79otmPiIh6-s4hfiodBGNaEbGlruNPFTTjYh7olv5jLeY33xyq4Dyb5ttITIRVdp+DXOwfthQK9hCAtRmX7jIRySBDC-FxrMhp8J5TRhSO9kzb9XvHKneZ5E+y+imXBmU4aSt9lSxeiBGNZ5nd4fEdIQSxN6YhgmFbHdXuwX3BuECxxzOD2bSduU1ktzfqi9MDgxmft5uPlOGeq5zuZdTQ1HrehZyJJ8yB4sWs+kCSYWNk74IqbHbdJVz8r0oSBxuX9GR9elXZMqvxPsit9hNp4h5E0yIqqTlxYmoeNibnNDMszuRgmaHi6i+A1LxypxhomS1opTTmzmtXYtoL2jhuN35zKZh7r2L+C0DpDPrgXn6Zea1eyLnaqjRllvpLixBsWs+k-SKxq01OgwhhIlybXfpAg1t8iYVxSTJrzwi7itygvFi7ik1k2qhvLr7LUHDdwqA-rq7GLkuqhjVxCrDoCBbJ8CU1wj9txo93bvLpvG1TH3eOyj3fJDp0WGRk3+5WtPvwgjKmNhj0Zv7b2L+C-PZzRsUuf7QVS8SZWfinwdGBk3+DV4hPpov9JFbvwmQTSPqxFdhp+5Ub9JRSBGDpySBl3o+UCxFriAGBtCs0k-kihfyvFBrjweaHYY5+4fvcDLxhE8IZQFQ+s7jIRV7r+E0yTrYbQFQ+s-TKxXyLiDhrPCeIR+0UhdiKy4a4k4RehyoPW9U1+5mjjbua87Cs0+5nbqXuyGTfxOniBCU1+i2gbQFQ+s-lxysR9x9xBhr+I+U6DZbQFR++-eyxydvNFo+60TIhgr2bQ-+Dt8SGRl3k0+qYvW9U++hPpLhqmbd++1TdvNj7Cs0+5nvwYvW9U++hLoXQFQ+s-TLRYcu+A0z8iwYvU6+IBg5hhNqG1U-kahdCcks+Q6vOHYY5+DXCtNr2LE0+rpnPORE-+AtIqmbd+++zevmHhi+g+w2heCmIR+\ +C+ohNp45E1UH9KRYUs+QC9K5E++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++1b7PpvRtTjxsTw0v+E-k7VvZzLexrSyw3E++tybSZsLK5E1UhKrHOiVdLRQLosT7lei5HtN8yq3vhSXJTuHoH++1yS8Sx9A3LvjRKYBwTvrLvhzI2eziZPtCDwzDFn6To6u1oH++1yO4rTGqveeyLbpAYz5fnLRhSrhyyxLhyThbmjqiXsSvpzNh0lXbkY++5yMqd+zWf1dpMKEcduqxzPtclPzzEZNoWbT3HsHh++1yEijyu8VHdrqzmysuphifxW7exGq7Bbh7ZwyQeCc++DychhRCCzTSeEuLh4ZspxjGQwDZNHhxzE3GrX9k8e3oxPnU+kBwVRxev8dsQAj9fuMjj5LVJoRyYhyqJjwdK9FjsU2Ax2P+Q+y8ihSp93IqhB-EM+C2Rh3qsNN-A+UBDUlss+++++h++++++++++++++++++++++++++++++++++++++++++++++++++++s4Tlzk3EhGk209E+I++6+0+0bNJxLOYJhHmxB++1aQEg+0U+++++++++++0++h62+++++UR4pkOKpb9a7hQ3-9-EM++++++E+-+1U+++-LHE++++++*'), false, false) + Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 0) + $end 'Graphics' + $end 'HFSSDesign5' + $begin 'nexx_vsin' + ModTime=1074872269 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('negative', 0, -0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'negative', true) + $end 'PinDef' + $begin 'PinDef' + Pin('positive', 0, 0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'positive', true) + $end 'PinDef' + $begin 'Graphics' + Circle(0, 0, 0, 0, 0, 0.00254, 0) + Line(0, 1, 12566272, 0, -0.00508, 0, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0, 0.00508, 0, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Arc(0, 1, 12566272, -0.000762, -0.000254, 0.000824374, 0.334541, 2.79742, 12566272, 0, 0, false, 0.000824374, 0) + Arc(0, 1, 12566272, 0.000762, 0.000254, 0.000803219, 3.46334, 5.96143, 12566272, 0, 0, false, 0.000803219, 0) + Line(0.0001016, 1, 12566272, 0, 0.002032, 0, 0.001524, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0.0001016, 1, 12566272, -0.000254, 0.001778, 0.000254, 0.001778, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0.0001016, 1, 12566272, -0.000254, -0.001778, 0.000254, -0.001778, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $begin 'PropDisplayMap' + InstanceName(2, 2, 0, Text(0.00430389, -0.000440972, 0, 1, 5, false, 'Arial', 0, '***', false, false, ExtentRect(0, 0, 0, 0, 0.00527867070175829, 0.000440972444447972, 0.00194956140351657, 0.00176388888889594, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'nexx_vsin' + $begin 'psh' + ModTime=1033676651 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00508, 0, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', 0.00508, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'Graphics' + Rect(0, 0, 12566272, 0, 0, 0, 0.00508, 0.00508, 12566272, 0, 0) + Circle(0, 0, 12566272, 0, 0, 0.000762, 12566272) + Line(0, 1, 12566272, 0.000508, 0.001524, -0.000508, -0.001524, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00508, 0, -0.00254, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00254, 0, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $begin 'PropDisplayMap' + P(3, 5, 0, Text(-0.000762336, -0.00532063, 0, 5, 5, false, 'Arial', 0, 'P=***', false, false, ExtentRect(0, 0, 0, 0, -0.000762336, -0.00443869, 0.00372377, 0.00176389, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'psh' + $begin 'pwcmb2' + ModTime=1016034157 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00762, 0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', -0.00762, -0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n3', 0.00762, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n3', true) + $end 'PinDef' + $begin 'Graphics' + Rect(0, 0, 12566272, 0, 4.33681e-19, 4.33681e-19, 0.01016, 0.01016, 12566272, 0, 0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, -0.00508, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, -0.00508, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00254, -0.00508, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00254, -0.00508, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, 0.00762, 4.33681e-19, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $end 'pwcmb2' + $begin 'pwcmb8' + ModTime=1016732689 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00762, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', -0.00762, 0.00762, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n3', -0.00762, 0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n3', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n4', -0.00762, 0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n4', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n5', -0.00762, -0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n5', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n6', -0.00762, -0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n6', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n7', -0.00762, -0.00762, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n7', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n8', -0.00762, -0.01016, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n8', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n9', 0.00762, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n9', true) + $end 'PinDef' + $begin 'Graphics' + Line(0, 1, 12566272, -0.00508, 0.01016, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.01016, -0.00508, 0.01016, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00762, -0.00508, 0.00762, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00508, -0.00508, 0.00508, 0.00508, 0, 0.00762, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00254, -0.00508, 0.00254, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00508, -0.00508, -0.00508, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00254, -0.00508, -0.00254, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00762, -0.00508, -0.00762, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.01016, -0.00508, -0.01016, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Rect(0, 0, 12566272, 0, 0, 4.55666e-05, 0.0100261, 0.0254071, 12566272, 0, 0) + $end 'Graphics' + $end 'pwcmb8' + $end 'Symbols' + $begin 'Models' + $begin '00_Array2' + Name='00_Array2' + ModTime=1698741880 + Library='' + LibLocation='Project' + ModelType='hfss' + Description='' + ImageFile='D:/Array_Lunch&Learn/Finite_Array_w_Radome.aedtresults/5262493081646775493386.gif' + SymbolPinConfiguration=0 + $begin 'PortInfoBlk' + $end 'PortInfoBlk' + $begin 'PortOrderBlk' + $end 'PortOrderBlk' + DesignName='00_Array1' + SolutionName='Setup1 : Sweep' + NewToOldMap() + OldToNewMap() + PinNames('Array[3,3]02_Patch1_1', 'Array[3,4]02_Patch1_1', 'Array[3,5]02_Patch1_1', 'Array[3,6]02_Patch1_1', 'Array[4,3]02_Patch1_1', 'Array[4,4]02_Patch1_1', 'Array[4,5]02_Patch1_1', 'Array[4,6]02_Patch1_1', 'Array[5,3]02_Patch1_1', 'Array[5,4]02_Patch1_1', 'Array[5,5]02_Patch1_1', 'Array[5,6]02_Patch1_1', 'Array[6,3]02_Patch1_1', 'Array[6,4]02_Patch1_1', 'Array[6,5]02_Patch1_1', 'Array[6,6]02_Patch1_1') + $begin 'DesignerCustomization' + DCOption=0 + InterpOption=0 + ExtrapOption=1 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=1 + $end 'DesignerCustomization' + $begin 'NexximCustomization' + DCOption=3 + InterpOption=1 + ExtrapOption=3 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=2 + $end 'NexximCustomization' + $begin 'HSpiceCustomization' + DCOption=1 + InterpOption=2 + ExtrapOption=3 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=3 + $end 'HSpiceCustomization' + NoiseModelOption='External' + WB_SystemID='00_Array1' + IsWBModel=false + filename='' + numberofports=16 + Simulate=false + CloseProject=false + SaveProject=true + InterpY=true + InterpAlg='auto' + IgnoreDepVars=false + Renormalize=false + RenormImpedance=50 + $end '00_Array2' + $end 'Models' + $begin 'Bondwires' + $begin 'J4_LH10' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH10' + $begin 'J4_LH11' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2794mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH11' + $begin 'J4_LH12' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3048mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH12' + $begin 'J4_LH13' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3302mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH13' + $begin 'J4_LH14' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3556mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH14' + $begin 'J4_LH15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH15' + $begin 'J4_LH3' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.0762mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH3' + $begin 'J4_LH4' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1016mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH4' + $begin 'J4_LH5' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH5' + $begin 'J4_LH6' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1524mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH6' + $begin 'J4_LH7' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1778mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH7' + $begin 'J4_LH8' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2032mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH8' + $begin 'J4_LH9' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2286mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH9' + $begin 'J5_LH10_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH10_ALPH45_BETA15' + $begin 'J5_LH15_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH15_ALPH45_BETA15' + $begin 'J5_LH5_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH5_ALPH45_BETA15' + $begin 'J4_LH10' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH10' + $begin 'J4_LH11' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2794mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH11' + $begin 'J4_LH12' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3048mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH12' + $begin 'J4_LH13' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3302mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH13' + $begin 'J4_LH14' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3556mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH14' + $begin 'J4_LH15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH15' + $begin 'J4_LH3' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.0762mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH3' + $begin 'J4_LH4' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1016mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH4' + $begin 'J4_LH5' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH5' + $begin 'J4_LH6' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1524mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH6' + $begin 'J4_LH7' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1778mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH7' + $begin 'J4_LH8' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2032mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH8' + $begin 'J4_LH9' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2286mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH9' + $begin 'J5_LH10_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH10_ALPH45_BETA15' + $begin 'J5_LH15_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH15_ALPH45_BETA15' + $begin 'J5_LH5_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH5_ALPH45_BETA15' + $end 'Bondwires' + $begin 'DefInfo' + Array(1002, 0, 0, 0, '', 1646764268, '', 'Array', '', '', '', '', '', 'Design.bmp', '', 'Project', '', '', 1646764268, '', 0, 0) + NXPSH(1002, 0, 0, 2, 'Ansoft built-in component', 1502913463, '', 'Nexxim Circuit Elements\\Nexxim_symbols:psh', '', '', 'Phase Shifter, Nexxim', 'NXPSH.htm', 'nexximcomponents.chm', 'psh.bmp', 'Nexxim Circuit Elements\\lumped_general', 'SysLibrary', 'psessions', '', 1218547184, '', 0, 99999) + HFSSDesign5(1002, 0, 8, 16, '', 1631310487, '', 'HFSSDesign5', '', '', '', '', '', 'hfss.bmp', '', 'Project', '', '', 1631310487, '', 0, 0) + PWCMB8_NX(1002, 0, 0, 9, 'Ansoft built-in component', 1145626606, '', 'Nexxim Circuit Elements\\Nexxim_symbols:pwcmb8', '', '', 'Power Combiner/Divider, 08-Way', 'NXPWCMB8.htm', 'nexximcomponents.chm', 'pwcmb8.bmp', 'Nexxim Circuit Elements\\Ideal Microwave', 'SysLibrary', '', '', 1145624854, '', 0, 99013) + P_SIN(1002, 0, 0, 2, 'Ansoft built-in component', 1502395610, '', 'Nexxim Circuit Elements\\Nexxim_symbols:nexx_vsin', '', '', 'Sinusoidal Power Source', 'NXPSIN.htm', 'nexximcomponents.chm', 'vdc.bmp', 'Nexxim Circuit Elements\\Independent Sources', 'SysLibrary', '', '', 1476372458, '', 0, 199024) + PWCMB2_NX(1002, 0, 0, 3, 'Ansoft built-in component', 1137175794, '', 'Nexxim Circuit Elements\\Nexxim_symbols:pwcmb2', '', '', 'Power Combiner/Divider, 02-Way', 'NXPWCMB2.htm', 'nexximcomponents.chm', 'pwcmb2.bmp', 'Nexxim Circuit Elements\\Ideal Microwave', 'SysLibrary', '', '', 1137175208, '', 0, 99013) + '00_Array2'(1002, 0, 8, 16, '', 1646775495, '', '00_Array2', '', '', '', '', '', 'hfss.bmp', '', 'Project', '', '', 1646775495, '', 0, 0) + $end 'DefInfo' + $begin 'Compdefs' + $begin 'Array' + Library='' + CircuitEnv=0 + Refbase='U' + NumParts=1 + ModSinceLib=true + $begin 'Properties' + TextProp('Representation', 'SRD', '', 'Array') + TextProp('Owner', 'SRD', '', 'HFSS') + $end 'Properties' + CompExtID=6 + $begin 'Parameters' + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data() + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'Array' + $begin 'NXPSH' + Library='Nexxim Circuit Elements\\lumped_general' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 4, 1, '', 'Electrical', '') + Terminal('n2', 'n2', 'A', false, 5, 1, '', 'Electrical', '') + CompExtID=1 + $begin 'Parameters' + VariablePropNU('P', 'D', 'Phase shift', '0deg', 'deg', AdditionalPropInfo='') + VariablePropNU('R0', 'D', 'Characteristic impedance', '50ohm', 'ohm', AdditionalPropInfo='') + TextProp('ModelName', 'SHD', '', 'PSH') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data(Circuit='PSH:@ID %0 %1 ?P(P=@P) *R0(R0=@R0)', 'Nexxim Circuit'='A@ID %0 %1 P=@P R0=@R0 COMPONENT=phase_shifter', System='PSH:@ID %0 %1 ?P(P=@P) *R0(R0=@R0)') + GRef(Circuit='', 'Nexxim Circuit'='', System='') + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'NXPSH' + $begin 'HFSSDesign5' + Library='' + CircuitEnv=0 + Refbase='S' + NumParts=1 + ModSinceLib=true + Terminal('A[3,3]02_Patch1_1:1', 'A[3,3]02_Patch1_1:1', 'A', false, 0, 1, '', 'Electrical', '0') + Terminal('A[3,4]02_Patch1_1:1', 'A[3,4]02_Patch1_1:1', 'A', false, 1, 1, '', 'Electrical', '0') + Terminal('A[3,5]02_Patch1_1:1', 'A[3,5]02_Patch1_1:1', 'A', false, 2, 1, '', 'Electrical', '0') + Terminal('A[3,6]02_Patch1_1:1', 'A[3,6]02_Patch1_1:1', 'A', false, 3, 1, '', 'Electrical', '0') + Terminal('A[4,3]02_Patch1_1:1', 'A[4,3]02_Patch1_1:1', 'A', false, 4, 1, '', 'Electrical', '0') + Terminal('A[4,4]02_Patch1_1:1', 'A[4,4]02_Patch1_1:1', 'A', false, 5, 1, '', 'Electrical', '0') + Terminal('A[4,5]02_Patch1_1:1', 'A[4,5]02_Patch1_1:1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('A[4,6]02_Patch1_1:1', 'A[4,6]02_Patch1_1:1', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('A[5,3]02_Patch1_1:1', 'A[5,3]02_Patch1_1:1', 'A', false, 8, 1, '', 'Electrical', '0') + Terminal('A[5,4]02_Patch1_1:1', 'A[5,4]02_Patch1_1:1', 'A', false, 9, 1, '', 'Electrical', '0') + Terminal('A[5,5]02_Patch1_1:1', 'A[5,5]02_Patch1_1:1', 'A', false, 10, 1, '', 'Electrical', '0') + Terminal('A[5,6]02_Patch1_1:1', 'A[5,6]02_Patch1_1:1', 'A', false, 11, 1, '', 'Electrical', '0') + Terminal('A[6,3]02_Patch1_1:1', 'A[6,3]02_Patch1_1:1', 'A', false, 12, 1, '', 'Electrical', '0') + Terminal('A[6,4]02_Patch1_1:1', 'A[6,4]02_Patch1_1:1', 'A', false, 13, 1, '', 'Electrical', '0') + Terminal('A[6,5]02_Patch1_1:1', 'A[6,5]02_Patch1_1:1', 'A', false, 14, 1, '', 'Electrical', '0') + Terminal('A[6,6]02_Patch1_1:1', 'A[6,6]02_Patch1_1:1', 'A', false, 15, 1, '', 'Electrical', '0') + $begin 'Properties' + TextProp('Owner', 'RD', '', 'HFSS') + $end 'Properties' + CompExtID=5 + $begin 'Parameters' + VariableProp('subX', 'D', '', '8cm') + VariableProp('subY', 'D', '', '8cm') + TextProp('ModelName', 'SRD', '', 'FieldSolver') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data() + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'HFSSDesign5' + $begin 'PWCMB8_NX' + Library='Nexxim Circuit Elements\\Ideal Microwave' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 99, 1, '', 'Electrical', '0') + Terminal('n2', 'n2', 'A', false, 100, 1, '', 'Electrical', '0') + Terminal('n3', 'n3', 'A', false, 101, 1, '', 'Electrical', '0') + Terminal('n4', 'n4', 'A', false, 102, 1, '', 'Electrical', '0') + Terminal('n5', 'n5', 'A', false, 103, 1, '', 'Electrical', '0') + Terminal('n6', 'n6', 'A', false, 104, 1, '', 'Electrical', '0') + Terminal('n7', 'n7', 'A', false, 105, 1, '', 'Electrical', '0') + Terminal('n8', 'n8', 'A', false, 106, 1, '', 'Electrical', '0') + Terminal('n9', 'n9', 'A', false, 107, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + VariableProp('IL', 'D', 'Insertion loss, dB', '9.0309') + VariableProp('RO', 'D', 'Reference impedance', '50') + ButtonProp('CircuitNetList', 'HD', '', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 1, ButtonPropClientData()) + ButtonProp('SystemNetList', 'HD', '', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 1, ButtonPropClientData()) + TextProp('ModelName', 'SHD', '', 'PWCMBN') + TextProp('COMPONENT', 'RD', '', 'power_combiner_n') + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='A@ID %0 %1 %2 %3 %4 %5 %6 %7 %8 ?IL(IL=@IL) *RO(RO=@RO) COMPONENT=@COMPONENT') + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'PWCMB8_NX' + $begin 'P_SIN' + Library='Nexxim Circuit Elements\\Independent Sources' + CircuitEnv=0 + Refbase='P' + NumParts=1 + ModSinceLib=false + Terminal('positive', 'positive', 'A', false, 0, 1, '', 'Electrical', '0') + Terminal('negative', 'negative', 'A', false, 1, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + TextProp('LabelID', 'HD', 'Property string for netlist ID', 'V@ID') + VariableProp('ACMAG', 'D', 'AC magnitude for small-signal analysis (Volts)', 'nan V') + VariablePropNU('ACPHASE', 'D', 'AC phase for small-signal analysis', '0deg', 'deg', AdditionalPropInfo='') + VariableProp('DC', 'D', 'DC voltage (Volts)', '0V') + VariablePropNU('VO', 'D', 'Power offset from zero watts', '0W', 'W', AdditionalPropInfo='') + VariableProp('POWER', 'D', 'Available power of the source above VO', '0W') + VariableProp('FREQ', 'D', 'Frequency (Hz)', '1GHz') + VariableProp('TD', 'D', 'Delay to start of sine wave (seconds)', '0s') + VariableProp('ALPHA', 'D', 'Damping factor (1/seconds)', '0') + VariablePropNU('THETA', 'D', 'Phase delay', '0deg', 'deg', AdditionalPropInfo='') + VariableProp('TONE', 'D', 'Frequency (Hz) to use for harmonic balance analysis, should be a submultiple of (or equal to) the driving frequency and should also be included in the HB analysis setup', '0Hz') + TextProp('ModelName', 'SHD', '', 'P_SIN') + ButtonProp('CosimDefinition', 'D', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='V@ID %0 %1 *DC(DC=@DC) POWER SIN(?VO(@VO) ?POWER(@POWER) ?FREQ(@FREQ) ?TD(@TD) ?ALPHA(@ALPHA) ?THETA(@THETA)) *TONE(TONE=@TONE) *ACMAG(AC @ACMAG @ACPHASE)') + GRef('Nexxim Circuit'='') + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'P_SIN' + $begin 'PWCMB2_NX' + Library='Nexxim Circuit Elements\\Ideal Microwave' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('n2', 'n2', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('n3', 'n3', 'A', false, 8, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + VariableProp('IL13', 'D', 'Insertion loss between port 1 and port 3, dB', '3.0104') + VariablePropNU('PH13', 'D', 'Phase shift between port 1 and port 3 (Degree)', '-90deg', 'deg', AdditionalPropInfo='') + VariableProp('IL23', 'D', 'Insertion loss between port 2 and port 3, dB', '3.0104') + VariablePropNU('PH23', 'D', 'Phase shift between port 2 and port 3, Degree', '-90deg', 'deg', AdditionalPropInfo='') + VariableProp('RO', 'D', 'Reference impedance', '50') + TextProp('ModelName', 'SHD', '', 'PWCMB2') + TextProp('COMPONENT', 'RD', '', 'power_combiner2') + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='A@ID %0 %1 %2 *IL13(IL13=@IL13) *PH13(PH13=@PH13) *IL23(IL23=@IL23) *PH23(PH23=@PH23) *RO(RO=@RO) COMPONENT=@COMPONENT') + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'PWCMB2_NX' + $begin '00_Array2' + Library='' + CircuitEnv=0 + Refbase='S' + NumParts=1 + ModSinceLib=true + Terminal('Array[3,3]02_Patch1_1', 'Array[3,3]02_Patch1_1', 'A', false, 3, 1, '', 'Electrical', '0') + Terminal('Array[3,4]02_Patch1_1', 'Array[3,4]02_Patch1_1', 'A', false, 4, 1, '', 'Electrical', '0') + Terminal('Array[3,5]02_Patch1_1', 'Array[3,5]02_Patch1_1', 'A', false, 5, 1, '', 'Electrical', '0') + Terminal('Array[3,6]02_Patch1_1', 'Array[3,6]02_Patch1_1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('Array[4,3]02_Patch1_1', 'Array[4,3]02_Patch1_1', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('Array[4,4]02_Patch1_1', 'Array[4,4]02_Patch1_1', 'A', false, 8, 1, '', 'Electrical', '0') + Terminal('Array[4,5]02_Patch1_1', 'Array[4,5]02_Patch1_1', 'A', false, 9, 1, '', 'Electrical', '0') + Terminal('Array[4,6]02_Patch1_1', 'Array[4,6]02_Patch1_1', 'A', false, 10, 1, '', 'Electrical', '0') + Terminal('Array[5,3]02_Patch1_1', 'Array[5,3]02_Patch1_1', 'A', false, 11, 1, '', 'Electrical', '0') + Terminal('Array[5,4]02_Patch1_1', 'Array[5,4]02_Patch1_1', 'A', false, 12, 1, '', 'Electrical', '0') + Terminal('Array[5,5]02_Patch1_1', 'Array[5,5]02_Patch1_1', 'A', false, 13, 1, '', 'Electrical', '0') + Terminal('Array[5,6]02_Patch1_1', 'Array[5,6]02_Patch1_1', 'A', false, 14, 1, '', 'Electrical', '0') + Terminal('Array[6,3]02_Patch1_1', 'Array[6,3]02_Patch1_1', 'A', false, 15, 1, '', 'Electrical', '0') + Terminal('Array[6,4]02_Patch1_1', 'Array[6,4]02_Patch1_1', 'A', false, 16, 1, '', 'Electrical', '0') + Terminal('Array[6,5]02_Patch1_1', 'Array[6,5]02_Patch1_1', 'A', false, 17, 1, '', 'Electrical', '0') + Terminal('Array[6,6]02_Patch1_1', 'Array[6,6]02_Patch1_1', 'A', false, 18, 1, '', 'Electrical', '0') + $begin 'Properties' + TextProp('Owner', 'RD', '', 'HFSS') + $end 'Properties' + CompExtID=5 + $begin 'Parameters' + VariableProp('subX', 'D', '', '8cm') + VariableProp('subY', 'D', '', '8cm') + TextProp('ModelName', 'SRD', '', 'FieldSolver') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'Default', 0) + $end 'Parameters' + ModelDefName='00_Array2' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=103 + CosimDefName='Default' + IsDefinition=true + Connect=true + ModelDefinitionName='00_Array2' + ShowRefPin2=2 + LenPropName='' + $end 'CosimDefinition' + DefaultCosim='Default' + $end 'CosimDefinitions' + $end '00_Array2' + $end 'Compdefs' + $end 'Definitions' + DesignIDServer=23 + MoveBackwards=false + $begin 'HFSSModel' + RepRewriteV2=true + Name='Array' + DesignID=0 + 'Use Advanced DC Extrapolation'=false + 'Use Power S'=false + 'Export FRTM After Simulation'=false + 'Export Rays After Simulation'=false + 'Export After Simulation'=false + 'Allow Material Override'=false + 'Calculate Lossy Dielectrics'=false + 'Perform Minimal validation'=false + $begin 'TemperatureSettings' + IncludeTemperatureDependence=false + Temperatures(610, '22cel', 637, '22cel', 647, '22cel', 673, '22cel', 683, '22cel', 710, '22cel', 747, '22cel', 774, '22cel', 784, '22cel', 794, '22cel', 821, '22cel', 858, '22cel', 885, '22cel', 895, '22cel', 922, '22cel', 949, '22cel', 992, '22cel', 1019, '22cel', 1029, '22cel', 1056, '22cel', 1107, '22cel') + $end 'TemperatureSettings' + 'Port Validation Settings'='Standard' + 'Save Adaptive support files'=false + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + MaterialDensity=1 + MassOfTissue=1 + VoxelSize=1 + TissueObjectList=-1 + AverageSarMethod=0 + UseAutoDCThickness=true + HaveZwaveSupport=true + $begin 'OutputVariable' + NextUniqueID=0 + MoveBackwards=false + $end 'OutputVariable' + $begin 'ModelSetup' + $begin 'DesignDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='DesignDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'DesignDatasets' + $begin 'Properties' + VariableProp('subX', 'UD', '', '8cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'Properties' + $begin 'PostProcessingVariables' + PostProcessingVariableProp('ScanFrequency', 'UD', '', '1800000000Hz') + PostProcessingVariableProp('ScanAngleTheta', 'UD', '', '0deg') + PostProcessingVariableProp('ScanAnglePhi', 'UD', '', '0deg') + PostProcessingVariableProp('ScanPhaseShiftA', 'UD', '', '-((ScanFrequency*0.0*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*1.67667601756e-09*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanPhaseShiftB', 'UD', '', '-((ScanFrequency*1.67667601756e-09*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*0.0*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanMag1', 'UD', '', '1W') + PostProcessingVariableProp('ScanPhase1', 'UD', '', '0deg') + PostProcessingVariableProp('CosinePower', 'UD', '', '3') + PostProcessingVariableProp('EdgeTaperLevel_dB', 'UD', '', '-20') + $end 'PostProcessingVariables' + VariableOrders[11: 'subX', 'subY', 'ScanFrequency', 'ScanAngleTheta', 'ScanAnglePhi', 'ScanPhaseShiftA', 'ScanPhaseShiftB', 'ScanMag1', 'ScanPhase1', 'CosinePower', 'EdgeTaperLevel_dB'] + $begin 'Editor3D Doc Preferences' + 'Plane Background'=true + BackgroundColor1=16777215 + BackgroundColor2=0 + 'Need Lights'=true + 'Ambient Light'=9671571 + 'Num Lights'=4 + Light0[4: 6710886, 0, -1, -0.150000005960464] + Light1[4: 6710886, -0.600000023841858, 0.100000001490116, -0.5] + Light2[4: 6710886, 0.5, 0.100000001490116, -0.5] + Light3[4: 6710886, 0.200000002980232, 0.400000005960464, 1] + Ver=2 + $end 'Editor3D Doc Preferences' + SnapMode=31 + WorkingCS=1 + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=21 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=1244 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=143 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-subX' + OriginY='-subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Metal1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=144 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=258 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-subX' + OriginY='-2*subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Side' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=259 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=396 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-2*subX' + OriginY='-2*subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Corner' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=397 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=600 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=599 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1159 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=600 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=607 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=738 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS2' + UDMId=737 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1229 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=738 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=744 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=849 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS3' + UDMId=848 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1236 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=849 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=855 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=983 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS4' + UDMId=982 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1243 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=983 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=989 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'SubModelDefinitions' + $begin 'SubModelDefinition' + SubmodelDefinitionID=599 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 599] + SubmodelDefinitionName='02_Patch' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/02_Patch.a3dcomp' + IsLocal=false + ChecksumString='d5c6ab10d27dc0bd8bbb02e8dd2e2342' + ChecksumHistory('20fc5ac219fa743afd8ca925e6eb2079', '5a214f4574db96d93ace173fc9633c0d', 'ab2260df524ce23f2a26184bbe992b40', '1f86c0d94b7d8d980b578032d3716fb9', 'ac15e7f1edaac81bfe47615ad0e764c1', 'fdb0262a95719ca1f5242cd1435323c7', '7480689c0d4583954aa27bec8a82ea72', '67276bcb604613ff2d50669fd5840c08', 'afc6f7c927ea038b13e96a3641c31d5f', '16c4cdaef0e0228e14d11c5b3700e977') + VersionHistory('1.0', '2.0', '3.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='02_Patch599.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=737 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 737] + SubmodelDefinitionName='01_Metal_Only' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/01_Metal_Only.a3dcomp' + IsLocal=false + ChecksumString='fe90c3eebdb3a22fa943fe186e9d6590' + ChecksumHistory('2eae920cded86ea339b0c2b510c2e396', '56dc97eefced4fb878670bf07bf9c0d7', '6ad251b9b60c46a887f8abe7cc95a939', '4dbebe5edc26d02a76cbe6a0375bcc2c', '1ffabeb99e557c6294a61facb790fdc1') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='01_Metal_Only737.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=848 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 848] + SubmodelDefinitionName='03_Radome_Side' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/03_Radome_Side.a3dcomp' + IsLocal=false + ChecksumString='24f9541e0f1f67904551e94d3871e1eb' + ChecksumHistory('5d45f52a9e216e50d59e73534f9b66a5', 'bd94a6df1aa6242cafd3cf31ee7b96b6', 'cc9431f9f8a1abf4a5eba7246c4d6741', '6fede82269f5c82446e7314943f933e8', '0caa2c21ba3f444a6ee19a355fd8272a', '5ae6fe5bad977199e21f2acaa1cb71db', '12ba1933b3e5096927229ff9f3ef3af3', '8ed257867c34e79cd241f53177f868db') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='03_Radome_Side848.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=982 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 982] + SubmodelDefinitionName='Radome_Corner' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/03_Radome_Corner.a3dcomp' + IsLocal=false + ChecksumString='10baf2609693e33409d11202345ca665' + ChecksumHistory('48df8c28c8f90d7000ba95b58e4953ef', '9c31e8dcade8ebcf308ed8e923ed461a', 'b56f926f9c0284c44194e6b6d6a8fb4a', 'c91a15c1fe75b99ff252eea61ee6625b', '032466a2fbbe52d1f18400fbebb338eb', '565420525b544a6ef1e96fc53389da3f', '2b0acdb4ac6a1e6e1e0e62412b1a9453', 'bc45f9017b386ad363643011e17c6a68', 'b810ef987881004ea90f1548a1c23efd') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='03_Radome_Corner982.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $end 'SubModelDefinitions' + $begin 'Groups' + $end 'Groups' + $begin 'UserDefinedModels' + $begin 'UserDefinedModel' + ID=599 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('234'=605, '267'=606, '34'=602, '46'=603, '6'=601, '95'=604) + CSKeyVsOperIdMap('262'=600) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='02_Patch1' + GroupID=-1 + SubModelDefinitionID=599 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1152 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=599 + TranslateVectorX='-0.12' + TranslateVectorY='-0.12' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=599 + IsSuppressed=false + BaseOperIDs[6: 601, 602, 603, 604, 605, 606] + CachedBodyOperIDs[6: 1157, 1155, 1156, 1158, 1153, 1154] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 600] + CachedCSOperIDs[1: 1159] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/02_Patch.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetDistance' + Value='1.46cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedLength' + Value='1.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetGap' + Value='0.168cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedWidth' + Value='0.336cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=737 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('238'=741, '250'=742, '278'=743, '34'=740, '6'=739) + CSKeyVsOperIdMap('233'=738) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='01_Metal_Only1' + GroupID=-1 + SubModelDefinitionID=737 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1223 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=737 + TranslateVectorX='-0.2' + TranslateVectorY='-0.2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=737 + IsSuppressed=false + BaseOperIDs[5: 739, 740, 741, 742, 743] + CachedBodyOperIDs[5: 1228, 1227, 1224, 1225, 1226] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 738] + CachedCSOperIDs[1: 1229] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/01_Metal_Only.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=848 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('250'=852, '34'=851, '361'=853, '417'=854, '6'=850) + CSKeyVsOperIdMap('233'=849) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='03_Radome_Side1' + GroupID=-1 + SubModelDefinitionID=848 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1230 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=848 + TranslateVectorX='-0.2' + TranslateVectorY='-0.28' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=848 + IsSuppressed=false + BaseOperIDs[5: 850, 851, 852, 853, 854] + CachedBodyOperIDs[5: 1235, 1232, 1231, 1233, 1234] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 849] + CachedCSOperIDs[1: 1236] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/03_Radome_Side.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radius' + Value='0.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=982 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('250'=986, '34'=985, '361'=987, '417'=988, '6'=984) + CSKeyVsOperIdMap('233'=983) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='Radome_Corner1' + GroupID=-1 + SubModelDefinitionID=982 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1237 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=982 + TranslateVectorX='-0.28' + TranslateVectorY='-0.28' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=982 + IsSuppressed=false + BaseOperIDs[5: 984, 985, 986, 987, 988] + CachedBodyOperIDs[5: 1242, 1239, 1238, 1240, 1241] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 983] + CachedCSOperIDs[1: 1243] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/03_Radome_Corner.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radius' + Value='0.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=601 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=610 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=610 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=611, '11'=612, '12'=613, '7'=614, '8'=615, '9'=616) + EdgeKeyIDMap('13'=617, '14'=618, '15'=619, '16'=620, '17'=621, '18'=622, '19'=623, '20'=624, '21'=625, '22'=626, '23'=627, '24'=628) + VertexKeyIDMap('25'=629, '26'=630, '27'=631, '28'=632, '29'=633, '30'=634, '31'=635, '32'=636) + BodyKeyIDMap('6'=610) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1157 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=610 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=602 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=637 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=637 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=638) + EdgeKeyIDMap('35'=639, '36'=640, '37'=641, '38'=642) + VertexKeyIDMap('39'=643, '40'=644, '41'=645, '42'=646) + BodyKeyIDMap('34'=637) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1155 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=637 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=603 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=647 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=647 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('56'=648) + EdgeKeyIDMap('222'=649, '223'=650, '224'=651, '225'=652, '231'=653, '232'=654, '47'=655, '48'=656, '50'=657, '82'=658, '83'=659, '84'=660) + VertexKeyIDMap('227'=661, '228'=662, '229'=663, '230'=664, '51'=665, '52'=666, '53'=667, '54'=668, '85'=669, '86'=670, '87'=671, '88'=672) + BodyKeyIDMap('46'=647) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1156 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=647 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=604 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=673 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=673 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('105'=674) + EdgeKeyIDMap('96'=675, '97'=676, '98'=677, '99'=678) + VertexKeyIDMap('100'=679, '101'=680, '102'=681, '103'=682) + BodyKeyIDMap('95'=673) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1158 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=673 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=605 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=683 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=683 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('235'=684, '236'=685, '237'=686, '238'=687, '239'=688, '240'=689) + EdgeKeyIDMap('241'=690, '242'=691, '243'=692, '244'=693, '245'=694, '246'=695, '247'=696, '248'=697, '249'=698, '250'=699, '251'=700, '252'=701) + VertexKeyIDMap('253'=702, '254'=703, '255'=704, '256'=705, '257'=706, '258'=707, '259'=708, '260'=709) + BodyKeyIDMap('234'=683) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1153 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=683 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=606 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=710 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=710 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('268'=711, '269'=712, '270'=713, '271'=714, '272'=715, '273'=716) + EdgeKeyIDMap('274'=717, '275'=718, '276'=719, '277'=720, '278'=721, '279'=722, '280'=723, '281'=724, '282'=725, '283'=726, '284'=727, '285'=728) + VertexKeyIDMap('286'=729, '287'=730, '288'=731, '289'=732, '290'=733, '291'=734, '292'=735, '293'=736) + BodyKeyIDMap('267'=710) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1154 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=710 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_1' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=739 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=747 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=747 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=748, '11'=749, '12'=750, '7'=751, '8'=752, '9'=753) + EdgeKeyIDMap('13'=754, '14'=755, '15'=756, '16'=757, '17'=758, '18'=759, '19'=760, '20'=761, '21'=762, '22'=763, '23'=764, '24'=765) + VertexKeyIDMap('25'=766, '26'=767, '27'=768, '28'=769, '29'=770, '30'=771, '31'=772, '32'=773) + BodyKeyIDMap('6'=747) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1228 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=747 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_1' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=740 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=774 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=774 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=775) + EdgeKeyIDMap('35'=776, '36'=777, '37'=778, '38'=779) + VertexKeyIDMap('39'=780, '40'=781, '41'=782, '42'=783) + BodyKeyIDMap('34'=774) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1227 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=774 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna_1' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=741 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=784 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=784 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('248'=785) + EdgeKeyIDMap('239'=786, '240'=787, '241'=788, '242'=789) + VertexKeyIDMap('243'=790, '244'=791, '245'=792, '246'=793) + BodyKeyIDMap('238'=784) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1224 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=784 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=742 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=794 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=794 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=795, '252'=796, '253'=797, '254'=798, '255'=799, '256'=800) + EdgeKeyIDMap('257'=801, '258'=802, '259'=803, '260'=804, '261'=805, '262'=806, '263'=807, '264'=808, '265'=809, '266'=810, '267'=811, '268'=812) + VertexKeyIDMap('269'=813, '270'=814, '271'=815, '272'=816, '273'=817, '274'=818, '275'=819, '276'=820) + BodyKeyIDMap('250'=794) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1225 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=794 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_1' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=743 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=821 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=821 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('279'=822, '280'=823, '281'=824, '282'=825, '283'=826, '284'=827) + EdgeKeyIDMap('285'=828, '286'=829, '287'=830, '288'=831, '289'=832, '290'=833, '291'=834, '292'=835, '293'=836, '294'=837, '295'=838, '296'=839) + VertexKeyIDMap('297'=840, '298'=841, '299'=842, '300'=843, '301'=844, '302'=845, '303'=846, '304'=847) + BodyKeyIDMap('278'=821) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1226 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=821 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_2' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=850 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=858 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=858 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=859, '11'=860, '12'=861, '7'=862, '8'=863, '9'=864) + EdgeKeyIDMap('13'=865, '14'=866, '15'=867, '16'=868, '17'=869, '18'=870, '19'=871, '20'=872, '21'=873, '22'=874, '23'=875, '24'=876) + VertexKeyIDMap('25'=877, '26'=878, '27'=879, '28'=880, '29'=881, '30'=882, '31'=883, '32'=884) + BodyKeyIDMap('6'=858) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1235 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=858 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_2' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=851 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=885 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=885 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=886) + EdgeKeyIDMap('35'=887, '36'=888, '37'=889, '38'=890) + VertexKeyIDMap('39'=891, '40'=892, '41'=893, '42'=894) + BodyKeyIDMap('34'=885) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1232 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=885 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_2' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=852 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=895 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=895 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=896, '252'=897, '253'=898, '254'=899, '255'=900, '256'=901) + EdgeKeyIDMap('257'=902, '258'=903, '259'=904, '260'=905, '261'=906, '262'=907, '263'=908, '264'=909, '265'=910, '266'=911, '267'=912, '268'=913) + VertexKeyIDMap('269'=914, '270'=915, '271'=916, '272'=917, '273'=918, '274'=919, '275'=920, '276'=921) + BodyKeyIDMap('250'=895) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1231 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=895 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=853 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=922 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=922 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('362'=923, '363'=924, '364'=925, '365'=926, '366'=927, '367'=928) + EdgeKeyIDMap('368'=929, '369'=930, '370'=931, '371'=932, '372'=933, '373'=934, '374'=935, '375'=936, '376'=937, '377'=938, '378'=939, '379'=940) + VertexKeyIDMap('380'=941, '381'=942, '382'=943, '383'=944, '384'=945, '385'=946, '386'=947, '387'=948) + BodyKeyIDMap('361'=922) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1233 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=922 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=854 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=949 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=7 + NumWires=0 + NumLoops=7 + NumCoedges=30 + NumEdges=15 + NumVertices=10 + $end 'Topology' + BodyID=949 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('418'=950, '419'=951, '420'=952, '421'=953, '422'=954, '423'=955, '668'=956) + EdgeKeyIDMap('424'=957, '425'=958, '426'=959, '428'=960, '429'=961, '430'=962, '431'=963, '432'=964, '433'=965, '434'=966, '435'=967, '669'=968, '670'=969, '671'=970, '672'=971) + VertexKeyIDMap('437'=972, '438'=973, '440'=974, '441'=975, '442'=976, '443'=977, '673'=978, '674'=979, '675'=980, '676'=981) + BodyKeyIDMap('417'=949) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1234 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=949 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_3' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=984 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=992 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=992 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=993, '11'=994, '12'=995, '7'=996, '8'=997, '9'=998) + EdgeKeyIDMap('13'=999, '14'=1000, '15'=1001, '16'=1002, '17'=1003, '18'=1004, '19'=1005, '20'=1006, '21'=1007, '22'=1008, '23'=1009, '24'=1010) + VertexKeyIDMap('25'=1011, '26'=1012, '27'=1013, '28'=1014, '29'=1015, '30'=1016, '31'=1017, '32'=1018) + BodyKeyIDMap('6'=992) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1242 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=992 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_3' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=985 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1019 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=1019 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=1020) + EdgeKeyIDMap('35'=1021, '36'=1022, '37'=1023, '38'=1024) + VertexKeyIDMap('39'=1025, '40'=1026, '41'=1027, '42'=1028) + BodyKeyIDMap('34'=1019) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1239 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1019 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_3' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=986 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1029 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=1029 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=1030, '252'=1031, '253'=1032, '254'=1033, '255'=1034, '256'=1035) + EdgeKeyIDMap('257'=1036, '258'=1037, '259'=1038, '260'=1039, '261'=1040, '262'=1041, '263'=1042, '264'=1043, '265'=1044, '266'=1045, '267'=1046, '268'=1047) + VertexKeyIDMap('269'=1048, '270'=1049, '271'=1050, '272'=1051, '273'=1052, '274'=1053, '275'=1054, '276'=1055) + BodyKeyIDMap('250'=1029) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1238 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1029 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_3' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=987 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1056 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=1056 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('362'=1057, '363'=1058, '364'=1059, '365'=1060, '366'=1061, '367'=1062, '394'=1063, '395'=1064, '695'=1065, '705'=1066) + EdgeKeyIDMap('368'=1067, '369'=1068, '371'=1069, '372'=1070, '373'=1071, '374'=1072, '375'=1073, '377'=1074, '379'=1075, '396'=1076, '397'=1077, '398'=1078, '400'=1079, '403'=1080, '406'=1081, '407'=1082, '696'=1083, '697'=1084, '698'=1085, '699'=1086, '706'=1087, '707'=1088, '708'=1089, '709'=1090) + VertexKeyIDMap('380'=1091, '381'=1092, '384'=1093, '385'=1094, '409'=1095, '410'=1096, '412'=1097, '415'=1098, '700'=1099, '701'=1100, '702'=1101, '703'=1102, '710'=1103, '711'=1104, '712'=1105, '713'=1106) + BodyKeyIDMap('361'=1056) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1240 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1056 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4_1' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=988 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1107 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=42 + NumEdges=21 + NumVertices=13 + $end 'Topology' + BodyID=1107 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('418'=1108, '419'=1109, '420'=1110, '421'=1111, '422'=1112, '423'=1113, '715'=1114, '716'=1115, '731'=1116, '732'=1117) + EdgeKeyIDMap('424'=1118, '425'=1119, '428'=1120, '429'=1121, '430'=1122, '431'=1123, '433'=1124, '434'=1125, '435'=1126, '717'=1127, '718'=1128, '720'=1129, '721'=1130, '722'=1131, '723'=1132, '733'=1133, '734'=1134, '735'=1135, '736'=1136, '737'=1137, '738'=1138) + VertexKeyIDMap('437'=1139, '440'=1140, '441'=1141, '443'=1142, '724'=1143, '725'=1144, '727'=1145, '728'=1146, '729'=1147, '739'=1148, '740'=1149, '741'=1150, '742'=1151) + BodyKeyIDMap('417'=1107) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1241 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1107 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'CachedNames' + $begin '01_metal_only' + '01_metal_only'(-1, 1) + $end '01_metal_only' + $begin '02_patch' + '02_patch'(-1, 1) + $end '02_patch' + $begin '03_radome_side' + '03_radome_side'(-1, 1) + $end '03_radome_side' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'antenna_' + antenna_(1) + $end 'antenna_' + $begin 'box' + box(1, 2, 4) + $end 'box' + $begin 'box1_' + box1_(1, 2, 3) + $end 'box1_' + $begin 'box2_' + box2_(1, 2, 3) + $end 'box2_' + $begin 'box4_' + box4_(1) + $end 'box4_' + $begin 'corner' + corner(-1) + $end 'corner' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'ground_' + ground_(1, 2, 3) + $end 'ground_' + $begin 'metal' + metal(1) + $end 'metal' + $begin 'model' + model(-1) + $end 'model' + $begin 'port' + port(1) + $end 'port' + $begin 'radome_corner' + radome_corner(-1, 1) + $end 'radome_corner' + $begin 'relativecs' + relativecs(1, 2, 3, 4) + $end 'relativecs' + $begin 'side' + side(-1) + $end 'side' + $begin 'sub' + sub(-1) + $end 'sub' + $begin 'sub_' + sub_(1, 2, 3) + $end 'sub_' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=8 + DependencyObject('GeometryOperation', 1152) + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('CoordinateSystem', 600) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1223) + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('CoordinateSystem', 738) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1230) + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('CoordinateSystem', 849) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1237) + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('CoordinateSystem', 983) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1157) + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1155) + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1156) + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1158) + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1153) + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1154) + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1228) + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1227) + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1224) + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1225) + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1226) + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1235) + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1232) + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1231) + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1233) + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1234) + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1242) + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1239) + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1238) + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1240) + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1241) + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 143) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 258) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 396) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 600) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1159) + DependencyObject('CoordinateSystem', 600) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 738) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1229) + DependencyObject('CoordinateSystem', 738) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 849) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1236) + DependencyObject('CoordinateSystem', 849) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 983) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1243) + DependencyObject('CoordinateSystem', 983) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[6: 637, 647, 774, 784, 885, 1019] + $begin 'AssignedFace' + kID=674 + $begin 'FaceData' + ParentObjectID=673 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.0512064 + FcUVMid(-12, -8.305, 0.0762) + $begin 'FcTolVts' + TolVt(-12.168, -8.305, 0, 5e-07) + TolVt(-12.168, -8.305, 0.1524, 5e-07) + TolVt(-11.832, -8.305, 0.1524, 5e-07) + TolVt(-11.832, -8.305, -6.17221986770266e-17, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=684 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-12, -12, 6.9524) + $begin 'FcTolVts' + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=686 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-12, -16, 3.4762) + $begin 'FcTolVts' + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -16, 0, 5e-07) + TolVt(-8, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=687 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -12, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-16, -8, 0, 5e-07) + TolVt(-16, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=688 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-12, -8, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-8, -8, 0, 5e-07) + TolVt(-16, -8, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=689 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-8, -12, 3.4762) + $begin 'FcTolVts' + TolVt(-8, -8, 0, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-8, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=795 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-20, -20, 6.9524) + $begin 'FcTolVts' + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=797 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=798 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -20, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=799 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -16, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -16, -4.33680868994202e-16, 5e-07) + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=800 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -20, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -16, -4.33680868994202e-16, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=896 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-20, -28, 6.9524) + $begin 'FcTolVts' + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=898 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -32, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + TolVt(-16, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=899 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=900 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=901 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-16, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1030 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-28, -28, 6.9524) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-32, -32, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1032 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-28, -32, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-32, -32, 6.9524, 5e-07) + TolVt(-32, -32, 0, 5e-07) + TolVt(-24, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1033 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-32, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-32, -32, 6.9524, 5e-07) + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-32, -24, 0, 5e-07) + TolVt(-32, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1034 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-28, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, 0, 5e-07) + TolVt(-32, -24, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1035 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 0, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=676 + $begin 'EdgeData' + ParentObjectID=673 + ParentFaces[1: 674] + $begin 'EdgeGeomTopol' + EdgeFaces(674) + $begin 'EdTolVts' + TolVt(-11.832, -8.305, 0.1524, 5e-07) + TolVt(-12.168, -8.305, 0.1524, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-12, -8.305, 0.1524) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=678 + $begin 'EdgeData' + ParentObjectID=673 + ParentFaces[1: 674] + $begin 'EdgeGeomTopol' + EdgeFaces(674) + $begin 'EdTolVts' + TolVt(-11.832, -8.305, -6.17221986770266e-17, 5e-07) + TolVt(-12.168, -8.305, 0, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-12, -8.305, -3.08610993385133e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=704 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 692, 691, 700] + TolVt(-16, -8, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=705 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 693, 692, 698] + TolVt(-16, -16, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=708 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 698, 696, 695] + TolVt(-16, -16, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=709 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 700, 697, 696] + TolVt(-16, -8, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=815 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 803, 802, 811] + TolVt(-24, -16, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=816 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 804, 803, 809] + TolVt(-24, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=819 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 809, 807, 806] + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=820 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 811, 808, 807] + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=916 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 904, 903, 912] + TolVt(-24, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=917 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 905, 904, 910] + TolVt(-24, -32, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=920 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 910, 908, 907] + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=921 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 912, 909, 908] + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1050 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1038, 1037, 1046] + TolVt(-32, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1051 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1039, 1038, 1044] + TolVt(-32, -32, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1054 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1044, 1042, 1041] + TolVt(-32, -32, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1055 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1046, 1043, 1042] + TolVt(-32, -24, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + GroupByMaterial=true + GroupSheetByMaterial=true + GroupCompByDefID=true + DoNotOrganizeUnderGroup=false + DoNotOrganizeUnderComponent=false + OrganizeLightweight=false + ShowGroup=true + $begin 'LastUserInputs' + $end 'LastUserInputs' + $end 'ModelSetup' + $begin '3DComponent' + $begin 'ComponentDefinition' + ID=599 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '599' + '3'=19 + $end '599' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $begin '1' + ID=3 + BoundType='Lumped Port' + IsComponent=false + Faces(105) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=97 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='2.16840434497101e-17' + YPosition='3.695' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=99 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='0' + YPosition='3.695' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '599' + '0'=20 + '1'=21 + '9'=22 + '10'=23 + '11'=24 + $end '599' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=9 + BoundType='Lattice Pair' + IsComponent=false + Faces(237, 239) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + ParentIDs(244, 243, 249) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=259 + ParentIDs(249, 247, 246) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=10 + BoundType='Lattice Pair' + IsComponent=false + Faces(238, 240) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=255 + ParentIDs(243, 242, 251) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=260 + ParentIDs(251, 248, 247) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $begin 'Rad1' + ID=11 + BoundType='Radiation' + IsComponent=false + Faces(235) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '599' + '6'=610 + '34'=637 + '46'=647 + '95'=673 + '234'=683 + '267'=710 + $end '599' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 95, '22cel', 234, '22cel', 267, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '599' + $end '599' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '599' + $end '599' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '599' + $end '599' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '599' + $end '599' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(599, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '599' + $end '599' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '599' + $end '599' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=737 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '737' + $end '737' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '737' + '1'=25 + '5'=26 + '6'=27 + '7'=28 + '8'=29 + $end '737' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '737' + '6'=747 + '34'=774 + '238'=784 + '250'=794 + '278'=821 + $end '737' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel', 278, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '737' + $end '737' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '737' + $end '737' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '737' + $end '737' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '737' + $end '737' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(737, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '737' + $end '737' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '737' + $end '737' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=848 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '848' + $end '848' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '848' + '1'=30 + '6'=31 + '7'=32 + '8'=33 + $end '848' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '848' + '6'=858 + '34'=885 + '250'=895 + '361'=922 + '417'=949 + $end '848' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '848' + $end '848' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '848' + $end '848' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '848' + $end '848' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '848' + $end '848' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(848, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '848' + $end '848' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '848' + $end '848' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=982 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '982' + $end '982' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '982' + '1'=34 + '6'=35 + '7'=36 + '8'=37 + $end '982' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '982' + '6'=992 + '34'=1019 + '250'=1029 + '361'=1056 + '417'=1107 + $end '982' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '982' + $end '982' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '982' + $end '982' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '982' + $end '982' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '982' + $end '982' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(982, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '982' + $end '982' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '982' + $end '982' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'NativeComponentVisualization' + $end 'NativeComponentVisualization' + $end '3DComponent' + $begin 'BoundarySetup' + $begin 'GlobalBoundData' + PortImpedance='1' + GlobalMaterialEnv='vacuum' + UseTotalFieldFormulation=false + HybridRegionCouplingType='TwoWayCoupled' + 'Current Source Conformance'='Auto' + 'Thin Sources'=false + $end 'GlobalBoundData' + $begin 'Boundaries' + NextUniqueID=38 + MoveBackwards=false + $begin '02_Patch1_antennaMetal' + ID=20 + BoundType='Perfect E' + IsComponent=true + Objects(647) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch1_antennaMetal' + $begin '02_Patch1_groundMetal' + ID=21 + BoundType='Perfect E' + IsComponent=true + Objects(637) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch1_groundMetal' + $begin '02_Patch1_LatticePair1' + ID=22 + BoundType='Lattice Pair' + IsComponent=true + Faces(686, 688) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=705 + ParentIDs(693, 692, 698) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-16' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=708 + ParentIDs(698, 696, 695) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-16' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch1_LatticePair1' + $begin '02_Patch1_LatticePair2' + ID=23 + BoundType='Lattice Pair' + IsComponent=true + Faces(687, 689) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=704 + ParentIDs(692, 691, 700) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-8' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=709 + ParentIDs(700, 697, 696) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-8' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch1_LatticePair2' + $begin '02_Patch1_Rad1' + ID=24 + BoundType='Radiation' + IsComponent=true + Faces(684) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '02_Patch1_Rad1' + $begin '01_Metal_Only1_groundMetal' + ID=25 + BoundType='Perfect E' + IsComponent=true + Objects(774) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only1_groundMetal' + $begin '01_Metal_Only1_Antenna' + ID=26 + BoundType='Perfect E' + IsComponent=true + Objects(784) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only1_Antenna' + $begin '01_Metal_Only1_Rad1' + ID=27 + BoundType='Radiation' + IsComponent=true + Faces(795) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '01_Metal_Only1_Rad1' + $begin '01_Metal_Only1_LatticePair1' + ID=28 + BoundType='Lattice Pair' + IsComponent=true + Faces(797, 799) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=816 + ParentIDs(804, 803, 809) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=819 + ParentIDs(809, 807, 806) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only1_LatticePair1' + $begin '01_Metal_Only1_LatticePair2' + ID=29 + BoundType='Lattice Pair' + IsComponent=true + Faces(798, 800) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=815 + ParentIDs(803, 802, 811) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-16' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=820 + ParentIDs(811, 808, 807) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-16' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only1_LatticePair2' + $begin '03_Radome_Side1_groundMetal' + ID=30 + BoundType='Perfect E' + IsComponent=true + Objects(885) + ParentBndID=-1 + InfGroundPlane=false + $end '03_Radome_Side1_groundMetal' + $begin '03_Radome_Side1_Rad1' + ID=31 + BoundType='Radiation' + IsComponent=true + Faces(896) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '03_Radome_Side1_Rad1' + $begin '03_Radome_Side1_LatticePair1' + ID=32 + BoundType='Lattice Pair' + IsComponent=true + Faces(898, 900) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=917 + ParentIDs(905, 904, 910) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-32' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=920 + ParentIDs(910, 908, 907) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-32' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side1_LatticePair1' + $begin '03_Radome_Side1_LatticePair2' + ID=33 + BoundType='Lattice Pair' + IsComponent=true + Faces(899, 901) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=916 + ParentIDs(904, 903, 912) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=921 + ParentIDs(912, 909, 908) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side1_LatticePair2' + $begin 'Radome_Corner1_groundMetal' + ID=34 + BoundType='Perfect E' + IsComponent=true + Objects(1019) + ParentBndID=-1 + InfGroundPlane=false + $end 'Radome_Corner1_groundMetal' + $begin 'Radome_Corner1_Rad1' + ID=35 + BoundType='Radiation' + IsComponent=true + Faces(1030) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Radome_Corner1_Rad1' + $begin 'Radome_Corner1_LatticePair1' + ID=36 + BoundType='Lattice Pair' + IsComponent=true + Faces(1032, 1034) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1051 + ParentIDs(1039, 1038, 1044) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-32' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1054 + ParentIDs(1044, 1042, 1041) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-32' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Radome_Corner1_LatticePair1' + $begin 'Radome_Corner1_LatticePair2' + ID=37 + BoundType='Lattice Pair' + IsComponent=true + Faces(1033, 1035) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1050 + ParentIDs(1038, 1037, 1046) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1055 + ParentIDs(1046, 1043, 1042) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-24' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Radome_Corner1_LatticePair2' + $begin '02_Patch1_1' + ID=19 + BoundType='Lumped Port' + IsComponent=true + Faces(674) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=676 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-12' + YPosition='-8.305' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=678 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-12' + YPosition='-8.305' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '02_Patch1_1' + $end 'Boundaries' + $begin 'ProductSpecificData' + $begin 'SBRWedgeSettings' + MaxWedgeAngle='135deg' + IncludeSheetEdges=true + ApplySourceDistFilter=false + ApplyBoxFilter=false + $end 'SBRWedgeSettings' + $begin 'SBRTxRxSettings' + $end 'SBRTxRxSettings' + $begin 'SBRCreepingWaveSettings' + CWRaySampleDensity=10 + CWRayCutoffDb=40 + CWCurvatureSensitivity=50 + CWAngularRayInterval=2 + $end 'SBRCreepingWaveSettings' + $begin 'SBRBlockageSettings' + $end 'SBRBlockageSettings' + $begin 'PMLData' + $begin 'PMLGroups' + $end 'PMLGroups' + $end 'PMLData' + $begin 'SortOrder' + Port[1: -1] + Terminal[1: -1] + $end 'SortOrder' + 'Phase Center Mode'='PhaseCenterPerPort' + $begin 'Phase Center Per Port' + $begin '02_Patch1_1' + Port=19 + 'Coordinate System'=1 + $end '02_Patch1_1' + $end 'Phase Center Per Port' + $end 'ProductSpecificData' + $end 'BoundarySetup' + $begin 'ArrayDefinition' + NextUniqueID=0 + MoveBackwards=false + $begin 'ArrayObject' + ID=0 + Type='3D Component' + Name='A1' + UseAirObjects=true + RowPrimaryBnd=28 + ColumnPrimaryBnd=29 + RowDimension=8 + ColumnDimension=8 + Visible=true + ShowCellNumber=true + RenderType=0 + Padding=0 + Colors() + ComponentMap('4'=982, '3'=848, '2'=737, '1'=599) + $begin 'Cells' + m=8 + n=8 + $begin 'r0' + c(4) + c(3) + c(3) + c(3) + c(3) + c(3) + c(3) + c(4) + $end 'r0' + $begin 'r1' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(3) + $end 'r1' + $begin 'r2' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r2' + $begin 'r3' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r3' + $begin 'r4' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r4' + $begin 'r5' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r5' + $begin 'r6' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(3) + $end 'r6' + $begin 'r7' + c(4) + c(3) + c(3) + c(3) + c(3) + c(3) + c(3) + c(4) + $end 'r7' + $end 'Cells' + $begin 'Active' + m=8 + n=8 + $begin 'r0' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(false) + $end 'r0' + $begin 'r1' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r1' + $begin 'r2' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r2' + $begin 'r3' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r3' + $begin 'r4' + c(true) + c(true) + c(false) + c(true) + c(false) + c(true) + c(true) + c(true) + $end 'r4' + $begin 'r5' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r5' + $begin 'r6' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r6' + $begin 'r7' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r7' + $end 'Active' + $begin 'Rotation' + m=8 + n=8 + $begin 'r0' + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r0' + $begin 'r1' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r1' + $begin 'r2' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r2' + $begin 'r3' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r3' + $begin 'r4' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r4' + $begin 'r5' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r5' + $begin 'r6' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r6' + $begin 'r7' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + $end 'r7' + $end 'Rotation' + $begin 'PostProcessingCells' + OneCell(599, '4', '3') + OneCell(737, '2', '6') + OneCell(848, '3', '1') + OneCell(982, '1', '1') + $end 'PostProcessingCells' + ReferenceCSID=1 + $end 'ArrayObject' + $begin 'SizingVariable' + EnableSizingVariable=false + UseAbove=true + ForAVector='' + ForBVector='' + $end 'SizingVariable' + $end 'ArrayDefinition' + $begin 'MeshSetup' + $begin 'MeshSettings' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshSettings' + $begin 'MeshOperations' + NextUniqueID=0 + MoveBackwards=false + $end 'MeshOperations' + $end 'MeshSetup' + $begin 'AnalysisSetup' + $begin 'HfssGlobalData' + NextUniqueID=0 + MoveBackwards=false + $end 'HfssGlobalData' + $begin 'SolveSetups' + NextUniqueID=1 + MoveBackwards=false + $begin 'Setup1' + ID=0 + SetupType='HfssDriven' + SolveType='Single' + Frequency='1.8GHz' + MaxDeltaS=0.02 + UseMatrixConv=false + MaximumPasses=20 + MinimumPasses=1 + MinimumConvergedPasses=1 + PercentRefinement=30 + SkipArraySolveDuringAdaptivePasses=true + IsEnabled=true + $begin 'MeshLink' + ImportMesh=false + $end 'MeshLink' + BasisOrder=1 + DoLambdaRefine=true + DoMaterialLambda=true + SetLambdaTarget=false + Target=0.3333 + UseMaxTetIncrease=false + PortAccuracy=2 + UseABCOnPort=false + SetPortMinMaxTri=false + PortMinTri=100 + PortMaxTri=500 + DrivenSolverType='Direct Solver' + EnhancedLowFreqAccuracy=false + SaveRadFieldsOnly=true + SaveAnyFields=true + IESolverType='Auto' + LambdaTargetForIESolver=0.15 + UseDefaultLambdaTgtForIESolver=true + 'IE Solver Accuracy'='Balanced' + InfiniteSphereSetup=-1 + MaxPass=10 + MinPass=1 + MinConvPass=1 + PerError=1 + PerRefine=30 + $begin 'Sweeps' + NextUniqueID=2 + MoveBackwards=false + $begin 'Discrete_Sweep' + ID=0 + IsEnabled=true + RangeType='LinearCount' + RangeStart='0.9GHz' + RangeEnd='2.7GHz' + RangeCount=3 + Type='Discrete' + SaveFields=true + SaveRadFields=true + $end 'Discrete_Sweep' + $begin 'Interp_Sweep' + ID=1 + IsEnabled=true + RangeType='LinearCount' + RangeStart='0.9GHz' + RangeEnd='2.7GHz' + RangeCount=101 + Type='Interpolating' + SaveFields=false + SaveRadFields=false + InterpTolerance=0.5 + InterpMaxSolns=250 + InterpMinSolns=0 + InterpMinSubranges=1 + InterpUseS=true + InterpUsePortImped=false + InterpUsePropConst=true + UseDerivativeConvergence=false + InterpDerivTolerance=0.2 + UseFullBasis=true + EnforcePassivity=true + PassivityErrorTolerance=0.0001 + SMatrixOnlySolveMode='Auto' + $end 'Interp_Sweep' + $end 'Sweeps' + $end 'Setup1' + $end 'SolveSetups' + $end 'AnalysisSetup' + $begin 'Optimetrics' + $begin 'OptimetricsSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'OptimetricsSetups' + $end 'Optimetrics' + $begin 'Solutions' + FieldType='NoIncidentWave' + IncludePortPostProcessing=true + UseSpecifiedIncidentPower=false + SourceEntry(ID=19, Index=0, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=1, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=2, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=3, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=4, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=5, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=6, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=7, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=8, Terminal=false, Terminated=false, Magnitude='0W', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=9, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=10, Terminal=false, Terminated=false, Magnitude='0W', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=11, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=12, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=13, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=14, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=15, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + $begin 'Contexts' + NextUniqueID=1 + MoveBackwards=false + $end 'Contexts' + $end 'Solutions' + $begin 'PortFieldDisplay' + $begin 'PortFieldDisplay' + ScaleFactor=5 + $end 'PortFieldDisplay' + $end 'PortFieldDisplay' + $begin 'FieldsReporter' + $begin 'FieldsCalculator' + Line_Discretization=1000 + $begin 'SurfaceMeshSummary' + SolutionName='' + Variation='' + $begin 'MeshRowItems' + $end 'MeshRowItems' + $end 'SurfaceMeshSummary' + $end 'FieldsCalculator' + $begin 'PlotDefaults' + Default_SolutionId=135 + Default_PlotFolder='Automatic' + $end 'PlotDefaults' + $begin 'FieldsPlotManagerID' + NextUniqueID=0 + MoveBackwards=false + NumQuantityType=0 + NumPlots=0 + $end 'FieldsPlotManagerID' + $begin 'Report3dInGeomWnd' + Report3dNum=1 + $begin 'Report3dPlot_1' + ReportID=301 + Transparency=0.400000005960464 + ScaleFactor=0.25 + Visible=false + CoordSys=-1 + $end 'Report3dPlot_1' + $end 'Report3dInGeomWnd' + $begin 'Report2dInGeomWnd' + Report2dNum=1 + $begin 'Report2dPlot_1' + DisplayType=3 + '3DOverlay'=true + ReportID=1 + Transparency=0.899999976158142 + ScaleFactor=0.200000002980232 + Visible=false + CoordSys=-1 + PlaneNormalValues(-0, 1, 0) + $end 'Report2dPlot_1' + $end 'Report2dInGeomWnd' + $begin 'AntennaParametersInGeomWnd' + AntennaParametersNum=0 + $end 'AntennaParametersInGeomWnd' + AntennaParametersPlotTablesOrder() + $end 'FieldsReporter' + $begin 'RadField' + $begin 'FarFieldSetups' + NextUniqueID=45 + MoveBackwards=false + $begin 'Infinite Sphere1' + Type='Infinite Sphere' + ID=1 + VersionID=44 + UseCustomRadiationSurface=false + CSDefinition='Theta-Phi' + Polarization='Linear' + ThetaStart='-180deg' + ThetaStop='180deg' + ThetaStep='2deg' + PhiStart='0deg' + PhiStop='360deg' + PhiStep='2deg' + UseLocalCS=false + $end 'Infinite Sphere1' + $end 'FarFieldSetups' + $begin 'ArraySetup' + UseOption='NoArray' + $begin 'RegularArray' + NumUCells='10' + NumVCells='10' + CellUDist='10cm' + CellVDist='10cm' + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + FirstCellPosX='0cm' + FirstCellPosY='0cm' + FirstCellPosZ='0cm' + Behavior='UseSlaveSettings' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'RegularArray' + $begin 'CustomArray' + NumCells=0 + $begin 'Cell' + $end 'Cell' + $end 'CustomArray' + $begin 'ParametricArray' + DesignFrequency='1GHz' + LayoutType=1 + CenterCellX='0mm' + CenterCellY='0mm' + CenterCellZ='0mm' + SpecifyDesignInWavelength=true + WidthSpacing='14.9896229mm' + WidthSpacingInWavelength='0.05' + Width='119.9169832mm' + WidthInWavelength='0.4' + LengthSpacing='14.9896229mm' + LengthSpacingInWavelength='0.05' + Length='89.9377374mm' + LengthInWavelength='0.3' + SymmetryType=0 + StaggerAngle='0deg' + StaggerType=0 + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + WeightType=3 + EdgeTaperX_db='-200' + CosineExp='1' + DifferentialType=0 + Behavior='UseScanAngle' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'ParametricArray' + $end 'ArraySetup' + $begin 'NearFieldSetups' + NextUniqueID=45 + MoveBackwards=false + $end 'NearFieldSetups' + RadFieldComputationVersion=1.8 + RadfieldHeaderFile='RAD5AB449308164676611131.tmp' + RadPowerMethod=0 + $end 'RadField' + $begin 'SolutionManager' + $begin 'SimSetup' + TypeName='BaseSetup' + ID=133 + Name='Setup1' + $begin 'Solution' + ID=134 + Name='AdaptivePass' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'Sweep' + Variable='Pass' + Column='1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20' + Units='' + $end 'Sweep' + $begin 'Sweep' + Variable='Freq' + Column='1.8GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=135 + Name='LastAdaptive' + $begin 'SimDataExtractor' + SimValue('GainTotal', 1, 90, true, SimValueID=611, 0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $begin 'Sweeps' + $begin 'Sweep' + Variable='Freq' + Column='1.8GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'Sweep' + Variable='subX' + Column='8cm' + Units='cm' + $end 'Sweep' + $begin 'Sweep' + Variable='subY' + Column='8cm' + Units='cm' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='ScanFrequency' + RegularSweep=1 + Units='Hz' + Minimum=1800000000 + Maximum=1800000000 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAngleTheta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAnglePhi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftA' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftB' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanMag1' + RegularSweep=1 + Units='W' + Minimum=1 + Maximum=1 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhase1' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='CosinePower' + RegularSweep=1 + Units='' + Minimum=3 + Maximum=3 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='EdgeTaperLevel_dB' + RegularSweep=1 + Units='' + Minimum=-20 + Maximum=-20 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=139 + Name='Discrete_Sweep' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'Sweep' + Variable='Freq' + Column='0.9GHz;1.8GHz;2.7GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=506 + Name='Interp_Sweep' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'PostprocessSweep' + Variable='Freq' + Column='0.9GHz;0.918GHz;0.936GHz;0.954GHz;0.972GHz;0.99GHz;1.008GHz;1.026GHz;1.044GHz;1.062GHz;1.08GHz;1.098GHz;1.116GHz;1.134GHz;1.152GHz;1.17GHz;1.188GHz;1.206GHz;1.224GHz;1.242GHz;1.26GHz;1.278GHz;1.296GHz;1.314GHz;1.332GHz;1.35GHz;1.368GHz;1.386GHz;1.404GHz;1.422GHz;1.44GHz;1.458GHz;1.476GHz;1.494GHz;1.512GHz;1.53GHz;1.548GHz;1.566GHz;1.584GHz;1.602GHz;1.62GHz;1.638GHz;1.656GHz;1.674GHz;1.692GHz;1.71GHz;1.728GHz;1.746GHz;1.764GHz;1.782GHz;1.8GHz;1.818GHz;1.836GHz;1.854GHz;1.872GHz;1.89GHz;1.908GHz;1.926GHz;1.944GHz;1.962GHz;1.98GHz;1.998GHz;2.016GHz;2.034GHz;2.052GHz;2.07GHz;2.088GHz;2.106GHz;2.124GHz;2.142GHz;2.16GHz;2.178GHz;2.196GHz;2.214GHz;2.232GHz;2.25GHz;2.268GHz;2.286GHz;2.304GHz;2.322GHz;2.34GHz;2.358GHz;2.376GHz;2.394GHz;2.412GHz;2.43GHz;2.448GHz;2.466GHz;2.484GHz;2.502GHz;2.52GHz;2.538GHz;2.556GHz;2.574GHz;2.592GHz;2.61GHz;2.628GHz;2.646GHz;2.664GHz;2.682GHz;2.7GHz' + Units='GHz' + Minimum=900000000 + Maximum=2700000000 + Increment=2700000000 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $end 'SimSetup' + $begin 'Version ID Map' + V=1039 + $begin 'Setup' + N='Setup1' + V=1039 + Soln(N='AdaptivePass', V=1039) + Soln(N='LastAdaptive', V=1039) + Soln(N='Discrete_Sweep', V=1039) + Soln(N='Interp_Sweep', V=1039) + $end 'Setup' + IQM=1040 + $end 'Version ID Map' + $begin 'ID Map' + $begin 'Setup' + N='Setup1' + I=133 + Soln(N='AdaptivePass', I=134) + Soln(N='LastAdaptive', I=135) + Soln(N='Discrete_Sweep', I=139) + Soln(N='Interp_Sweep', I=506) + $end 'Setup' + $end 'ID Map' + ValidationCacheHeader='' + $end 'SolutionManager' + $begin 'UserDefinedSolutionMgr' + NextUniqueID=1000000 + MoveBackwards=false + $end 'UserDefinedSolutionMgr' + $begin 'DatasetSolutionMgr' + NextUniqueID=2000000 + MoveBackwards=false + $end 'DatasetSolutionMgr' + Notes=$begin_cdata$ $end_cdata$ + $begin 'AnimationSetups' + $end 'AnimationSetups' + CacheHeaderFile='HDR6197466016986743998.tmp' + $end 'HFSSModel' + $begin 'DataInstances' + DesignEditor='TopLevel' + Refdes('0', 'U1') + $begin 'CompInstances' + $begin 'Compinst' + ID='0' + Status='Status' + CompName='Array' + GatesInUse() + $begin 'Properties' + TextProp('ID', 'SRID', '', '0') + $end 'Properties' + $begin 'Parameters' + MenuProp('CoSimulator', 'OHD', '', 'DefaultNetlist', 0) + ButtonProp('CosimDefinition', 'OHD', '', '', 'Edit', 40501, ButtonPropClientData()) + $end 'Parameters' + $end 'Compinst' + $end 'CompInstances' + $begin 'Instance' + DesignEditor='Array' + ID='0' + $begin 'HfssDesignInstance' + DesignInstanceID=1 + $begin 'WindowPosition' + $begin 'EditorWindow' + Circuit(Editor3d(View('View Orientation Gadget'=1, WindowPos(3, -1, -1, -11, -45, 564, 0, 1128, 659), OrientationMatrix(-3.16649675369263e-08, -0.081437736749649, 4.4703483581543e-08, 0, 0.0814376398921013, 2.98023223876953e-08, -1.44355007947183e-08, 0, -1.37370079755783e-08, -4.4703483581543e-08, 0.0814376622438431, 0, 1.11254405975342, -0.704558134078979, -5.05950880050659, 1, 0, -8.59931373596191, 9.22470283508301, -5.59401988983154, 4.66979217529297, -13.8738861083984, 23.0892066955566), Drawings[27: 'sub', 'Ground', 'antenna', 'port1', 'Box1', 'Box2', 'sub_1', 'Ground_1', 'antenna_1', 'Box1_1', 'Box2_1', 'sub_2', 'Ground_2', 'Box1_2', 'Box2_2', 'Box4', 'sub_3', 'Ground_3', 'Box1_3', 'Box2_3', 'Box4_1', '02_Patch1', '01_Metal_Only1', '03_Radome_Side1', 'Radome_Corner1', '', 'A1'], 'View Data'('Render Mode'=1, 'Show Ruler'=1, 'Coordinate Systems View Mode'=1, 'CS Triad View Mode'=0, 'Render Facets'=1, GridVisible=1, GridAutoAdjust=1, GridAutoExtents=1, GridType='Rect', GridStyle='Line', NumPixels=30, dXForGrid=5, dYForGrid=5, dZForGrid=5, dRForGrid=5, dThetaForGrid=10), ClipPlanes(ClipPlaneOptions(DisableWhenDrawingNewPlane=true, ForceOpqaueForUnclipped=false, ShowClipped=false, Transparency=0, HandleColor=16776960))))) + $end 'EditorWindow' + $end 'WindowPosition' + $begin 'ReportSetup' + $begin 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=1 + ReportName='Gain Plot 1' + $begin 'TraceDef' + TraceDefinitionType='TraceDefinition' + $begin 'DesignSolnDefn' + $begin 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + DesignID=0 + SolutionID=135 + $begin 'REPORT_TYPE_SIM_VALUE_CONTEXT' + ReportType=3 + SimValueContext(0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $end 'REPORT_TYPE_SIM_VALUE_CONTEXT' + $end 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + $end 'DesignSolnDefn' + ID=0 + VersionID=844 + Name='dB(GainTotal)' + TieNameToExpr=true + $begin 'Components' + $begin 'TraceComponentDefinition' + Expr='Theta' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='dB(GainTotal)' + $end 'TraceComponentDefinition' + $end 'Components' + $begin 'ExtendedTraceInfo' + NumPoints=0 + TraceType=0 + Offset=0 + XLabel='' + SamplingPeriod='0' + SamplingPeriodOffset='0' + AutoDelay=true + DelayValue='0ps' + AutoCompCrossAmplitude=true + CrossingAmplitude='0mV' + YAxis=1 + AutoCompEyeMeasurementPoint=true + EyeMeasurementPoint='0ps' + EyePamLow() + EyePamVRef() + EyePamHigh() + EyePamNames() + EyePamStrictVRef=false + $end 'ExtendedTraceInfo' + $begin 'TraceFamiliesDisplayDefinition' + DisplayFamiliesType='DisplayAll' + $end 'TraceFamiliesDisplayDefinition' + $begin 'PointsetDefinition' + $begin 'SubsweepDefParamsContainer' + $begin '0' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Theta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '0' + $begin '1' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Phi' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(0) + ParameterType='DoubleParam' + Units='deg' + $end '1' + $begin '2' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Freq' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(1800000000) + ParameterType='DoubleParam' + Units='GHz' + $end '2' + $begin '3' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subX' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '3' + $begin '4' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subY' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '4' + $end 'SubsweepDefParamsContainer' + FamilyBlock() + $end 'PointsetDefinition' + DesignInstanceID=1 + $end 'TraceDef' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + ReportName='Gain Plot 2' + $begin 'TraceDef' + TraceDefinitionType='TraceDefinition' + $begin 'DesignSolnDefn' + $begin 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + DesignID=0 + SolutionID=135 + $begin 'REPORT_TYPE_SIM_VALUE_CONTEXT' + ReportType=3 + SimValueContext(0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $end 'REPORT_TYPE_SIM_VALUE_CONTEXT' + $end 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + $end 'DesignSolnDefn' + ID=300 + VersionID=845 + Name='dB(GainTotal)' + TieNameToExpr=true + $begin 'Components' + $begin 'TraceComponentDefinition' + Expr='Phi' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='Theta' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='dB(GainTotal)' + $end 'TraceComponentDefinition' + $end 'Components' + $begin 'ExtendedTraceInfo' + NumPoints=0 + TraceType=0 + Offset=0 + XLabel='' + SamplingPeriod='0' + SamplingPeriodOffset='0' + AutoDelay=true + DelayValue='0ps' + AutoCompCrossAmplitude=true + CrossingAmplitude='0mV' + YAxis=1 + AutoCompEyeMeasurementPoint=true + EyeMeasurementPoint='0ps' + EyePamLow() + EyePamVRef() + EyePamHigh() + EyePamNames() + EyePamStrictVRef=false + $end 'ExtendedTraceInfo' + $begin 'TraceFamiliesDisplayDefinition' + DisplayFamiliesType='DisplayAll' + $end 'TraceFamiliesDisplayDefinition' + $begin 'PointsetDefinition' + $begin 'SubsweepDefParamsContainer' + $begin '0' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Phi' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '0' + $begin '1' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Theta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '1' + $begin '2' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Freq' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(1800000000) + ParameterType='DoubleParam' + Units='GHz' + $end '2' + $begin '3' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subX' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '3' + $begin '4' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subY' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '4' + $begin '5' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanFrequency' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '5' + $begin '6' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAngleTheta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '6' + $begin '7' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAnglePhi' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '7' + $begin '8' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanMag1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '8' + $begin '9' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanPhase1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '9' + $begin '10' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='CosinePower' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '10' + $begin '11' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='EdgeTaperLevel_dB' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '11' + $end 'SubsweepDefParamsContainer' + FamilyBlock() + $end 'PointsetDefinition' + DesignInstanceID=1 + $end 'TraceDef' + $end 'Gain Plot 2' + $end 'Reports' + NextUniqueID=302 + MoveBackwards=false + $begin 'NextVersID' + NextUniqueID=846 + MoveBackwards=false + $end 'NextVersID' + $end 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=1 + $begin 'Report2D' + name='Gain Plot 1' + ReportID=1 + ReportType=3 + DisplayType=3 + Title='' + Domain='' + $begin 'Migration' + MigVersion(1, 0, '2021R1 mig(1.0)') + $end 'Migration' + $begin 'Graph2DsV2' + $begin 'Graph2D' + TraceDefID=0 + Type='Continuous' + Axis='Y1' + $end 'Graph2D' + $end 'Graph2DsV2' + $begin 'PlotDisplayDataManager' + NextUniqueID=15 + MoveBackwards=false + $begin 'PlotHeaderDataSource' + CompanyName='' + ShowDesignName=true + ProjectFileName='' + $end 'PlotHeaderDataSource' + StockNameIDMap(CircleAxis=4, Header=0, Legend=2, PolarGrid=6) + $begin 'SourceList' + $end 'SourceList' + Version='17.0:20150830' + $begin 'DocAttributes' + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=6 + $begin 'PolarRhoAxisAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=-40 + MaxScale=20 + TickSpacing=12 + ManualUnits=false + Units='' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'PolarRhoAxisAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + $end 'DocAttributes' + $begin 'DisplayTypeAttributes' + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=10 + $begin 'CurveCartesianAttribute' + YAxis='Y1' + $end 'CurveCartesianAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=12 + $begin 'CurveCartesianAttribute' + YAxis='Y1' + $end 'CurveCartesianAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=10 + $begin 'CurveRenderAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=3 + LineColor(R=237, G=28, B=36) + $end 'LineRenderAttribute' + TraceType='Continuous' + SymbolType='HollowHorizontalLeftTriangle' + SymbolColor(R=155, G=93, B=112) + ShowSymbols=false + SymbolFrequency=15 + ShowArrows=false + $end 'CurveRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=12 + $begin 'CurveRenderAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=3 + LineColor(R=0, G=255, B=0) + $end 'LineRenderAttribute' + TraceType='Continuous' + SymbolType='Circle' + SymbolColor(R=128, G=158, B=173) + ShowSymbols=false + SymbolFrequency=15 + ShowArrows=false + $end 'CurveRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=0 + $begin 'HeaderRenderAttribute' + $begin 'TitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=14 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TitleFont' + $begin 'SubtitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=10 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'SubtitleFont' + $end 'HeaderRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=2 + $begin 'LegendRenderAttribute' + $begin 'LegendTableAttrib' + $begin 'TableRenderAttribute' + $begin 'TableFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableFontAttrib' + $begin 'TableTitleFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableTitleFontAttrib' + TableBorderLineWidth=1 + TableBorderLineColor=0 + TableGridLineWidth=1 + TableGridLineColor=12632256 + TableBackgroundColor=16777215 + TableHeaderBackgroundColor=14408667 + $end 'TableRenderAttribute' + $end 'LegendTableAttrib' + LegendName='' + ShowTraceName=true + ShowSolutionName=true + ShowVariationKey=true + FileNameDisplayModeInVariationKey=0 + DockMode='None' + $end 'LegendRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=4 + $begin 'PolarCircleAxisAttribute' + CircDecimalFieldWidth=3 + CircDecimalFieldPrecision=2 + CircleAxisMinorDivCount=6 + CircleAxisMajorDivCount=12 + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=0, G=0, B=0) + $end 'LineRenderAttribute' + $end 'PolarCircleAxisAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=6 + $begin 'PolarGridAttribute' + PlotType=3 + ShowGridLabels=true + $begin 'CircleGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'CircleGrid' + $begin 'AngleGrid' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'AngleGrid' + $begin 'ImpedanceGrid' + $begin 'ImpedanceRGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'ImpedanceRGrid' + $begin 'ImpedanceXGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'ImpedanceXGrid' + $end 'ImpedanceGrid' + $begin 'AdimittanceGrid' + $begin 'AdimittanceGGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'AdimittanceGGrid' + $begin 'AdimittanceBGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'AdimittanceBGrid' + $end 'AdimittanceGrid' + $end 'PolarGridAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=-1 + $begin 'PolarPlotRenderAttribute' + ShowCircleGrid=true + ShowAngleGrid=true + ShowImpedanceGrid=true + ShowAdmittanceGrid=false + $end 'PolarPlotRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + $end 'DisplayTypeAttributes' + $begin 'DocDefaultAttributes' + $begin 'PlotAttributeStoreMap' + $end 'PlotAttributeStoreMap' + $end 'DocDefaultAttributes' + $begin 'PerViewPlotAttributeStoreMap' + $begin 'MapItem' + ItemID=-1 + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=1 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=8 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=75 + Left=75 + Bottom=9925 + Right=852 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=3 + $begin 'DockableOverlayLayoutAttribute' + $begin 'Dock_0' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=4850 + Left=952 + Bottom=9850 + Right=8452 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_0' + $begin 'Dock_1' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=5000 + Left=0 + Bottom=10000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_1' + $begin 'Dock_2' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=0 + Left=0 + Bottom=5000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_2' + $end 'DockableOverlayLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=5 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=7 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=11 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=13 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=683 + Left=9144 + Bottom=9316 + Right=511 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + PlotType=3 + $end 'MapItem' + $end 'PerViewPlotAttributeStoreMap' + IsViewAttribServer=false + ViewID=-1 + $begin 'SourceIDMap' + IDMapItem(0, 0, -1, 10) + IDMapItem(0, 1, -1, 12) + $end 'SourceIDMap' + $begin 'TraceCharacteristicsMgr' + $end 'TraceCharacteristicsMgr' + $begin 'CartesianXMarkerManager' + RefMarkerID=-1 + CurrentMarkerID=-1 + $begin 'ReferenceCurves' + $end 'ReferenceCurves' + $end 'CartesianXMarkerManager' + $begin 'CartesianYMarkerManager' + $end 'CartesianYMarkerManager' + XAxisStackID=-1 + $begin 'AllTransSrcDwg' + $begin 'PT' + ID=3 + TransSrcDwg(-1, 0, 8, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13) + $end 'PT' + $end 'AllTransSrcDwg' + $begin 'AllPtSVID' + PtID(3, -1, 1) + $end 'AllPtSVID' + $end 'PlotDisplayDataManager' + $end 'Report2D' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + $begin 'Report3D' + name='Gain Plot 2' + ReportID=301 + hasWindowBeenOpened=false + ReportType=3 + DisplayType=7 + $begin 'Graph3DsV2' + $begin 'Graph3DV2' + TraceDefID=300 + GraphName='dB(GainTotal)' + $begin 'Plot3DPolarDocument' + $begin 'Plot3DDataSources' + $begin 'Plot3DPlotDataSource' + ID=0 + Name='Plot' + $end 'Plot3DPlotDataSource' + $begin 'Plot3DBackgroundDataSource' + ID=1 + Name='Background' + $end 'Plot3DBackgroundDataSource' + $begin 'Plot3DHeaderDataSource' + ID=2 + Name='Header' + $end 'Plot3DHeaderDataSource' + $begin 'Plot3DAxisDataSource' + ID=3 + Name='Phi' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=4 + Name='Theta' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=5 + Name='Rho' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DGridDataSource' + ID=6 + Name='phi-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=7 + Name='theta-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=8 + Name='theta-rho-phi(0)' + $end 'Plot3DGridDataSource' + $begin 'Plot3DColorKeyDataSource' + ID=9 + Name='ColorKey' + $end 'Plot3DColorKeyDataSource' + $end 'Plot3DDataSources' + $begin 'Plot3DAttributesManager' + $begin 'PlotAttributeStore' + $end 'PlotAttributeStore' + $end 'Plot3DAttributesManager' + $end 'Plot3DPolarDocument' + $end 'Graph3DV2' + $end 'Graph3DsV2' + $begin 'Plot3DPolarDocument' + $begin 'Plot3DDataSources' + $begin 'Plot3DPlotDataSource' + ID=0 + Name='Plot' + $end 'Plot3DPlotDataSource' + $begin 'Plot3DBackgroundDataSource' + ID=1 + Name='Background' + $end 'Plot3DBackgroundDataSource' + $begin 'Plot3DHeaderDataSource' + ID=2 + Name='Header' + $end 'Plot3DHeaderDataSource' + $begin 'Plot3DAxisDataSource' + ID=3 + Name='Phi' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=4 + Name='Theta' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=5 + Name='Rho' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DGridDataSource' + ID=6 + Name='phi-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=7 + Name='theta-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=8 + Name='theta-rho-phi(0)' + $end 'Plot3DGridDataSource' + $begin 'Plot3DColorKeyDataSource' + ID=9 + Name='ColorKey' + $end 'Plot3DColorKeyDataSource' + $end 'Plot3DDataSources' + $begin 'Plot3DAttributesManager' + $begin 'PlotAttributeStore' + $end 'PlotAttributeStore' + $end 'Plot3DAttributesManager' + $end 'Plot3DPolarDocument' + $end 'Report3D' + $end 'Gain Plot 2' + $end 'Reports' + $begin 'ReportsWindowInfoList' + $begin 'Gain Plot 1' + ReportID=1 + $begin 'WindowInfoList' + $begin 'Report2D' + $end 'Report2D' + $end 'WindowInfoList' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + $begin 'WindowInfoList' + R3DWindowPos(Report3D()) + $end 'WindowInfoList' + $end 'Gain Plot 2' + $end 'ReportsWindowInfoList' + $end 'ReportSetup' + $begin 'Properties' + $end 'Properties' + $begin 'UserDefinedDocument' + $begin 'Data' + $end 'Data' + $end 'UserDefinedDocument' + $end 'HfssDesignInstance' + $end 'Instance' + $begin 'SODInfo' + $begin 'Array' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Array' + $begin 'Nexxim Circuit Elements\\lumped_general:NXPSH' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\lumped_general:NXPSH' + $begin 'HFSSDesign5' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'HFSSDesign5' + $begin 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB8_NX' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB8_NX' + $begin 'Nexxim Circuit Elements\\Independent Sources:P_SIN' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Independent Sources:P_SIN' + $begin 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB2_NX' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB2_NX' + $begin '00_Array2' + $begin 'CosimDefinition' + CosimDefName='Default' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end '00_Array2' + $end 'SODInfo' + $end 'DataInstances' + $begin 'WBSystemIDToDesignInstanceIDMap' + $end 'WBSystemIDToDesignInstanceIDMap' + $begin 'WBSysIDSysDetails' + $end 'WBSysIDSysDetails' + $begin 'WBConnIDConnDetails' + $end 'WBConnIDConnDetails' + $begin 'WBMaterialGuidDetails' + WBMaterialGuidMap() + $end 'WBMaterialGuidDetails' + $begin 'MinervaProjectSettingsBlk' + MinervaRemoteFilePath='' + FolderContainerString='' + $end 'MinervaProjectSettingsBlk' +$end 'AnsoftProject' +$begin 'AllReferencedFilesForProject' +$begin 'Design_0.setup/UdmDefFiles' +NumFiles= 4 +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/01_Metal_Only737.a3dcomp +BIN000000029357 +$begin 'AnsoftComponentChkSum' + ChecksumString='fe90c3eebdb3a22fa943fe186e9d6590' + ChecksumHistory('2eae920cded86ea339b0c2b510c2e396', '56dc97eefced4fb878670bf07bf9c0d7', '6ad251b9b60c46a887f8abe7cc95a939', '4dbebe5edc26d02a76cbe6a0375bcc2c', '1ffabeb99e557c6294a61facb790fdc1') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='01_Metal_Only' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='6.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:04 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel', 278, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subY', 'UD', '', '8cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('patchY', 'UD', '', '4.39cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=15 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=305 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=237 + ReferenceCoordSystemID=233 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='0cm' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=238 + StartFaceID=-1 + StartEdgeID=239 + StartVertexID=243 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=247 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=238 + $end 'LocalOperationParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=248 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=248 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=237 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_height+radome_thick+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=277 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='radome_height' + XSize='subX' + YSize='subY' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=278 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=278 + StartFaceID=279 + StartEdgeID=285 + StartVertexID=297 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 247) + DependencyObject('GeometryBodyOperation', 237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 277) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 238] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 238, 250, 278] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('patchY', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(patchY='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/02_Patch599.a3dcomp +BIN000000052902 +$begin 'AnsoftComponentChkSum' + ChecksumString='d5c6ab10d27dc0bd8bbb02e8dd2e2342' + ChecksumHistory('20fc5ac219fa743afd8ca925e6eb2079', '5a214f4574db96d93ace173fc9633c0d', 'ab2260df524ce23f2a26184bbe992b40', '1f86c0d94b7d8d980b578032d3716fb9', 'ac15e7f1edaac81bfe47615ad0e764c1', 'fdb0262a95719ca1f5242cd1435323c7', '7480689c0d4583954aa27bec8a82ea72', '67276bcb604613ff2d50669fd5840c08', 'afc6f7c927ea038b13e96a3641c31d5f', '16c4cdaef0e0228e14d11c5b3700e977') + VersionHistory('1.0', '2.0', '3.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='02_Patch' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='10.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:50:58 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 95, '22cel', 234, '22cel', 267, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=9 + BoundType='Lattice Pair' + IsComponent=false + Faces(237, 239) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + ParentIDs(244, 243, 249) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=237 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=259 + ParentIDs(249, 247, 246) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=237 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=10 + BoundType='Lattice Pair' + IsComponent=false + Faces(238, 240) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=255 + ParentIDs(243, 242, 251) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=238 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=260 + ParentIDs(251, 248, 247) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=238 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $begin 'Rad1' + ID=11 + BoundType='Radiation' + IsComponent=false + Faces(235) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $end 'Boundaries' + $begin 'Excitations' + $begin '1' + ID=3 + BoundType='Lumped Port' + IsComponent=false + Faces(105) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=97 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='2.16840434497101e-17' + YPosition='3.695' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.99999999999999967 + uvpos_v=0.5 + uvpos_id=105 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=99 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='0' + YPosition='3.695' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=2.0250065182751468e-16 + uvpos_v=0.49999999999999994 + uvpos_id=105 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'Excitations' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('patchY', 'UD', '', '4.39cm') + VariableProp('subY', 'UD', '', '8cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('FeedLength', 'UD', '', '1.5cm') + VariableProp('InsetGap', 'UD', '', '0.168cm') + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('FeedWidth', 'UD', '', '0.336cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('InsetDistance', 'UD', '', '1.46cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=17 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=295 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=262 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=263 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='subH' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=51 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=55 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=56 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=56 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=69 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(58) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=222 + StartVertexID=227 + NumNewFaces=0 + NumNewEdges=5 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=222 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=226 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=225 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=224 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=223 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=227 + VtPos(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=230 + VtPos(0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=228 + VtPos(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=229 + VtPos(0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=55 + NumToolOperations=1 + ToolOperations(67) + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=91 + $begin 'UniteParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(80) + $end 'UniteParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=231 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=232 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.252, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=231 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.25199999999999995, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=69 + NumToolOperations=1 + ToolOperations(89) + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=94 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2+FeedLength' + ZStart='0cm' + Width='subH' + Height='FeedWidth' + WhichAxis='Y' + $end 'RectangleParameters' + ParentPartID=95 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=95 + StartFaceID=-1 + StartEdgeID=96 + StartVertexID=100 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=104 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=95 + $end 'LocalOperationParameters' + ParentPartID=95 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=105 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=105 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206399999999999 + FcUVMid(2.2364959181737949e-17, 3.6949999999999994, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=94 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=233 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_thick+radome_height+5cm' + $end 'BoxParameters' + ParentPartID=234 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=234 + StartFaceID=235 + StartEdgeID=241 + StartVertexID=253 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=266 + ReferenceCoordSystemID=262 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='radome_height' + XSize='subX' + YSize='subY' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=267 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=267 + StartFaceID=268 + StartEdgeID=274 + StartVertexID=286 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_2673H5' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=57 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2-InsetGap' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth+2*InsetGap' + Height='FeedLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=58 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=58 + StartFaceID=-1 + StartEdgeID=59 + StartVertexID=63 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=67 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=58 + $end 'LocalOperationParameters' + ParentPartID=58 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=68 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=68 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1.008 + FcUVMid(0, 1.4849999999999994, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=57 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_OV2BLE' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=79 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth' + Height='FeedLength+InsetDistance' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=80 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=80 + StartFaceID=-1 + StartEdgeID=81 + StartVertexID=85 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=89 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=80 + $end 'LocalOperationParameters' + ParentPartID=80 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=90 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=90 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.99456 + FcUVMid(0, 2.2149999999999994, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=79 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'newobject_2673h' + newobject_2673h(5) + $end 'newobject_2673h' + $begin 'newobject_ov2ble' + newobject_ov2ble(-1) + $end 'newobject_ov2ble' + $begin 'objectlist' + objectlist(1) + $end 'objectlist' + $begin 'port' + port(1) + $end 'port' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 45) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 69) + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 67) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 91) + DependencyObject('GeometryBodyOperation', 69) + DependencyObject('GeometryBodyOperation', 89) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 94) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 104) + DependencyObject('GeometryBodyOperation', 94) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 266) + DependencyObject('CoordinateSystem', 262) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 57) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 67) + DependencyObject('GeometryBodyOperation', 57) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 79) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('GeometryBodyOperation', 79) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 262) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 46] + $begin 'AssignedFace' + kID=105 + $begin 'FaceData' + ParentObjectID=95 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206399999999999 + FcUVMid(2.2364959181737949e-17, 3.6949999999999994, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=235 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=237 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4762) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=238 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=239 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4762) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=240 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=97 + $begin 'EdgeData' + ParentObjectID=95 + ParentFaces[1: 105] + $begin 'EdgeGeomTopol' + EdgeFaces(105) + $begin 'EdTolVts' + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2.1684043449710089e-17, 3.6949999999999994, 0.15239999999999998) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=99 + $begin 'EdgeData' + ParentObjectID=95 + ParentFaces[1: 105] + $begin 'EdgeGeomTopol' + EdgeFaces(105) + $begin 'EdTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 3.6949999999999994, -3.08610993385133e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=255 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 243, 242, 251] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=256 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 244, 243, 249] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=259 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 249, 247, 246] + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=260 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 251, 248, 247] + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[6: 6, 34, 46, 95, 234, 267] + HiddenParts[0:] + IncludedCS[1: 262] + ReferenceCS=1 + IncludedParameters('FeedLength', 'FeedWidth', 'InsetDistance', 'InsetGap', 'patchY', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(FeedLength='', FeedWidth='', InsetDistance='', InsetGap='', patchY='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/03_Radome_Corner982.a3dcomp +BIN000000053461 +$begin 'AnsoftComponentChkSum' + ChecksumString='10baf2609693e33409d11202345ca665' + ChecksumHistory('48df8c28c8f90d7000ba95b58e4953ef', '9c31e8dcade8ebcf308ed8e923ed461a', 'b56f926f9c0284c44194e6b6d6a8fb4a', 'c91a15c1fe75b99ff252eea61ee6625b', '032466a2fbbe52d1f18400fbebb338eb', '565420525b544a6ef1e96fc53389da3f', '2b0acdb4ac6a1e6e1e0e62412b1a9453', 'bc45f9017b386ad363643011e17c6a68', 'b810ef987881004ea90f1548a1c23efd') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Radome_Corner' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='10.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:16 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('subX', 'UD', '', '8cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('radius', 'UD', '', '0.5cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=27 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=743 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_thick+radome_height+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=360 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='0cm' + XSize='subX/2' + YSize='radome_thick' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=361 + StartFaceID=362 + StartEdgeID=368 + StartVertexID=380 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=690 + $begin 'UniteParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=361 + NumToolParts=1 + ToolParts(389) + $end 'UniteParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=8 + NumWires=0 + NumLoops=8 + NumCoedges=36 + NumEdges=18 + NumVertices=12 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=691 + StartVertexID=692 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=691 + EdgeFaces(366, 395) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.80000000000000004, 0.80000000000000004, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=692 + VtPos(0.80000000000000004, 0.80000000000000004, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=693 + VtPos(0.80000000000000004, 0.80000000000000004, 0.15240000000000001) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $begin 'Element' + RetainedID=398 + MergedIDs(370, 398) + $end 'Element' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=360 + NumToolOperations=1 + ToolOperations(388) + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=694 + $begin 'FilletParameters' + KernelVersion=13 + PartID=361 + Edges[1: 376] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=9 + NumWires=0 + NumLoops=9 + NumCoedges=42 + NumEdges=21 + NumVertices=14 + $end 'Topology' + BodyID=-1 + StartFaceID=695 + StartEdgeID=696 + StartVertexID=700 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=695 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.78539816339744828 + FcUVMid(0.14644660940672616, 0.1464466094067263, 0.65239999999999998) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=696 + EdgeFaces(363, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672632, 0.14644660940672616, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=697 + EdgeFaces(364, 695) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0, 0.65239999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=698 + EdgeFaces(362, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.1464466094067263, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=699 + EdgeFaces(365, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.5, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=701 + VtPos(0.50000000000000011, 0, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=702 + VtPos(0.50000000000000011, 0, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=700 + VtPos(0, 0.5, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=703 + VtPos(0, 0.5, 1.1523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=690 + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=704 + $begin 'FilletParameters' + KernelVersion=13 + PartID=361 + Edges[1: 691] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=-1 + StartFaceID=705 + StartEdgeID=706 + StartVertexID=710 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=705 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.78539816339744828 + FcUVMid(0.9464466094067262, 0.94644660940672642, 0.65239999999999998) + $begin 'FcTolVts' + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=708 + EdgeFaces(362, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.9464466094067262, 0.94644660940672642, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=706 + EdgeFaces(363, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.94644660940672642, 0.9464466094067262, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=709 + EdgeFaces(366, 705) + $begin 'EdTolVts' + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(1.3, 0.80000000000000004, 0.65239999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=707 + EdgeFaces(395, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.80000000000000004, 1.3, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=710 + VtPos(1.3, 0.80000000000000004, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=713 + VtPos(1.3, 0.80000000000000004, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=711 + VtPos(0.80000000000000004, 1.3, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=712 + VtPos(0.80000000000000004, 1.3, 1.1523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=694 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=416 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='radome_height' + XSize='subX/2' + YSize='subY/2' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=417 + StartFaceID=418 + StartEdgeID=424 + StartVertexID=436 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=714 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[2: 426, 427] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=8 + NumWires=0 + NumLoops=8 + NumCoedges=34 + NumEdges=17 + NumVertices=11 + $end 'Topology' + BodyID=-1 + StartFaceID=715 + StartEdgeID=717 + StartVertexID=724 + NumNewFaces=2 + NumNewEdges=7 + NumNewVertices=6 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=716 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.9991236110428123 + FcUVMid(1.9880000000000002, 0.14644660940672616, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=1 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.998900906020622 + FcUVMid(0.14644660940672616, 1.9880000000000002, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=721 + EdgeFaces(423, 716) + $begin 'EdTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(4, 0.1464466094067263, 1.8059533905932736) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=723 + EdgeFaces(420, 716) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2, 0, 1.4523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=720 + EdgeFaces(418, 715) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 2.25, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=722 + EdgeFaces(418, 716) + $begin 'EdTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2.25, 0.50000000000000011, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=717 + EdgeFaces(422, 715) + $begin 'EdTolVts' + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 4, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=718 + EdgeFaces(421, 715) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 2, 1.4523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=719 + EdgeFaces(715, 716) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.1464466094067263, 0.1464466094067263, 1.8059533905932734) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(4, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(0.5, 0.5, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=729 + VtPos(4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=724 + VtPos(0.50000000000000011, 4, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=725 + VtPos(0, 4, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=726 + VtPos(0, 0, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=416 + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=730 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[2: 719, 432] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=42 + NumEdges=21 + NumVertices=13 + $end 'Topology' + BodyID=-1 + StartFaceID=731 + StartEdgeID=733 + StartVertexID=739 + NumNewFaces=2 + NumNewEdges=6 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=732 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.23561944901923443 + FcUVMid(0.14644660940672616, 0.14644660940672638, 1.3023999999999998) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=1 + ID=731 + $begin 'FaceGeomTopol' + FaceTopol(1, 3, 3, 3) + $begin 'FaceGeometry' + Area=0.39269908169872397 + FcUVMid(0.25000000000000006, 0.25000000000000011, 1.8059533905932736) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=736 + EdgeFaces(419, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672632, 0.14644660940672624, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=737 + EdgeFaces(420, 732) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0, 1.3023999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=738 + EdgeFaces(421, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.50000000000000011, 1.3023999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=734 + EdgeFaces(716, 731) + $begin 'EdTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0.14644660940672616, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=735 + EdgeFaces(715, 731) + $begin 'EdTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.50000000000000011, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=733 + EdgeFaces(731, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.14644660940672638, 1.4523999999999999) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=742 + VtPos(0.50000000000000011, 0, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=741 + VtPos(0, 0.50000000000000011, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=740 + VtPos(0.50000000000000011, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=739 + VtPos(0, 0.50000000000000011, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=714 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box3' + Flags='' + Color='(0 64 128)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=388 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='0cm' + XSize='radome_thick' + YSize='subY/2' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=389 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=389 + StartFaceID=390 + StartEdgeID=396 + StartVertexID=408 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2, 3, 4) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 690) + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('GeometryBodyOperation', 388) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 694) + DependencyObject('GeometryBodyOperation', 690) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 704) + DependencyObject('GeometryBodyOperation', 694) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 416) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 416) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryBodyOperation', 714) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4762) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4762) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 250, 361, 417] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('radius', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(radius='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/03_Radome_Side848.a3dcomp +BIN000000031483 +$begin 'AnsoftComponentChkSum' + ChecksumString='24f9541e0f1f67904551e94d3871e1eb' + ChecksumHistory('5d45f52a9e216e50d59e73534f9b66a5', 'bd94a6df1aa6242cafd3cf31ee7b96b6', 'cc9431f9f8a1abf4a5eba7246c4d6741', '6fede82269f5c82446e7314943f933e8', '0caa2c21ba3f444a6ee19a355fd8272a', '5ae6fe5bad977199e21f2acaa1cb71db', '12ba1933b3e5096927229ff9f3ef3af3', '8ed257867c34e79cd241f53177f868db') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='03_Radome_Side' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='9.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:11 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('radius', 'UD', '', '0.5cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=26 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=677 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_height+radome_thick+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=360 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='0cm' + ZPosition='0cm' + XSize='subX' + YSize='radome_thick' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=361 + StartFaceID=362 + StartEdgeID=368 + StartVertexID=380 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=416 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='0cm' + ZPosition='radome_height' + XSize='subX' + YSize='subY/2' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=417 + StartFaceID=418 + StartEdgeID=424 + StartVertexID=436 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=667 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[1: 427] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=7 + NumWires=0 + NumLoops=7 + NumCoedges=30 + NumEdges=15 + NumVertices=10 + $end 'Topology' + BodyID=-1 + StartFaceID=668 + StartEdgeID=669 + StartVertexID=673 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=668 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6.2831853071795871 + FcUVMid(0, 0.14644660940672616, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=669 + EdgeFaces(423, 668) + $begin 'EdTolVts' + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(4, 0.1464466094067263, 1.8059533905932736) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=670 + EdgeFaces(418, 668) + $begin 'EdTolVts' + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.50000000000000011, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=671 + EdgeFaces(421, 668) + $begin 'EdTolVts' + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-4, 0.14644660940672616, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=672 + EdgeFaces(420, 668) + $begin 'EdTolVts' + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.4523999999999999) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=674 + VtPos(4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=675 + VtPos(-4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=676 + VtPos(-4, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=673 + VtPos(4, 0, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=416 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2, 4) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 416) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 667) + DependencyObject('GeometryBodyOperation', 416) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 250, 361, 417] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('radius', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(radius='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$end 'Design_0.setup/UdmDefFiles' +$end 'AllReferencedFilesForProject' +$begin 'ProjectPreview' + IsEncrypted=false + Thumbnail64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCABgAGADASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+s/8A4KKf8FFLL9gqy+EtpafCW6+Lfi74t3Xja\ +40vS7jxtF8PfDmleHPh7F4Vj8SahqHiSPwrr1zJrban478Jx2NjHpJguIH1G4uNRs5LO2ttR/LXUv8A\ +g4l8T6Xp1/qdx+xVoLwadZXV9OkP7UWoNM0NpBJcSLEr/s1KrSFI2CgsoJIyQOa/Gj/gsh/wU78a/tC\ +ftaeJPh74b0D4eN8MP2W/GfxW+Gnw312107xFNr/ib+17rwFo/j7V/Eup/wDCVmz1S0bxb8MS+jPY2d\ +gken3224N7IyXC/i5d/Fj4xeNPF3iMw+LtS8P+CFl8N2aeHrfwn4Zl0nVbS58L6L/wlVra6xqehS34t\ +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' + $begin 'DesignInfo' + DesignName='Array' + Notes='' + Factory='HFSS' + IsSolved=false + 'Nominal Setups'[1: 'Setup1'] + 'Nominal Setup Types'[1: ''] + 'Optimetrics Setups'[0:] + 'Optimetrics Experiment Types'[0:] + Image64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiv40/2hP+Cnn/AAUA8KftEftF+DvCn7TOt\ +eHvCfgj9ob47eBvCeg2nwp/Z5v7fRfC3gn4s+MPCvhvS47/AF74PXl7f+RomkWMRnu7q4uZmiMk00kj\ +Mx+C4+8Rcj8OsHgMdnmGxWJo5jVlSgsLTpVJKUY87c1VrUUo22acnfod9SjlGA4czHiviPijBcLZHlu\ +NwOXOri6WZV3UxeY0MxxOHp0qeWZfmFS3scqxcqk6kacItU4qUpTSX9llFfw7/wDD1n/go9/0dl4i/w\ +DDPfsyf/ONo/4es/8ABR7/AKOy8Rf+Ge/Zk/8AnG1+Xf8AEz/h/wD9CvN//CfCf/N58x/rt4S/9Hfyj\ +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\ +ooooAKKKKACiiigAooooA/9k=' + $end 'DesignInfo' +$end 'ProjectPreview' diff --git a/_unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp b/_unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp similarity index 52% rename from _unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp rename to _unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp index d46a4f6a3c3..a78e60d3e73 100644 --- a/_unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp +++ b/_unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp @@ -1,25 +1,25 @@ $begin 'AnsoftComponentChkSum' - ChecksumString='f7080626955602408f5f88675d6e1add' - ChecksumHistory('67bee40a3a591b3c31eb05beb305c318') - VersionHistory('1.0') - FormatVersion=6 - Version(2022, 1) + ChecksumString='6a12cbfd15e157cadf37b8d1f78fb0a7' + ChecksumHistory('f4c81c746cee97b0fa0eca9b6026ba74', 'b76bafd4b64349f9b1bef83210e30246', '2deba8a0e7fff848e49beff26a952a82', 'b6452e22b0ea6d367603320594b474b6') + VersionHistory('1.0', '1.0', '1.0', '1.0') + FormatVersion=11 + Version(2023, 2) ComponentDefinitionType='DesignDerivedComponentDefinition' $end 'AnsoftComponentChkSum' $begin 'AnsoftComponentHeader' $begin 'Information' $begin 'ComponentInfo' - ComponentName='Circ_Patch_5GHz_hex' + ComponentName='Circ_Patch_5GHz_232' Company='' 'Company URL'='' 'Model Number'='' 'Help URL'='' - Version='1.0' + Version='2.0' Notes='' IconType='' Owner='Arien Sligar' Email='arien.sligar@ansys.com' - Date='9:39:23 AM Jun 14, 2022' + Date='9:25:10 AM Nov 06, 2023' HasLabel=false LabelImage='' $end 'ComponentInfo' @@ -27,9 +27,8 @@ $begin 'AnsoftComponentHeader' $begin 'DesignDataDescriptions' $begin 'DesignSettings' ProductName='HFSS' - SolutionType='DrivenModal' + SolutionType='HFSS Hybrid Modal Network' $begin 'DrivenOptions' - WithHybridAndArrays=true AutoOpen=false $end 'DrivenOptions' $end 'DesignSettings' @@ -48,232 +47,341 @@ LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ 3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ -Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ -gAooooAKKKKACiivPdO+Lfwp1j4h658ItJ+J3w91T4r+GNLt9c8S/DDTvGnhu9+Ifh7RLtbJ7XWNc8F\ -W2pNqWk6XKupacY7i4to4XF/CVciVNwB6FRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXyLOlt8Xvjj\ -oMfinTtI8WfBi9+HPxBuvAvhjxDo2k694Y8Sat4V134Qxy/F+yt9Tsz9o+0/8J3rejaVLLDJH/Z2gza\ -xo95NpvicvJjWq+yUbR5pTaSV7btK70bSTau7PVpdTCvW9ioWjzzqSUUr23aV27NqKbSbs9Wl1PpfxP\ -4w8I+CbCHVfGfinw54R0u4vI9Pg1LxPremaBYT38sNxcxWMN5qt1FHLeNb2l1IsSsXZLaRgpVGI4X/h\ -fnwXm/daR8TPCHivUG/499A8B6vB8QfFd/t+aX+yvCHgg6hqmr+VAJZp/stpN9ntraa6m8u3hmlTo/D\ -Hwu+Gfgm/m1XwZ8O/AvhHVLizk0+fUvDHhHw/oF/PYSzW9zLYzXmlafFJLZtcWlrI0TMUZ7aNipZFI7\ -qi1d680IeVpS/G8P8A0kdsQ9eaFPytKf8A5NzQ/wDSTyL/AIXb4N/6Avxd/wDEfvj1/wDO2o/4WT4y/\ -wCjfvi7/wCDr4C//Ptr12ijkqv4q1rfyRS+/m5/la3W99LL2daXxV+W38kUvv5/afK1ut76W8i/4SD4\ -43H+kWfwv+HNrZz/AL60tvEHxj12w163tpfngg1ux0H4OarY2erpEyLcxWWp6laRzK6W9/eQhLiQ+xf\ -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\ -FFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z' +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' $end 'Preview' ContainsLightweightGeometry=false $end 'AnsoftComponentHeader' @@ -288,7 +396,7 @@ $begin 'ComponentBody' 'Allow Material Override'=true IncludeTemperatureDependence=false EnableFeedback=false - Temperatures(114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 996, '22cel', 1043, '22cel', 1084, '22cel') + Temperatures(6, '22cel', 34, '22cel', 114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 952, '22cel') ObjsEnabledForDeformation() $end 'DesignSettings' $begin 'DCThickness' @@ -302,335 +410,234 @@ $begin 'ComponentBody' ParentBndID=-1 InfGroundPlane=false $end 'antennaMetal_2' - $begin 'coax_outer_2' - ID=7 + $begin 'groundMetal' + ID=4 BoundType='Perfect E' IsComponent=false - Faces(288) + Objects(34) ParentBndID=-1 InfGroundPlane=false - $end 'coax_outer_2' - $begin 'PerfE1' - ID=27 + $end 'groundMetal' + $begin 'coax_outer_2' + ID=7 BoundType='Perfect E' IsComponent=false - Objects(1084) + Faces(288) ParentBndID=-1 InfGroundPlane=false - $end 'PerfE1' + $end 'coax_outer_2' $begin 'Rad1' - ID=28 + ID=21 BoundType='Radiation' IsComponent=false - Faces(1004) + Faces(953) ParentBndID=-1 UseAdaptiveIE=false IsFssReference=false IsForPML=false $end 'Rad1' $begin 'Primary1' - ID=29 + ID=22 BoundType='Primary' IsComponent=false - Faces(1006) + Faces(957) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1038 - ParentIDs(1020, 1024, 1019) + EntityID=975 + ParentIDs(970, 966, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' + XPosition='17.645' + YPosition='17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1006 + uvpos_v=1 + uvpos_id=957 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1035 - ParentIDs(1016, 1024, 1017) + EntityID=972 + ParentIDs(960, 959, 970) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='38.728' + XPosition='17.645' + YPosition='17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=1 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1006 + uvpos_v=1 + uvpos_id=957 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=false $end 'Primary1' $begin 'Secondary1' - ID=30 + ID=23 BoundType='Secondary' IsComponent=false - Faces(1009) + Faces(955) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1040 - ParentIDs(1022, 1027, 1021) + EntityID=976 + ParentIDs(968, 964, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='-20.5' - YPosition='1.77635683940025e-15' + XPosition='17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=1 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1009 + uvpos_v=1 + uvpos_id=955 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1033 - ParentIDs(1014, 1027, 1015) + EntityID=971 + ParentIDs(962, 959, 968) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='-20.5' - YPosition='1.77635683940025e-15' - ZPosition='38.728' + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1009 + uvpos_v=1 + uvpos_id=955 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=true - primary=29 + primary=22 PhaseDelay='UseScanAngle' Phi='0deg' Theta='0deg' Phase='0deg' $end 'Secondary1' $begin 'Primary2' - ID=31 + ID=24 BoundType='Primary' IsComponent=false - Faces(1011) + Faces(958) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1037 - ParentIDs(1025, 1018, 1019) + EntityID=976 + ParentIDs(968, 964, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='20.5' - YPosition='-1.77635683940025e-15' + XPosition='17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0 + uvpos_u=1 uvpos_v=0 - uvpos_id=1011 + uvpos_id=958 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1030 - ParentIDs(1012, 1025, 1017) + EntityID=971 + ParentIDs(962, 959, 968) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='20.5' - YPosition='-1.77635683940025e-15' - ZPosition='38.728' + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=1 + uvpos_u=0 uvpos_v=0 - uvpos_id=1011 + uvpos_id=958 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=false $end 'Primary2' $begin 'Secondary2' - ID=32 + ID=25 BoundType='Secondary' IsComponent=false - Faces(1008) - ParentBndID=-1 - $begin 'CoordSysVector' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1039 - ParentIDs(1021, 1026, 1020) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='-10.25' - YPosition='-17.753520777581' - ZPosition='-1.272' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 - uvpos_v=-8.6651553141475635e-17 - uvpos_id=1008 - $end 'uv_block_name' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1034 - ParentIDs(1015, 1026, 1016) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='-10.25' - YPosition='-17.753520777581' - ZPosition='38.728' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=0 - uvpos_v=-8.6651553141475635e-17 - uvpos_id=1008 - $end 'uv_block_name' - $end 'CoordSysVector' - ReverseV=true - primary=31 - PhaseDelay='UseScanAngle' - Phi='0deg' - Theta='0deg' - Phase='0deg' - $end 'Secondary2' - $begin 'Primary3' - ID=33 - BoundType='Primary' - IsComponent=false - Faces(1010) + Faces(956) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1036 - ParentIDs(1018, 1029, 1023) + EntityID=977 + ParentIDs(967, 965, 964) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='17.753520777581' + XPosition='-17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475635e-17 - uvpos_id=1010 - $end 'uv_block_name' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1031 - ParentIDs(1012, 1029, 1013) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='10.25' - YPosition='17.753520777581' - ZPosition='38.728' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 - uvpos_v=8.6651553141475635e-17 - uvpos_id=1010 - $end 'uv_block_name' - $end 'CoordSysVector' - ReverseV=false - $end 'Primary3' - $begin 'Secondary3' - ID=34 - BoundType='Secondary' - IsComponent=false - Faces(1007) - ParentBndID=-1 - $begin 'CoordSysVector' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1038 - ParentIDs(1020, 1024, 1019) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='-1.272' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 uvpos_v=0 - uvpos_id=1007 + uvpos_id=956 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1035 - ParentIDs(1016, 1024, 1017) + EntityID=974 + ParentIDs(962, 961, 967) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='38.728' + XPosition='-17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0 + uvpos_u=1 uvpos_v=0 - uvpos_id=1007 + uvpos_id=956 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=true - primary=33 + primary=24 PhaseDelay='UseScanAngle' Phi='0deg' Theta='0deg' Phase='0deg' - $end 'Secondary3' + $end 'Secondary2' $end 'Boundaries' $begin 'Excitations' $begin '1' @@ -638,13 +645,13 @@ $begin 'ComponentBody' BoundType='Wave Port' IsComponent=false Faces(289) + WavePortType='Modal' NumModes=1 PECCapPartID=-1 UseLineModeAlignment=false DoDeembed=false DeembedDist='0mm' ParentBndID=-1 - RenormalizeAllTerminals=true $begin 'Modes' $begin 'Mode1' ModeNum=1 @@ -652,12 +659,12 @@ $begin 'ComponentBody' $begin 'IntLine' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=293 - ParentIDs(291) + EntityID=291 FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true - PositionType='OnVertex' + closedU=true + PositionType='OnEdge' UParam=0 VParam=0 XPosition='-3.19117290349489' @@ -665,18 +672,18 @@ $begin 'ComponentBody' ZPosition='-3.772' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0.14644660940672569 - uvpos_v=0.5 + uvpos_u=0.0059288537549406911 + uvpos_v=0.49999999999999989 uvpos_id=289 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=258 - ParentIDs(256) + EntityID=256 FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true - PositionType='OnVertex' + closedU=true + PositionType='OnEdge' UParam=0 VParam=0 XPosition='-2.76690883478296' @@ -684,8 +691,8 @@ $begin 'ComponentBody' ZPosition='-3.772' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0.39601370864903718 - uvpos_v=0.49999999999999906 + uvpos_u=0.35468495698674718 + uvpos_v=0.5 uvpos_id=289 $end 'uv_block_name' $end 'IntLine' @@ -693,9 +700,9 @@ $begin 'ComponentBody' CharImp='Zpi' $end 'Mode1' $end 'Modes' + UseAnalyticAlignment=false ShowReporterFilter=false ReporterFilter(true) - UseAnalyticAlignment=false $end '1' $end 'Excitations' $begin 'Circuit Elements' @@ -792,34 +799,40 @@ $begin 'ComponentBody' $begin 'GeometryData' $begin 'Variables' $begin 'LocalVariables' - VariableProp('Ln', 'UD', '', '1.502mm') - VariableProp('Wn', 'UD', '', '3.004mm') - VariableProp('alpha', 'UD', '', '45deg') + VariableProp('beta2', 'UD', '', '-90deg') + VariableProp('beta4', 'UD', '', '-270deg') VariableProp('Sy', 'UD', '', '35.29mm') - VariableProp('Sf', 'UD', '', '3.663mm') - VariableProp('coax_inner_rad', 'UD', '', '0.25mm') - VariableProp('Sx', 'UD', '', '35.29mm') + VariableProp('subWidth', 'UD', '', '80mm') + VariableProp('Wn', 'UD', '', '3.004mm') VariableProp('Dp', 'UD', '', '23.53mm') + VariableProp('Ln', 'UD', '', '1.502mm') VariableProp('feedLength', 'UD', '', '2.5mm') - VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('subLength', 'UD', '', '80mm') + VariableProp('coax_inner_rad', 'UD', '', '0.25mm') VariableProp('coax_outer_rad', 'UD', '', '0.85mm') + VariableProp('Sf', 'UD', '', '3.663mm') + VariableProp('Sx', 'UD', '', '35.29mm') VariableProp('H', 'UD', '', '1.272mm') + VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('alpha', 'UD', '', '45deg') $end 'LocalVariables' $end 'Variables' $begin 'Datasets' $end 'Datasets' $begin 'GeometryCore' BlockVersionID=3 - DataVersion=5 - NativeKernel='ACIS' - NativeKernelVersionID=13 + DataVersion=7 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 Units='mm' + ModelExtents=10000 InstanceID=-1 $begin 'ValidationOptions' EntityCheckLevel='Strict' IgnoreUnclassifiedObjects=false SkipIntersectionChecks=false $end 'ValidationOptions' + ContainsGeomLinkUDM=false $begin 'GeometryOperations' BlockVersionID=2 $begin 'AnsoftRangedIDServerManager' @@ -827,7 +840,7 @@ $begin 'ComponentBody' IDServerObjectTypeID=0 IDServerRangeMin=0 IDServerRangeMax=2146483647 - NextUniqueID=1107 + NextUniqueID=979 MoveBackwards=false $end 'AnsoftRangedIDServer' $begin 'AnsoftRangedIDServer' @@ -877,18 +890,19 @@ $begin 'ComponentBody' $begin 'ToplevelParts' $begin 'GeometryPart' $begin 'Attributes' - Name='Circle_2' + Name='Soil' Flags='' - Color='(255 128 65)' + Color='(0 128 0)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='"Teflon (tm)"' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -896,226 +910,337 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='DuplicateBodyAroundAxis' - ID=113 - $begin 'CloneFromParameters' - KernelVersion=13 - SourceID=46 - WhichClone=0 - $end 'CloneFromParameters' - ParentPartID=114 - ReferenceUDMID=-1 - IsSuppressed=false - $begin 'OperationIdentity' - $begin 'Topology' - NumLumps=1 - NumShells=1 - NumFaces=1 - NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 - NumVertices=8 - $end 'Topology' - BodyID=114 - StartFaceID=115 - StartEdgeID=116 - StartVertexID=124 - NumNewFaces=1 - NumNewEdges=8 - NumNewVertices=8 - FaceNameAndIDMap() - EdgeNameAndIDMap() - VertexNameAndIDMap() - $begin 'CloneFromOperationIdentityHelper' - CloneFaces('50'='115') - CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') - CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') - CloneIdentityHelperKernelType=0 - $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(50) - OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) - OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) - $end 'OperationIdentity' - PlaceHolderOpnId=112 - $end 'Operation' - $begin 'Operation' - OperationType='Move' - ID=154 + OperationType='Box' + ID=5 ReferenceCoordSystemID=1 - $begin 'TranslateParameters' + $begin 'BoxParameters' KernelVersion=13 - TargetID=114 - TranslateVectorX='-Sx/2' - TranslateVectorY='-Sy/2' - TranslateVectorZ='0' - $end 'TranslateParameters' - ParentPartID=114 + XPosition='-subWidth/2' + YPosition='-subLength/2' + ZPosition='0mm' + XSize='subWidth' + YSize='subLength' + ZSize='H' + $end 'BoxParameters' + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' - BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=113 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=448 + ID=428 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=449 + ID=429 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=430 + StartEdgeID=431 + StartVertexID=435 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=430 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=101.76000000000001 + FcUVMid(0, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=433 + EdgeFaces(7, 430) + $begin 'EdTolVts' + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=434 + EdgeFaces(9, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=432 + EdgeFaces(11, 430) + $begin 'EdTolVts' + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=431 + EdgeFaces(8, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=435 + VtPos(0, -40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=438 + VtPos(0, -40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=437 + VtPos(0, 40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=436 + VtPos(0, 40, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=448 - ParentOperation=154 + SplitToOperation=428 + ParentOperation=5 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=510 + ID=492 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=511 + ID=493 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=494 + StartEdgeID=495 + StartVertexID=499 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' - $end 'NewFaces' - $begin 'NewEdges' - $end 'NewEdges' - $begin 'NewVertices' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'Face' + NormalizedSerialNum=0 + ID=494 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000003 + FcUVMid(-20, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=498 + EdgeFaces(7, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=497 + EdgeFaces(10, 494) + $begin 'EdTolVts' + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-40, 0, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=496 + EdgeFaces(8, 494) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=495 + EdgeFaces(430, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=499 + VtPos(0, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=502 + VtPos(-40, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=501 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=500 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=510 - ParentOperation=449 + SplitToOperation=492 + ParentOperation=429 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=590 + ID=588 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=114 + TargetID=6 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 @@ -1129,140 +1254,295 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=511 + TranformBaseOperationID=493 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=729 + ID=713 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=730 + ID=714 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=715 + StartEdgeID=716 + StartVertexID=720 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000038 + FcUVMid(-2.3550000000000044, -17.645, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=719 + EdgeFaces(7, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=716 + EdgeFaces(10, 715) + $begin 'EdTolVts' + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-22.355, -17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=717 + EdgeFaces(8, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000044, -17.645, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=718 + EdgeFaces(430, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(17.645, -17.645, -0.63600000000000001) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=722 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=720 + VtPos(-22.355, -17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=721 + VtPos(-22.355000000000008, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=723 + VtPos(17.645, -17.645, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=729 - ParentOperation=590 + SplitToOperation=713 + ParentOperation=588 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=757 + ID=741 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=758 + ID=742 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=743 + StartEdgeID=744 + StartVertexID=748 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=743 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=44.888880000000029 + FcUVMid(-17.645, 0, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=745 + EdgeFaces(7, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=747 + EdgeFaces(8, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=746 + EdgeFaces(494, 743) + $begin 'EdTolVts' + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=744 + EdgeFaces(715, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, -17.645, -0.63600000000000045) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=748 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=750 + VtPos(-17.645, 17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=751 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=749 + VtPos(-17.645, -17.645, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=757 - ParentOperation=730 + SplitToOperation=741 + ParentOperation=714 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='FeedPin_2' + Name='Ground' Flags='' Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='"vacuum"' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -1270,129 +1550,229 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='DuplicateBodyAroundAxis' - ID=216 - $begin 'CloneFromParameters' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' KernelVersion=13 - SourceID=157 - WhichClone=0 - $end 'CloneFromParameters' - ParentPartID=217 + XStart='-subWidth/2' + YStart='-subLength/2' + ZStart='0mm' + Width='subWidth' + Height='subLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 $end 'Topology' - BodyID=217 - StartFaceID=218 - StartEdgeID=221 - StartVertexID=223 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'CloneFromOperationIdentityHelper' - CloneFaces('158'='218', '159'='219', '160'='220') - CloneEdges('161'='221', '162'='222') - CloneVertices('163'='223', '164'='224') - CloneIdentityHelperKernelType=0 - $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(158, 159, 160) - OriginalEdgeIDs(161, 162) - OriginalVertexIDs(163, 164) $end 'OperationIdentity' - PlaceHolderOpnId=215 $end 'Operation' $begin 'Operation' - OperationType='Move' - ID=237 - ReferenceCoordSystemID=1 - $begin 'TranslateParameters' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' KernelVersion=13 - TargetID=217 - TranslateVectorX='-Sx/2' - TranslateVectorY='-Sy/2' - TranslateVectorZ='0' - $end 'TranslateParameters' - ParentPartID=217 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 + NumLoops=1 NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumEdges=4 + NumVertices=4 $end 'Topology' BodyID=-1 - StartFaceID=-1 + StartFaceID=44 StartEdgeID=-1 StartVertexID=-1 - NumNewFaces=0 + NumNewFaces=1 NumNewEdges=0 NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $end 'OperationIdentity' - TranformBaseOperationID=216 - $end 'Operation' - $begin 'Operation' - OperationType='Split' - ID=464 + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6400.0000000000009 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-40, -40, 0, 4.9999999999999998e-07) + TolVt(40, -40, 0, 4.9999999999999998e-07) + TolVt(40, 40, 0, 4.9999999999999998e-07) + TolVt(-40, 40, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=390 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=34 + NumToolParts=4 + ToolParts(199, 370, 376, 382) + $end 'SubtractParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=5 + NumCoedges=8 + NumEdges=8 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=391 + StartVertexID=395 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=391 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(15.65590862452224, -15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=392 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-19.634091375477759, -19.634091375477759, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=393 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-15.65590862452224, 15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=394 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(19.634091375477759, 19.634091375477759, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=43 + NumToolOperations=4 + ToolOperations(386, 387, 388, 389) + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=439 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=465 + ID=440 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=3 + NumCoedges=6 + NumEdges=6 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=441 + StartVertexID=442 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1400,57 +1780,77 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=441 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=443 + VtPos(0, 40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=442 + VtPos(0, -40, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=464 - ParentOperation=237 + SplitToOperation=439 + ParentOperation=390 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=514 + ID=503 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=515 + ID=504 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=505 + StartVertexID=506 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1458,39 +1858,59 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=505 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=507 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=506 + VtPos(0, 0, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=514 - ParentOperation=465 + SplitToOperation=503 + ParentOperation=440 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=591 + ID=589 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=217 + TargetID=34 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1503,50 +1923,50 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=515 + TranformBaseOperationID=504 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=731 + ID=724 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=732 + ID=725 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=726 + StartVertexID=727 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1554,57 +1974,77 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=726 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-22.355, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, -1.272) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(-22.355, -17.645, -1.272) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=731 - ParentOperation=591 + SplitToOperation=724 + ParentOperation=589 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=759 + ID=752 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=760 + ID=753 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=754 + StartVertexID=755 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1612,31 +2052,52 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=754 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=755 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=756 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=759 - ParentOperation=732 + SplitToOperation=752 + ParentOperation=725 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_pin_2' + Name='Circle_2' Flags='' Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='"vacuum"' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -1645,72 +2106,72 @@ $begin 'ComponentBody' $begin 'Operations' $begin 'Operation' OperationType='DuplicateBodyAroundAxis' - ID=251 + ID=113 $begin 'CloneFromParameters' KernelVersion=13 - SourceID=166 + SourceID=46 WhichClone=0 $end 'CloneFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' - BodyID=252 - StartFaceID=253 - StartEdgeID=256 - StartVertexID=258 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=114 + StartFaceID=115 + StartEdgeID=116 + StartVertexID=124 + NumNewFaces=1 + NumNewEdges=8 + NumNewVertices=8 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'CloneFromOperationIdentityHelper' - CloneFaces('167'='253', '168'='254', '169'='255') - CloneEdges('170'='256', '171'='257') - CloneVertices('172'='258', '173'='259') - CloneIdentityHelperKernelType=0 + CloneFaces('50'='115') + CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') + CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') + CloneIdentityHelperKernelType=0 $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(167, 168, 169) - OriginalEdgeIDs(170, 171) - OriginalVertexIDs(172, 173) + OriginalFaceIDs(50) + OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) + OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) $end 'OperationIdentity' - PlaceHolderOpnId=250 + PlaceHolderOpnId=112 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=272 + ID=154 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=252 + TargetID=114 TranslateVectorX='-Sx/2' TranslateVectorY='-Sy/2' TranslateVectorZ='0' $end 'TranslateParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1723,42 +2184,42 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=251 + TranformBaseOperationID=113 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=470 + ID=448 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=471 + ID=449 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1780,43 +2241,43 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=470 - ParentOperation=272 + SplitToOperation=448 + ParentOperation=154 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=518 + ID=510 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=519 + ID=511 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1838,33 +2299,33 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=518 - ParentOperation=471 + SplitToOperation=510 + ParentOperation=449 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=592 + ID=590 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=252 + TargetID=114 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1877,42 +2338,42 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=519 + TranformBaseOperationID=511 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=733 + ID=729 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=734 + ID=730 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1934,43 +2395,43 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=733 - ParentOperation=592 + SplitToOperation=729 + ParentOperation=590 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=761 + ID=757 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=762 + ID=758 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1992,25 +2453,26 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=761 - ParentOperation=734 + SplitToOperation=757 + ParentOperation=730 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_2' + Name='FeedPin_2' Flags='' - Color='(128 255 255)' + Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"Teflon (tm)"' + MaterialValue='"pec"' SurfaceMaterialValue='""' - SolveInside=true + SolveInside=false ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2019,13 +2481,13 @@ $begin 'ComponentBody' $begin 'Operations' $begin 'Operation' OperationType='DuplicateBodyAroundAxis' - ID=286 + ID=216 $begin 'CloneFromParameters' KernelVersion=13 - SourceID=175 + SourceID=157 WhichClone=0 $end 'CloneFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2037,42 +2499,42 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' - BodyID=287 - StartFaceID=288 - StartEdgeID=291 - StartVertexID=293 + BodyID=217 + StartFaceID=218 + StartEdgeID=221 + StartVertexID=-1 NumNewFaces=3 NumNewEdges=2 - NumNewVertices=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'CloneFromOperationIdentityHelper' - CloneFaces('176'='288', '177'='289', '178'='290') - CloneEdges('179'='291', '180'='292') - CloneVertices('181'='293', '182'='294') + CloneFaces('158'='218', '159'='219', '160'='220') + CloneEdges('161'='221', '162'='222') + CloneVertices('163'='223', '164'='224') CloneIdentityHelperKernelType=0 $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(176, 177, 178) - OriginalEdgeIDs(179, 180) - OriginalVertexIDs(181, 182) + OriginalFaceIDs(158, 159, 160) + OriginalEdgeIDs(161, 162) + OriginalVertexIDs() $end 'OperationIdentity' - PlaceHolderOpnId=285 + PlaceHolderOpnId=215 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=307 + ID=237 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=287 + TargetID=217 TranslateVectorX='-Sx/2' TranslateVectorY='-Sy/2' TranslateVectorZ='0' $end 'TranslateParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2084,7 +2546,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2097,30 +2559,30 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=286 + TranformBaseOperationID=216 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=476 + ID=464 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=477 + ID=465 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2132,7 +2594,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2154,31 +2616,31 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=476 - ParentOperation=307 + SplitToOperation=464 + ParentOperation=237 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=522 + ID=514 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=523 + ID=515 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2190,7 +2652,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2212,21 +2674,21 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=522 - ParentOperation=477 + SplitToOperation=514 + ParentOperation=465 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=593 + ID=591 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=287 + TargetID=217 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2238,7 +2700,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2251,30 +2713,30 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=523 + TranformBaseOperationID=515 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=735 + ID=731 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=736 + ID=732 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2286,7 +2748,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2308,31 +2770,31 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=735 - ParentOperation=593 + SplitToOperation=731 + ParentOperation=591 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=763 + ID=759 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=764 + ID=760 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2344,7 +2806,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2366,36 +2828,26 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=763 - ParentOperation=736 + SplitToOperation=759 + ParentOperation=732 $end 'Operation' - $begin 'BodyFromFaceToOperation' - OperationType='BodyFromFace' - ID=1098 - $begin 'BodyFromFaceToParameters' - KernelVersion=13 - LocalOpPart=287 - FacesToDetach[1: 290] - $end 'BodyFromFaceToParameters' - ParentPartID=287 - ReferenceUDMID=-1 - $end 'BodyFromFaceToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='Cylinder1' - Flags='Wireframe#' - Color='(143 175 143)' - Transparency=0 + Name='coax_pin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='"pec"' SurfaceMaterialValue='""' - SolveInside=true + SolveInside=false ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2403,323 +2855,187 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=995 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=251 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='0mm' - YCenter='0mm' - ZCenter='-1.272mm' - Radius='20.5mm' - Height='40mm' - WhichAxis='Z' - NumSides='6' - $end 'CylinderParameters' - ParentPartID=996 + SourceID=166 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=8 + NumFaces=3 NumWires=0 - NumLoops=8 - NumCoedges=36 - NumEdges=18 - NumVertices=12 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=996 - StartFaceID=1004 - StartEdgeID=1012 - StartVertexID=1030 - NumNewFaces=8 - NumNewEdges=18 - NumNewVertices=12 + BodyID=252 + StartFaceID=253 + StartEdgeID=256 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('167'='253', '168'='254', '169'='255') + CloneEdges('170'='256', '171'='257') + CloneVertices('172'='258', '173'='259') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(167, 168, 169) + OriginalEdgeIDs(170, 171) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=250 $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='sub' - Flags='' - Color='(143 175 143)' - Transparency=0 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"Teflon (tm)"' - SurfaceMaterialValue='""' - SolveInside=true - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=1042 + OperationType='Move' + ID=272 ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + $begin 'TranslateParameters' KernelVersion=13 - XCenter='0mm' - YCenter='0mm' - ZCenter='-1.272mm' - Radius='20.5mm' - Height='H' - WhichAxis='Z' - NumSides='6' - $end 'CylinderParameters' - ParentPartID=1043 + TargetID=252 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=8 + NumFaces=3 NumWires=0 - NumLoops=8 - NumCoedges=36 - NumEdges=18 - NumVertices=12 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=1043 - StartFaceID=1044 - StartEdgeID=1052 - StartVertexID=1070 - NumNewFaces=8 - NumNewEdges=18 - NumNewVertices=12 + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' + TranformBaseOperationID=251 $end 'Operation' - $begin 'BodyFromFaceToOperation' - OperationType='BodyFromFace' - ID=1082 - $begin 'BodyFromFaceToParameters' + $begin 'Operation' + OperationType='Split' + ID=470 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' KernelVersion=13 - LocalOpPart=1043 - FacesToDetach[1: 1045] - $end 'BodyFromFaceToParameters' - ParentPartID=1043 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 ReferenceUDMID=-1 - $end 'BodyFromFaceToOperation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='sub_ObjectFromFace1' - Flags='' - Color='(143 175 143)' - Transparency=0 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"Teflon (tm)"' - SurfaceMaterialValue='""' - SolveInside=true - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' + $end 'Operation' $begin 'Operation' - OperationType='BodyFromFaceFrom' - ID=1083 - $begin 'BodyFromFaceFromParameters' - KernelVersion=13 - WhichFace=0 - $end 'BodyFromFaceFromParameters' - ParentPartID=1084 + OperationType='SplitEdit' + ID=471 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 - NumCoedges=6 - NumEdges=6 - NumVertices=6 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=1084 - StartFaceID=1085 - StartEdgeID=1086 - StartVertexID=1092 - NumNewFaces=1 - NumNewEdges=6 - NumNewVertices=6 + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=1085 - $begin 'FaceGeomTopol' - FaceTopol(1, 6, 6, 6) - $begin 'FaceGeometry' - Area=1091.841527821231 - FcUVMid(8.8817841970012513e-16, -1.5383701491068513e-15, -1.272) - $begin 'FcTolVts' - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - TolVt(-10.25, -17.753520777580992, -1.272, 0) - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' $end 'NewFaces' $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1086 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(15.375, 8.876760388790494, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=1 - ID=1087 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(15.374999999999996, -8.8767603887904993, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=2 - ID=1088 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - TolVt(-10.25, -17.753520777580992, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-2.6645352591003757e-15, -17.753520777580992, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=3 - ID=1089 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-10.25, -17.753520777580992, -1.272, 0) - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-15.375, -8.876760388790494, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=4 - ID=1090 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-15.375, 8.8767603887904993, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=5 - ID=1091 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(2.6645352591003757e-15, 17.753520777580992, -1.272) - $end 'Edge' $end 'NewEdges' $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1092 - VtPos(10.250000000000002, 17.753520777580988, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=1 - ID=1093 - VtPos(20.5, -1.7763568394002505e-15, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=2 - ID=1094 - VtPos(10.249999999999995, -17.753520777580999, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=3 - ID=1095 - VtPos(-10.25, -17.753520777580992, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=4 - ID=1096 - VtPos(-20.5, 1.7763568394002505e-15, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=5 - ID=1097 - VtPos(-10.249999999999996, 17.753520777580995, -1.272) - $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - BodyFromFaceToOpnId=1082 - SourceOperationID=1042 + SplitFromOperation=-1 + SplitToOperation=470 + ParentOperation=272 $end 'Operation' $begin 'Operation' - OperationType='Substract' - ID=1104 - $begin 'SubtractParameters' + OperationType='Split' + ID=518 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' KernelVersion=13 - KeepOriginals=false - BlankPart=1084 - NumToolParts=1 - ToolParts(1100) - $end 'SubtractParameters' - ParentPartID=1084 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=519 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=2 - NumCoedges=7 - NumEdges=7 - NumVertices=7 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=1105 - StartVertexID=1106 + StartEdgeID=-1 + StartVertexID=-1 NumNewFaces=0 - NumNewEdges=1 - NumNewVertices=1 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -2727,51 +3043,929 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1105 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-1.9890913754777564, -1.9890913754777597, -1.272) - $end 'Edge' $end 'NewEdges' $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1106 - VtPos(-3.1911729034948877, -3.1911729034948912, -1.272) - $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' - $begin 'MergedFaces' - $end 'MergedFaces' - $begin 'MergedEdges' - $end 'MergedEdges' $end 'OperationIdentity' - BlankOperation=1083 - NumToolOperations=1 - ToolOperations(1099) + SplitFromOperation=-1 + SplitToOperation=518 + ParentOperation=471 $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $end 'ToplevelParts' - $begin 'OperandParts' - $begin 'GeometryPart' - $begin 'Attributes' + $begin 'Operation' + OperationType='Move' + ID=592 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=519 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=733 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=734 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=733 + ParentOperation=592 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=761 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=762 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=761 + ParentOperation=734 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_2' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=286 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=175 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=287 + StartFaceID=288 + StartEdgeID=291 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('176'='288', '177'='289', '178'='290') + CloneEdges('179'='291', '180'='292') + CloneVertices('181'='293', '182'='294') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(176, 177, 178) + OriginalEdgeIDs(179, 180) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=285 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=307 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=286 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=476 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=477 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=476 + ParentOperation=307 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=522 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=523 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=522 + ParentOperation=477 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=593 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=523 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=735 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=736 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=735 + ParentOperation=593 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=763 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=764 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=763 + ParentOperation=736 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=951 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-17.645mm' + YPosition='17.645mm' + ZPosition='-1.272mm' + XSize='35.29mm' + YSize='-35.29mm' + ZSize='30mm+H' + $end 'BoxParameters' + ParentPartID=952 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=952 + StartFaceID=953 + StartEdgeID=959 + StartVertexID=971 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' Name='Circle_0' Flags='' - Color='(255 128 65)' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='0' + YCenter='0' + ZCenter='H' + Radius='Dp/2' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=48 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=49 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=50 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=50 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=434.84425400497821 + FcUVMid(0, 0, 1.272) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=75 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=2 + ToolParts(52, 64) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=76 + StartVertexID=84 + NumNewFaces=0 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=78 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=77 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=76 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=80 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=81 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=82 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=83 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(7.2039847959843046e-16, 11.765000000000001, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=7 + ID=79 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=86 + VtPos(-10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=85 + VtPos(-10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=87 + VtPos(-11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=84 + VtPos(-11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=89 + VtPos(10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=90 + VtPos(10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=6 + ID=88 + VtPos(11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=7 + ID=91 + VtPos(11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=49 + NumToolOperations=2 + ToolOperations(61, 73) + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=112 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=46 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=46 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_LXHI3Y' + Flags='' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='""' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2779,19 +3973,140 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Circle' - ID=45 + OperationType='Rectangle' + ID=51 ReferenceCoordSystemID=1 - $begin 'CircleParameters' + $begin 'RectangleParameters' KernelVersion=13 - XCenter='0' - YCenter='0' - ZCenter='H' - Radius='Dp/2' + XStart='Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='-Ln' + Height='Wn' WhichAxis='Z' - NumSegments='0' - $end 'CircleParameters' - ParentPartID=46 + $end 'RectangleParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=52 + StartFaceID=-1 + StartEdgeID=53 + StartVertexID=57 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=61 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=52 + $end 'LocalOperationParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=62 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=51 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_0TW2OL' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=63 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=64 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2801,17 +4116,17 @@ $begin 'ComponentBody' NumFaces=0 NumWires=1 NumLoops=0 - NumCoedges=1 - NumEdges=1 - NumVertices=1 + NumCoedges=0 + NumEdges=4 + NumVertices=4 $end 'Topology' - BodyID=46 + BodyID=64 StartFaceID=-1 - StartEdgeID=47 - StartVertexID=48 + StartEdgeID=65 + StartVertexID=69 NumNewFaces=0 - NumNewEdges=1 - NumNewVertices=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -2819,12 +4134,12 @@ $begin 'ComponentBody' $end 'Operation' $begin 'Operation' OperationType='CoverLines' - ID=49 + ID=73 $begin 'LocalOperationParameters' KernelVersion=13 - LocalOpPart=46 + LocalOpPart=64 $end 'LocalOperationParameters' - ParentPartID=46 + ParentPartID=64 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2834,12 +4149,12 @@ $begin 'ComponentBody' NumFaces=1 NumWires=0 NumLoops=1 - NumCoedges=1 - NumEdges=1 - NumVertices=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 $end 'Topology' BodyID=-1 - StartFaceID=50 + StartFaceID=74 StartEdgeID=-1 StartVertexID=-1 NumNewFaces=1 @@ -2852,14 +4167,17 @@ $begin 'ComponentBody' $begin 'NewFaces' $begin 'Face' NormalizedSerialNum=0 - ID=50 + ID=74 $begin 'FaceGeomTopol' - FaceTopol(1, 1, 1, 1) + FaceTopol(1, 4, 4, 4) $begin 'FaceGeometry' - Area=434.84425400497832 - FcUVMid(-8.8817841970012523e-16, -8.8817841970012523e-16, 1.272) + Area=4.5120080000000016 + FcUVMid(-11.013999999999999, 0, 1.272) $begin 'FcTolVts' - TolVt(11.765000000000001, 0, 1.272, 0) + TolVt(-11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) $end 'FcTolVts' $end 'FaceGeometry' $end 'FaceGeomTopol' @@ -2871,210 +4189,255 @@ $begin 'ComponentBody' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=45 + ParentOperationID=63 $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' $begin 'Operation' - OperationType='Substract' - ID=75 - $begin 'SubtractParameters' + OperationType='Cylinder' + ID=156 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' KernelVersion=13 - KeepOriginals=false - BlankPart=46 - NumToolParts=2 - ToolParts(52, 64) - $end 'SubtractParameters' - ParentPartID=46 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='H' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=157 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 - NumVertices=8 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=157 + StartFaceID=158 + StartEdgeID=161 + StartVertexID=163 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=204 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=157 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=76 - StartVertexID=84 + StartEdgeID=-1 + StartVertexID=-1 NumNewFaces=0 - NumNewEdges=8 - NumNewVertices=8 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=156 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=215 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=157 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=157 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=165 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=166 + StartFaceID=167 + StartEdgeID=170 + StartVertexID=172 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $end 'NewFaces' - $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=76 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-11.668728336884017, 1.502, 1.272, 0) - TolVt(-10.263, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.965864168442009, 1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=1 - ID=77 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-10.263, 1.502, 1.272, 0) - TolVt(-10.263, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.263, 0, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=2 - ID=78 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-10.263, -1.502, 1.272, 0) - TolVt(-11.668728336884017, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.965864168442009, -1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=3 - ID=79 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-11.668728336884017, -1.502, 1.272, 0) - TolVt(11.668728336884017, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=4 - ID=80 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(11.668728336884017, -1.502, 1.272, 0) - TolVt(10.263, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.965864168442009, -1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=5 - ID=81 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(10.263, -1.502, 1.272, 0) - TolVt(10.263, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.263, 0, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=6 - ID=82 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(10.263, 1.502, 1.272, 0) - TolVt(11.668728336884017, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.965864168442009, 1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=7 - ID=83 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(11.668728336884017, 1.502, 1.272, 0) - TolVt(-11.668728336884017, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(3.3327532565414241e-15, 11.765000000000001, 1.272) - $end 'Edge' - $end 'NewEdges' - $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=84 - VtPos(-11.668728336884017, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=1 - ID=85 - VtPos(-10.263, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=2 - ID=86 - VtPos(-10.263, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=3 - ID=87 - VtPos(-11.668728336884017, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=4 - ID=88 - VtPos(11.668728336884017, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=5 - ID=89 - VtPos(10.263, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=6 - ID=90 - VtPos(10.263, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=7 - ID=91 - VtPos(11.668728336884017, 1.502, 1.272) - $end 'Vertex' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' - $begin 'MergedFaces' - $end 'MergedFaces' - $begin 'MergedEdges' - $end 'MergedEdges' $end 'OperationIdentity' - BlankOperation=49 - NumToolOperations=2 - ToolOperations(61, 73) + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=239 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=166 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=165 $end 'Operation' $begin 'CloneToOperation' OperationType='DuplicateAroundAxis' - ID=112 + ID=250 ReferenceCoordSystemID=1 $begin 'DuplicateAroundAxisParameters' KernelVersion=13 - ClonedEntity=46 + ClonedEntity=166 CreateNewObjects=true WhichAxis='Z' AngleStr='beta3' NumClones='2' $end 'DuplicateAroundAxisParameters' - ParentPartID=46 + ParentPartID=166 ReferenceUDMID=-1 $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='NewObject_LXHI3Y' + Name='coax_0' Flags='' - Color='(132 132 193)' + Color='(128 255 255)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='""' + MaterialValue='"Teflon (tm)"' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3082,108 +4445,102 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Rectangle' - ID=51 + OperationType='Cylinder' + ID=174 ReferenceCoordSystemID=1 - $begin 'RectangleParameters' + $begin 'CylinderParameters' KernelVersion=13 - XStart='Dp/2' - YStart='-Wn/2' - ZStart='H' - Width='-Ln' - Height='Wn' + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + Height='-feedLength' WhichAxis='Z' - $end 'RectangleParameters' - ParentPartID=52 + NumSides='0' + $end 'CylinderParameters' + ParentPartID=175 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=0 - NumWires=1 - NumLoops=0 + NumFaces=3 + NumWires=0 + NumLoops=4 NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=52 - StartFaceID=-1 - StartEdgeID=53 - StartVertexID=57 - NumNewFaces=0 - NumNewEdges=4 - NumNewVertices=4 + BodyID=175 + StartFaceID=176 + StartEdgeID=179 + StartVertexID=181 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' $end 'Operation' $begin 'Operation' - OperationType='CoverLines' - ID=61 - $begin 'LocalOperationParameters' + OperationType='Rotate' + ID=274 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' KernelVersion=13 - LocalOpPart=52 - $end 'LocalOperationParameters' - ParentPartID=52 + TargetID=175 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=175 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 + NumLoops=4 NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 - StartFaceID=62 + StartFaceID=-1 StartEdgeID=-1 StartVertexID=-1 - NumNewFaces=1 + NumNewFaces=0 NumNewEdges=0 NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=62 - $begin 'FaceGeomTopol' - FaceTopol(1, 4, 4, 4) - $begin 'FaceGeometry' - Area=4.5120080000000016 - FcUVMid(11.013999999999999, 0, 1.2720000000000002) - $begin 'FcTolVts' - TolVt(11.765000000000001, -1.502, 1.272, 0) - TolVt(10.263, -1.502, 1.272, 0) - TolVt(10.263, 1.502, 1.272, 0) - TolVt(11.765000000000001, 1.502, 1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' - $end 'NewFaces' - $begin 'NewEdges' - $end 'NewEdges' - $begin 'NewVertices' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=51 + TranformBaseOperationID=174 $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=285 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=175 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=175 + ReferenceUDMID=-1 + $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='NewObject_0TW2OL' + Name='NewObject_84DCWV' Flags='' Color='(132 132 193)' Transparency=0.29999999999999999 @@ -3195,6 +4552,7 @@ $begin 'ComponentBody' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3202,19 +4560,19 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Rectangle' - ID=63 + OperationType='Circle' + ID=198 ReferenceCoordSystemID=1 - $begin 'RectangleParameters' + $begin 'CircleParameters' KernelVersion=13 - XStart='-Dp/2' - YStart='-Wn/2' - ZStart='H' - Width='Ln' - Height='Wn' + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' WhichAxis='Z' - $end 'RectangleParameters' - ParentPartID=64 + NumSegments='0' + $end 'CircleParameters' + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3224,17 +4582,17 @@ $begin 'ComponentBody' NumFaces=0 NumWires=1 NumLoops=0 - NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumCoedges=0 + NumEdges=1 + NumVertices=0 $end 'Topology' - BodyID=64 + BodyID=199 StartFaceID=-1 - StartEdgeID=65 - StartVertexID=69 + StartEdgeID=200 + StartVertexID=201 NumNewFaces=0 - NumNewEdges=4 - NumNewVertices=4 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -3242,12 +4600,12 @@ $begin 'ComponentBody' $end 'Operation' $begin 'Operation' OperationType='CoverLines' - ID=73 + ID=202 $begin 'LocalOperationParameters' KernelVersion=13 - LocalOpPart=64 + LocalOpPart=199 $end 'LocalOperationParameters' - ParentPartID=64 + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3255,14 +4613,14 @@ $begin 'ComponentBody' NumLumps=1 NumShells=1 NumFaces=1 - NumWires=0 - NumLoops=1 - NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 - StartFaceID=74 + StartFaceID=203 StartEdgeID=-1 StartVertexID=-1 NumNewFaces=1 @@ -3275,17 +4633,13 @@ $begin 'ComponentBody' $begin 'NewFaces' $begin 'Face' NormalizedSerialNum=0 - ID=74 + ID=203 $begin 'FaceGeomTopol' - FaceTopol(1, 4, 4, 4) + FaceTopol(1, 1, 1, 0) $begin 'FaceGeometry' - Area=4.5120080000000016 - FcUVMid(-11.013999999999999, 0, 1.2720000000000002) + Area=2.2698006922186251 + FcUVMid(3.6629999999999994, 0, 0) $begin 'FcTolVts' - TolVt(-11.765000000000001, -1.502, 1.272, 0) - TolVt(-10.263, -1.502, 1.272, 0) - TolVt(-10.263, 1.502, 1.272, 0) - TolVt(-11.765000000000001, 1.502, 1.272, 0) $end 'FcTolVts' $end 'FaceGeometry' $end 'FaceGeomTopol' @@ -3297,93 +4651,31 @@ $begin 'ComponentBody' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=63 - $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='FeedPin_0' - Flags='' - Color='(255 128 65)' - Transparency=0.29999999999999999 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"pec"' - SurfaceMaterialValue='""' - SolveInside=false - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' - $begin 'Operation' - OperationType='Cylinder' - ID=156 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' - KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_inner_rad' - Height='H' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=157 - ReferenceUDMID=-1 - IsSuppressed=false - $begin 'OperationIdentity' - $begin 'Topology' - NumLumps=1 - NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 - $end 'Topology' - BodyID=157 - StartFaceID=158 - StartEdgeID=161 - StartVertexID=163 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 - FaceNameAndIDMap() - EdgeNameAndIDMap() - VertexNameAndIDMap() - $end 'OperationIdentity' + ParentOperationID=198 $end 'Operation' $begin 'Operation' OperationType='Rotate' - ID=204 + ID=367 ReferenceCoordSystemID=1 $begin 'RotateParameters' KernelVersion=13 - TargetID=157 + TargetID=199 RotateAxis='Z' RotateAngle='alpha' $end 'RotateParameters' - ParentPartID=157 + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3396,39 +4688,108 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=156 + TranformBaseOperationID=202 $end 'Operation' $begin 'CloneToOperation' OperationType='DuplicateAroundAxis' - ID=215 + ID=368 ReferenceCoordSystemID=1 $begin 'DuplicateAroundAxisParameters' KernelVersion=13 - ClonedEntity=157 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta2' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=374 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 CreateNewObjects=true WhichAxis='Z' AngleStr='beta3' NumClones='2' $end 'DuplicateAroundAxisParameters' - ParentPartID=157 + ParentPartID=199 ReferenceUDMID=-1 $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=380 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta4' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'Operation' + OperationType='Move' + ID=386 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=199 + TranslateVectorX='Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=367 + $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_pin_0' + Name='NewObject_84DCWV_1' Flags='' - Color='(255 128 65)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='""' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3436,68 +4797,73 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=165 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=369 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_inner_rad' - Height='-feedLength' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=166 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=370 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' - BodyID=166 - StartFaceID=167 - StartEdgeID=170 - StartVertexID=172 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=370 + StartFaceID=371 + StartEdgeID=372 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='371') + CloneEdges('200'='372') + CloneVertices('201'='373') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=368 $end 'Operation' $begin 'Operation' - OperationType='Rotate' - ID=239 + OperationType='Move' + ID=387 ReferenceCoordSystemID=1 - $begin 'RotateParameters' + $begin 'TranslateParameters' KernelVersion=13 - TargetID=166 - RotateAxis='Z' - RotateAngle='alpha' - $end 'RotateParameters' - ParentPartID=166 + TargetID=370 + TranslateVectorX='-Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=370 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3510,39 +4876,25 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=165 + TranformBaseOperationID=369 $end 'Operation' - $begin 'CloneToOperation' - OperationType='DuplicateAroundAxis' - ID=250 - ReferenceCoordSystemID=1 - $begin 'DuplicateAroundAxisParameters' - KernelVersion=13 - ClonedEntity=166 - CreateNewObjects=true - WhichAxis='Z' - AngleStr='beta3' - NumClones='2' - $end 'DuplicateAroundAxisParameters' - ParentPartID=166 - ReferenceUDMID=-1 - $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_0' + Name='NewObject_84DCWV_2' Flags='' - Color='(128 255 255)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"Teflon (tm)"' + MaterialValue='""' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3550,68 +4902,73 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=174 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=375 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_outer_rad' - Height='-feedLength' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=175 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=376 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 - $end 'Topology' - BodyID=175 - StartFaceID=176 - StartEdgeID=179 - StartVertexID=181 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=376 + StartFaceID=377 + StartEdgeID=378 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='377') + CloneEdges('200'='378') + CloneVertices('201'='379') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=374 $end 'Operation' $begin 'Operation' - OperationType='Rotate' - ID=274 + OperationType='Move' + ID=388 ReferenceCoordSystemID=1 - $begin 'RotateParameters' + $begin 'TranslateParameters' KernelVersion=13 - TargetID=175 - RotateAxis='Z' - RotateAngle='alpha' - $end 'RotateParameters' - ParentPartID=175 + TargetID=376 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=376 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3624,30 +4981,15 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=174 + TranformBaseOperationID=375 $end 'Operation' - $begin 'CloneToOperation' - OperationType='DuplicateAroundAxis' - ID=285 - ReferenceCoordSystemID=1 - $begin 'DuplicateAroundAxisParameters' - KernelVersion=13 - ClonedEntity=175 - CreateNewObjects=true - WhichAxis='Z' - AngleStr='beta3' - NumClones='2' - $end 'DuplicateAroundAxisParameters' - ParentPartID=175 - ReferenceUDMID=-1 - $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_2_ObjectFromFace1' + Name='NewObject_84DCWV_3' Flags='' - Color='(128 255 255)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 @@ -3657,6 +4999,7 @@ $begin 'ComponentBody' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3664,13 +5007,14 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='BodyFromFaceFrom' - ID=1099 - $begin 'BodyFromFaceFromParameters' + OperationType='DuplicateBodyAroundAxis' + ID=381 + $begin 'CloneFromParameters' KernelVersion=13 - WhichFace=0 - $end 'BodyFromFaceFromParameters' - ParentPartID=1100 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=382 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3682,57 +5026,67 @@ $begin 'ComponentBody' NumLoops=1 NumCoedges=1 NumEdges=1 - NumVertices=1 + NumVertices=0 $end 'Topology' - BodyID=1100 - StartFaceID=1101 - StartEdgeID=1102 - StartVertexID=1103 + BodyID=382 + StartFaceID=383 + StartEdgeID=384 + StartVertexID=-1 NumNewFaces=1 NumNewEdges=1 - NumNewVertices=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='383') + CloneEdges('200'='384') + CloneVertices('201'='385') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=380 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=389 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=382 + TranslateVectorX='Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=1101 - $begin 'FaceGeomTopol' - FaceTopol(1, 1, 1, 1) - $begin 'FaceGeometry' - Area=2.269800692218626 - FcUVMid(-2.5901321394863217, -2.5901321394863253, -1.272) - $begin 'FcTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' - $end 'NewFaces' - $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1102 - EdgeFaces(1101) - $begin 'EdTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-1.9890913754777564, -1.9890913754777597, -1.272) - $end 'Edge' - $end 'NewEdges' - $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1103 - VtPos(-3.1911729034948877, -3.1911729034948912, -1.272) - $end 'Vertex' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - BodyFromFaceToOpnId=1098 - SourceOperationID=764 + TranformBaseOperationID=381 $end 'Operation' $end 'Operations' $end 'GeometryPart' @@ -3770,6 +5124,9 @@ $begin 'ComponentBody' $begin 'allobjects' allobjects(-1) $end 'allobjects' + $begin 'box' + box(1) + $end 'box' $begin 'circle_' circle_(2) $end 'circle_' @@ -3782,18 +5139,12 @@ $begin 'ComponentBody' $begin 'coax_0' coax_0(-1) $end 'coax_0' - $begin 'coax_2_objectfromface' - coax_2_objectfromface(1) - $end 'coax_2_objectfromface' $begin 'coax_pin_' coax_pin_(2) $end 'coax_pin_' $begin 'coax_pin_0' coax_pin_0(-1) $end 'coax_pin_0' - $begin 'cylinder' - cylinder(1) - $end 'cylinder' $begin 'feedpin_' feedpin_(2) $end 'feedpin_' @@ -3803,27 +5154,157 @@ $begin 'ComponentBody' $begin 'global' global(-1) $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' $begin 'model' model(-1) $end 'model' $begin 'newobject_0tw2ol' newobject_0tw2ol(-1) $end 'newobject_0tw2ol' + $begin 'newobject_84dcwv' + newobject_84dcwv(-1) + $end 'newobject_84dcwv' + $begin 'newobject_84dcwv_' + newobject_84dcwv_(1, 2, 3) + $end 'newobject_84dcwv_' $begin 'newobject_lxhi3y' newobject_lxhi3y(-1) $end 'newobject_lxhi3y' $begin 'relativecs' relativecs(1) $end 'relativecs' - $begin 'sub' - sub(-1) - $end 'sub' - $begin 'sub_objectfromface' - sub_objectfromface(1) - $end 'sub_objectfromface' + $begin 'soil' + soil(-1) + $end 'soil' $end 'CachedNames' $end 'GeometryOperations' $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 428) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('GeometryOperation', 428) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 492) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 493) + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryOperation', 492) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 493) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 713) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('GeometryOperation', 713) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 741) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryOperation', 741) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=5 + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('GeometryBodyOperation', 389) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 439) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryOperation', 439) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 503) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 504) + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryOperation', 503) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 504) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 724) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('GeometryOperation', 724) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 752) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 753) + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryOperation', 752) + $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=2 DependencyObject('GeometryBodyOperation', 113) @@ -4072,36 +5553,11 @@ $begin 'ComponentBody' DependencyObject('GeometryBodyOperation', 736) DependencyObject('GeometryOperation', 763) $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=0 - DependencyObject('GeometryOperation', 1098) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=1 - DependencyObject('GeometryBodyOperation', 995) - DependencyObject('CoordinateSystem', 1) - $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 - DependencyObject('GeometryBodyOperation', 1042) + DependencyObject('GeometryBodyOperation', 951) DependencyObject('CoordinateSystem', 1) $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=0 - DependencyObject('GeometryOperation', 1082) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=2 - DependencyObject('GeometryBodyOperation', 1083) - DependencyObject('GeometryOperation', 1082) - DependencyObject('GeometryBodyOperation', 1042) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=2 - DependencyObject('GeometryBodyOperation', 1104) - DependencyObject('GeometryBodyOperation', 1083) - DependencyObject('GeometryBodyOperation', 1099) - $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 DependencyObject('GeometryBodyOperation', 45) @@ -4192,11 +5648,78 @@ $begin 'ComponentBody' DependencyObject('GeometryOperation', 285) DependencyObject('CoordinateSystem', 1) $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 198) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 202) + DependencyObject('GeometryBodyOperation', 198) + $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=2 - DependencyObject('GeometryBodyOperation', 1099) - DependencyObject('GeometryOperation', 1098) - DependencyObject('GeometryBodyOperation', 764) + DependencyObject('GeometryBodyOperation', 367) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 202) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 368) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 374) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 380) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 369) + DependencyObject('GeometryOperation', 368) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 369) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 375) + DependencyObject('GeometryOperation', 374) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 375) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 381) + DependencyObject('GeometryOperation', 380) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 389) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 381) $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 @@ -4205,14 +5728,216 @@ $begin 'ComponentBody' $end 'DependencyInformation' $end 'GeometryDependencies' $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 114] + $begin 'AssignedFace' + kID=288 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(2, 2, 2, 0) + $begin 'FaceGeometry' + Area=13.351768777756622 + FcUVMid(-1.9890913754777577, -1.9890913754777573, -2.5219999999999998) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=289 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.269800692218626 + FcUVMid(-2.590132139486323, -2.590132139486323, -3.7720000000000002) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=953 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1245.3840999999998 + FcUVMid(0, 0, 30.000000000000004) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=955 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, -17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=956 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(-17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=957 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, 17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=958 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=256 + $begin 'EdgeData' + ParentObjectID=252 + ParentFaces[2: 253, 254] + $begin 'EdgeGeomTopol' + EdgeFaces(253, 254) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-2.4133554441896861, -2.4133554441896861, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=291 + $begin 'EdgeData' + ParentObjectID=287 + ParentFaces[2: 288, 289] + $begin 'EdgeGeomTopol' + EdgeFaces(288, 289) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-1.9890913754777577, -1.9890913754777577, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=971 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 959, 968] + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=972 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 960, 959, 970] + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=974 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 961, 967] + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=975 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 970, 966, 963] + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=976 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 968, 964, 963] + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=977 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 967, 965, 964] + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' $begin 'Settings' - IncludedParts[7: 114, 217, 252, 287, 996, 1043, 1084] + IncludedParts[7: 6, 34, 114, 217, 252, 287, 952] HiddenParts[0:] IncludedCS[0:] ReferenceCS=1 - IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta3', 'coax_inner_rad', 'coax_outer_rad', 'feedLength') + IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta2', 'beta3', 'beta4', 'coax_inner_rad', 'coax_outer_rad', 'feedLength', 'subLength', 'subWidth') IncludedDependentParameters() - ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta3='', coax_inner_rad='', coax_outer_rad='', feedLength='') + ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta2='', beta3='', beta4='', coax_inner_rad='', coax_outer_rad='', feedLength='', subLength='', subWidth='') $end 'Settings' $end 'GeometryData' $end 'ComponentBody' diff --git a/_unittest/example_models/T20/array_info.csv b/_unittest/example_models/T20/array_info.csv new file mode 100644 index 00000000000..7e740ea657a --- /dev/null +++ b/_unittest/example_models/T20/array_info.csv @@ -0,0 +1,35 @@ +ArrayName,A1 +Size Along A Vector,8 +Size Along B Vector,8 +A Vector,02_Patch1_LatticePair1 +B Vector,02_Patch1_LatticePair2 +Component Index,Component Name +1,02_Patch1 +2,01_Metal_Only1 +3,03_Radome_Side1 +4,Radome_Corner1 +Source Row,Source Column,Source Name,Magnitude,Phase +3,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 2*ScanPhaseShiftB) +3,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 3*ScanPhaseShiftB) +3,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 4*ScanPhaseShiftB) +3,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 5*ScanPhaseShiftB) +4,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 2*ScanPhaseShiftB) +4,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 3*ScanPhaseShiftB) +4,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 4*ScanPhaseShiftB) +4,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 5*ScanPhaseShiftB) +5,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 2*ScanPhaseShiftB) +5,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 3*ScanPhaseShiftB) +5,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 4*ScanPhaseShiftB) +5,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 5*ScanPhaseShiftB) +6,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 2*ScanPhaseShiftB) +6,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 3*ScanPhaseShiftB) +6,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 4*ScanPhaseShiftB) +Array,Format: Component_index:Rotation_angle:Active_or_Passive +4,3,3,3,3,3,3,4:90.0deg, +3:270.0deg,2,2,2,2,2,2,3:90.0deg, +3:270.0deg,2:0,1,1,1,1,2,3:90.0deg, +3:270.0deg,2,1,1,1,1,2,3:90.0deg, +3:270.0deg,2,1,1,1,1,2,3:90.0deg:0, +3:270.0deg,2,1,1,1,1:0,2,, +3:270.0deg,2,2,,2,2,2,3:90.0deg, +4:270.0deg,3:180.0deg,3:180.0deg,,3:180.0deg,3:180.0deg,3:180.0deg,4:180.0deg, diff --git a/_unittest/example_models/T20/array_simple_232.json b/_unittest/example_models/T20/array_simple_232.json new file mode 100644 index 00000000000..a64330c56ec --- /dev/null +++ b/_unittest/example_models/T20/array_simple_232.json @@ -0,0 +1,44 @@ +{ + "primarylattice": "Circ_Patch_5GHz_232_1_Primary1", + "secondarylattice": "Circ_Patch_5GHz_232_1_Primary2", + "useairobjects": true, + "rowdimension": 3, + "columndimension": 3, + "visible": false, + "showcellnumber": false, + "paddingcells": 0, + "referencecsid": 1, + "cells": { + "(1,1)": { + "name": "Circ_Patch_5GHz_232_1", + "color": "(255,0,20)", + "active": true, + "postprocessing": true, + "rotation": 0.0 + }, + "(1,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(1,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,3)": { + "name": "Circ_Patch_5GHz_232_1" + } + } +} \ No newline at end of file diff --git a/_unittest/test_20_HFSS.py b/_unittest/test_20_HFSS.py index 08cf93e0e11..72f828818a7 100644 --- a/_unittest/test_20_HFSS.py +++ b/_unittest/test_20_HFSS.py @@ -14,10 +14,17 @@ test_subfolder = "T20" if config["desktopVersion"] > "2022.2": + component = "Circ_Patch_5GHz_232.a3dcomp" +else: + component = "Circ_Patch_5GHz.a3dcomp" + +if config["desktopVersion"] > "2023.1": diff_proj_name = "differential_pairs_231" else: diff_proj_name = "differential_pairs" +component_array = "Array_232" + @pytest.fixture(scope="class") def aedtapp(add_app): @@ -1257,16 +1264,32 @@ def test_51a_array(self): self.aedtapp.insert_design("Array_simple", "Modal") from pyaedt.generic.DataHandlers import json_to_dict - dict_in = json_to_dict( - os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple.json") - ) - dict_in["Circ_Patch_5GHz1"] = os.path.join( - local_path, "../_unittest/example_models", test_subfolder, "Circ_Patch_5GHz.a3dcomp" - ) - dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + if config["desktopVersion"] > "2023.1": + dict_in = json_to_dict( + os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple_232.json") + ) + dict_in["Circ_Patch_5GHz_232_1"] = os.path.join( + local_path, "../_unittest/example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz_232_1"} + else: + dict_in = json_to_dict( + os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple.json") + ) + dict_in["Circ_Patch_5GHz1"] = os.path.join( + local_path, "../_unittest/example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + assert self.aedtapp.add_3d_component_array_from_json(dict_in) + array_name = self.aedtapp.component_array_names[0] + assert self.aedtapp.component_array[array_name].cells[2][2].rotation == 0 + assert self.aedtapp.component_array_names dict_in["cells"][(3, 3)]["rotation"] = 90 - assert self.aedtapp.add_3d_component_array_from_json(dict_in) + component_array = self.aedtapp.add_3d_component_array_from_json(dict_in) + assert component_array.cells[2][2].rotation == 90 + component_array.cells[2][2].rotation = 0 + assert component_array.cells[2][2].rotation == 0 def test_51b_set_material_threshold(self): assert self.aedtapp.set_material_threshold() @@ -1470,3 +1493,116 @@ def test_64_import_dxf(self): dxf_layers = self.aedtapp.get_dxf_layers(dxf_file) assert isinstance(dxf_layers, list) assert self.aedtapp.import_dxf(dxf_file, dxf_layers) + + def test_65_component_array(self, add_app): + hfss_array = add_app(project_name=component_array, subfolder=test_subfolder) + assert len(hfss_array.component_array) == 1 + + array = hfss_array.component_array["A1"] + assert array.name == hfss_array.component_array_names[0] + + cell1 = array.get_cell(1, 1) + cell2 = array[1, 1] + assert cell2 + assert cell1.rotation == 0 + + assert not array.get_cell(0, 0) + assert not array.get_cell(10, 0) + + lc = array.lattice_vector() + assert len(lc) == 6 + + assert len(array.component_names) == 4 + + assert len(array.post_processing_cells) == 4 + post_cells = array.post_processing_cells + post_cells["Radome_Corner1"] = [8, 1] + array.post_processing_cells = post_cells + assert array.post_processing_cells["Radome_Corner1"] == [8, 1] + + array.cells[0][1].component = None + assert not array.cells[0][1].component + + array.cells[1][1].rotation = 90 + assert array.cells[1][1].rotation == 90 + + array.cells[1][1].rotation = 10 + assert not array.cells[1][1].rotation == 10 + + array.cells[1][1].is_active = False + array.cells[1][1].is_active = 1 + assert not array.cells[1][1].is_active + + assert array.cells[1][2].component == array.component_names[2] + assert not array.cells[1][2].component == "test" + + array.cells[0][1].component = array.component_names[3] + assert array.cells[0][1].component == array.component_names[3] + + hfss_array.component_array["A1"].name = "Array_new" + assert hfss_array.component_array_names[0] == "Array_new" + hfss_array.component_array["Array_new"].name = "A1" + + omodel = hfss_array.get_oo_object(hfss_array.odesign, "Model") + oarray = hfss_array.get_oo_object(omodel, "A1") + + assert array.visible + array.visible = False + assert not oarray.GetPropValue("Visible") + array.visible = True + assert oarray.GetPropValue("Visible") + + assert array.show_cell_number + array.show_cell_number = False + assert not oarray.GetPropValue("Show Cell Number") + array.show_cell_number = True + assert oarray.GetPropValue("Show Cell Number") + + assert array.render == "Shaded" + array.render = "Wireframe" + assert oarray.GetPropValue("Render") == "Wireframe" + array.render = "Shaded" + assert oarray.GetPropValue("Render") == "Shaded" + array.render = "Shaded1" + assert not array.render == "Shaded1" + + a_choices = array.a_vector_choices + assert array.a_vector_name in a_choices + array.a_vector_name = a_choices[0] + assert oarray.GetPropValue("A Vector") == a_choices[0] + array.a_vector_name = "Test" + assert not array.a_vector_name == "Test" + + b_choices = array.b_vector_choices + assert array.b_vector_name in b_choices + array.b_vector_name = b_choices[1] + assert oarray.GetPropValue("B Vector") == b_choices[1] + array.b_vector_name = "Test" + assert not array.b_vector_name == "Test" + + assert array.a_size == 8 + + assert array.b_size == 8 + + assert array.padding_cells == 0 + array.padding_cells = 2 + assert oarray.GetPropValue("Padding") == "2" + array.padding_cells = 0 + + assert array.coordinate_system == "Global" + array.coordinate_system = "Corner" + array.coordinate_system = "Global" + + array_csv = os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_info.csv") + array_info = array.parse_array_info_from_csv(array_csv) + assert len(array_info) == 4 + assert array_info["component"][1] == "02_Patch1" + + # Delete 3D Component + hfss_array.modeler.user_defined_components["03_Radome_Side1"].delete() + array.update_properties() + assert len(array.component_names) == 3 + assert len(array.post_processing_cells) == 3 + + array.delete() + assert not hfss_array.component_array diff --git a/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp b/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp new file mode 100644 index 00000000000..a78e60d3e73 --- /dev/null +++ b/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp @@ -0,0 +1,5945 @@ +$begin 'AnsoftComponentChkSum' + ChecksumString='6a12cbfd15e157cadf37b8d1f78fb0a7' + ChecksumHistory('f4c81c746cee97b0fa0eca9b6026ba74', 'b76bafd4b64349f9b1bef83210e30246', '2deba8a0e7fff848e49beff26a952a82', 'b6452e22b0ea6d367603320594b474b6') + VersionHistory('1.0', '1.0', '1.0', '1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Circ_Patch_5GHz_232' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Arien Sligar' + Email='arien.sligar@ansys.com' + Date='9:25:10 AM Nov 06, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiivmj4jeM/GOtfErwB4\ +C8DeJbzwj4bPjrVPBnxJ8UaXp3h658Sr4ll+EPiH4oeG/DXhlPFui6nZ/Y4tG06xvNYuZdNII1/SrbT\ +b2SdNahss6tWNKKlJOTlKMUla7cnZbtLzd3smZVq0aMYyknJylGKStduTSW7S63d2rJNn0vRXkX/AAi\ +fxf0v/R9B+L2kavZv++kufid8MbHxHryXLfI8FpffDfxR4NsYtIEUcLRxS6ZPdrNLcPJfywyQW9qf2z\ +8cdO4vPAPw58R2dhxd3/h/4ka7pGva9bWv+vu9E8Ha98PGsdL1e6iR3ttMvfFJtIJp0tbjXzCr6jU+1\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 952, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'antennaMetal_2' + ID=2 + BoundType='Perfect E' + IsComponent=false + Objects(114) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal_2' + $begin 'groundMetal' + ID=4 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'coax_outer_2' + ID=7 + BoundType='Perfect E' + IsComponent=false + Faces(288) + ParentBndID=-1 + InfGroundPlane=false + $end 'coax_outer_2' + $begin 'Rad1' + ID=21 + BoundType='Radiation' + IsComponent=false + Faces(953) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'Primary1' + ID=22 + BoundType='Primary' + IsComponent=false + Faces(957) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=975 + ParentIDs(970, 966, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=957 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=972 + ParentIDs(960, 959, 970) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=957 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=false + $end 'Primary1' + $begin 'Secondary1' + ID=23 + BoundType='Secondary' + IsComponent=false + Faces(955) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=976 + ParentIDs(968, 964, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=955 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=971 + ParentIDs(962, 959, 968) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=955 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + primary=22 + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Secondary1' + $begin 'Primary2' + ID=24 + BoundType='Primary' + IsComponent=false + Faces(958) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=976 + ParentIDs(968, 964, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=958 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=971 + ParentIDs(962, 959, 968) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=958 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=false + $end 'Primary2' + $begin 'Secondary2' + ID=25 + BoundType='Secondary' + IsComponent=false + Faces(956) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=977 + ParentIDs(967, 965, 964) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=956 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=974 + ParentIDs(962, 961, 967) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=956 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + primary=24 + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Secondary2' + $end 'Boundaries' + $begin 'Excitations' + $begin '1' + ID=26 + BoundType='Wave Port' + IsComponent=false + Faces(289) + WavePortType='Modal' + NumModes=1 + PECCapPartID=-1 + UseLineModeAlignment=false + DoDeembed=false + DeembedDist='0mm' + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=291 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + closedU=true + PositionType='OnEdge' + UParam=0 + VParam=0 + XPosition='-3.19117290349489' + YPosition='-3.19117290349489' + ZPosition='-3.772' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.0059288537549406911 + uvpos_v=0.49999999999999989 + uvpos_id=289 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + closedU=true + PositionType='OnEdge' + UParam=0 + VParam=0 + XPosition='-2.76690883478296' + YPosition='-2.76690883478296' + ZPosition='-3.772' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.35468495698674718 + uvpos_v=0.5 + uvpos_id=289 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + UseAnalyticAlignment=false + ShowReporterFilter=false + ReporterFilter(true) + $end '1' + $end 'Excitations' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='2.1' + conductivity='0' + dielectric_loss_tangent='0.001' + ModTime=1610399599 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'pec' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=247 + Green=242 + Blue=232 + $end 'MatAppearanceData' + $end 'AttachedData' + conductivity='1e+30' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'pec' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('beta2', 'UD', '', '-90deg') + VariableProp('beta4', 'UD', '', '-270deg') + VariableProp('Sy', 'UD', '', '35.29mm') + VariableProp('subWidth', 'UD', '', '80mm') + VariableProp('Wn', 'UD', '', '3.004mm') + VariableProp('Dp', 'UD', '', '23.53mm') + VariableProp('Ln', 'UD', '', '1.502mm') + VariableProp('feedLength', 'UD', '', '2.5mm') + VariableProp('subLength', 'UD', '', '80mm') + VariableProp('coax_inner_rad', 'UD', '', '0.25mm') + VariableProp('coax_outer_rad', 'UD', '', '0.85mm') + VariableProp('Sf', 'UD', '', '3.663mm') + VariableProp('Sx', 'UD', '', '35.29mm') + VariableProp('H', 'UD', '', '1.272mm') + VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('alpha', 'UD', '', '45deg') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=7 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=979 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=709 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='-17.645mm' + OriginY='-17.645mm' + OriginZ='14mm' + XAxisXvec='1mm' + XAxisYvec='0mm' + XAxisZvec='0mm' + YAxisXvec='0mm' + YAxisYvec='1mm' + YAxisZvec='0mm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=710 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Soil' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subWidth/2' + YPosition='-subLength/2' + ZPosition='0mm' + XSize='subWidth' + YSize='subLength' + ZSize='H' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=428 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=429 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=430 + StartEdgeID=431 + StartVertexID=435 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=430 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=101.76000000000001 + FcUVMid(0, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=433 + EdgeFaces(7, 430) + $begin 'EdTolVts' + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=434 + EdgeFaces(9, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=432 + EdgeFaces(11, 430) + $begin 'EdTolVts' + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=431 + EdgeFaces(8, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=435 + VtPos(0, -40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=438 + VtPos(0, -40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=437 + VtPos(0, 40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=436 + VtPos(0, 40, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=428 + ParentOperation=5 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=492 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=493 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=494 + StartEdgeID=495 + StartVertexID=499 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=494 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000003 + FcUVMid(-20, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=498 + EdgeFaces(7, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=497 + EdgeFaces(10, 494) + $begin 'EdTolVts' + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-40, 0, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=496 + EdgeFaces(8, 494) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=495 + EdgeFaces(430, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=499 + VtPos(0, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=502 + VtPos(-40, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=501 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=500 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=492 + ParentOperation=429 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=588 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=6 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=493 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=713 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=714 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=715 + StartEdgeID=716 + StartVertexID=720 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000038 + FcUVMid(-2.3550000000000044, -17.645, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=719 + EdgeFaces(7, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=716 + EdgeFaces(10, 715) + $begin 'EdTolVts' + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-22.355, -17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=717 + EdgeFaces(8, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000044, -17.645, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=718 + EdgeFaces(430, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(17.645, -17.645, -0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=722 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=720 + VtPos(-22.355, -17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=721 + VtPos(-22.355000000000008, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=723 + VtPos(17.645, -17.645, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=713 + ParentOperation=588 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=741 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=742 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=743 + StartEdgeID=744 + StartVertexID=748 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=743 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=44.888880000000029 + FcUVMid(-17.645, 0, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=745 + EdgeFaces(7, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=747 + EdgeFaces(8, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=746 + EdgeFaces(494, 743) + $begin 'EdTolVts' + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=744 + EdgeFaces(715, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, -17.645, -0.63600000000000045) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=748 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=750 + VtPos(-17.645, 17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=751 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=749 + VtPos(-17.645, -17.645, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=741 + ParentOperation=714 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subWidth/2' + YStart='-subLength/2' + ZStart='0mm' + Width='subWidth' + Height='subLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6400.0000000000009 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-40, -40, 0, 4.9999999999999998e-07) + TolVt(40, -40, 0, 4.9999999999999998e-07) + TolVt(40, 40, 0, 4.9999999999999998e-07) + TolVt(-40, 40, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=390 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=34 + NumToolParts=4 + ToolParts(199, 370, 376, 382) + $end 'SubtractParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=5 + NumCoedges=8 + NumEdges=8 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=391 + StartVertexID=395 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=391 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(15.65590862452224, -15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=392 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-19.634091375477759, -19.634091375477759, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=393 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-15.65590862452224, 15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=394 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(19.634091375477759, 19.634091375477759, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=43 + NumToolOperations=4 + ToolOperations(386, 387, 388, 389) + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=439 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=440 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=3 + NumCoedges=6 + NumEdges=6 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=441 + StartVertexID=442 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=441 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=443 + VtPos(0, 40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=442 + VtPos(0, -40, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=439 + ParentOperation=390 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=503 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=504 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=505 + StartVertexID=506 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=505 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=507 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=506 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=503 + ParentOperation=440 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=589 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=34 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=504 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=724 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=725 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=726 + StartVertexID=727 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=726 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-22.355, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, -1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(-22.355, -17.645, -1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=724 + ParentOperation=589 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=752 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=753 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=754 + StartVertexID=755 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=754 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=755 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=756 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=752 + ParentOperation=725 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Circle_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=113 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=46 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=114 + StartFaceID=115 + StartEdgeID=116 + StartVertexID=124 + NumNewFaces=1 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('50'='115') + CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') + CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(50) + OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) + OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) + $end 'OperationIdentity' + PlaceHolderOpnId=112 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=154 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=114 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=113 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=448 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=449 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=448 + ParentOperation=154 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=510 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=511 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=510 + ParentOperation=449 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=590 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=114 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=511 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=729 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=730 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=729 + ParentOperation=590 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=757 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=758 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=757 + ParentOperation=730 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=216 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=157 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=217 + StartFaceID=218 + StartEdgeID=221 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('158'='218', '159'='219', '160'='220') + CloneEdges('161'='221', '162'='222') + CloneVertices('163'='223', '164'='224') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(158, 159, 160) + OriginalEdgeIDs(161, 162) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=215 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=237 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=217 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=216 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=464 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=465 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=464 + ParentOperation=237 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=514 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=515 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=514 + ParentOperation=465 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=591 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=217 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=515 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=731 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=732 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=731 + ParentOperation=591 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=759 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=760 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=759 + ParentOperation=732 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=251 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=166 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=252 + StartFaceID=253 + StartEdgeID=256 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('167'='253', '168'='254', '169'='255') + CloneEdges('170'='256', '171'='257') + CloneVertices('172'='258', '173'='259') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(167, 168, 169) + OriginalEdgeIDs(170, 171) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=250 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=272 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=251 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=470 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=471 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=470 + ParentOperation=272 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=518 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=519 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=518 + ParentOperation=471 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=592 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=519 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=733 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=734 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=733 + ParentOperation=592 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=761 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=762 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=761 + ParentOperation=734 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_2' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=286 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=175 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=287 + StartFaceID=288 + StartEdgeID=291 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('176'='288', '177'='289', '178'='290') + CloneEdges('179'='291', '180'='292') + CloneVertices('181'='293', '182'='294') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(176, 177, 178) + OriginalEdgeIDs(179, 180) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=285 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=307 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=286 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=476 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=477 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=476 + ParentOperation=307 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=522 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=523 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=522 + ParentOperation=477 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=593 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=523 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=735 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=736 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=735 + ParentOperation=593 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=763 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=764 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=763 + ParentOperation=736 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=951 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-17.645mm' + YPosition='17.645mm' + ZPosition='-1.272mm' + XSize='35.29mm' + YSize='-35.29mm' + ZSize='30mm+H' + $end 'BoxParameters' + ParentPartID=952 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=952 + StartFaceID=953 + StartEdgeID=959 + StartVertexID=971 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Circle_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='0' + YCenter='0' + ZCenter='H' + Radius='Dp/2' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=48 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=49 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=50 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=50 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=434.84425400497821 + FcUVMid(0, 0, 1.272) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=75 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=2 + ToolParts(52, 64) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=76 + StartVertexID=84 + NumNewFaces=0 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=78 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=77 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=76 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=80 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=81 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=82 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=83 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(7.2039847959843046e-16, 11.765000000000001, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=7 + ID=79 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=86 + VtPos(-10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=85 + VtPos(-10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=87 + VtPos(-11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=84 + VtPos(-11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=89 + VtPos(10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=90 + VtPos(10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=6 + ID=88 + VtPos(11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=7 + ID=91 + VtPos(11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=49 + NumToolOperations=2 + ToolOperations(61, 73) + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=112 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=46 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=46 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_LXHI3Y' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=51 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='-Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=52 + StartFaceID=-1 + StartEdgeID=53 + StartVertexID=57 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=61 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=52 + $end 'LocalOperationParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=62 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=51 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_0TW2OL' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=63 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=64 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=64 + StartFaceID=-1 + StartEdgeID=65 + StartVertexID=69 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=73 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=64 + $end 'LocalOperationParameters' + ParentPartID=64 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=74 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=74 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(-11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(-11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=63 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=156 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='H' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=157 + StartFaceID=158 + StartEdgeID=161 + StartVertexID=163 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=204 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=157 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=156 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=215 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=157 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=157 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=165 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=166 + StartFaceID=167 + StartEdgeID=170 + StartVertexID=172 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=239 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=166 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=165 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=250 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=166 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=166 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_0' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=174 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=175 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=175 + StartFaceID=176 + StartEdgeID=179 + StartVertexID=181 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=274 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=175 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=175 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=174 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=285 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=175 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=175 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=198 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=199 + StartFaceID=-1 + StartEdgeID=200 + StartVertexID=201 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=202 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=199 + $end 'LocalOperationParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=203 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=203 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.2698006922186251 + FcUVMid(3.6629999999999994, 0, 0) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=198 + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=367 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=199 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=202 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=368 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta2' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=374 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=380 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta4' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'Operation' + OperationType='Move' + ID=386 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=199 + TranslateVectorX='Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=367 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_1' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=369 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=370 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=370 + StartFaceID=371 + StartEdgeID=372 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='371') + CloneEdges('200'='372') + CloneVertices('201'='373') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=368 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=387 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=370 + TranslateVectorX='-Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=370 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=369 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_2' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=375 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=376 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=376 + StartFaceID=377 + StartEdgeID=378 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='377') + CloneEdges('200'='378') + CloneVertices('201'='379') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=374 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=388 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=376 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=376 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=375 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_3' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=381 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=382 + StartFaceID=383 + StartEdgeID=384 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='383') + CloneEdges('200'='384') + CloneVertices('201'='385') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=380 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=389 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=382 + TranslateVectorX='Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=381 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=400 + StartFaceID=401 + StartEdgeID=407 + StartVertexID=419 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'circle_' + circle_(2) + $end 'circle_' + $begin 'circle_0' + circle_0(-1) + $end 'circle_0' + $begin 'coax_' + coax_(2) + $end 'coax_' + $begin 'coax_0' + coax_0(-1) + $end 'coax_0' + $begin 'coax_pin_' + coax_pin_(2) + $end 'coax_pin_' + $begin 'coax_pin_0' + coax_pin_0(-1) + $end 'coax_pin_0' + $begin 'feedpin_' + feedpin_(2) + $end 'feedpin_' + $begin 'feedpin_0' + feedpin_0(-1) + $end 'feedpin_0' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'newobject_0tw2ol' + newobject_0tw2ol(-1) + $end 'newobject_0tw2ol' + $begin 'newobject_84dcwv' + newobject_84dcwv(-1) + $end 'newobject_84dcwv' + $begin 'newobject_84dcwv_' + newobject_84dcwv_(1, 2, 3) + $end 'newobject_84dcwv_' + $begin 'newobject_lxhi3y' + newobject_lxhi3y(-1) + $end 'newobject_lxhi3y' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'soil' + soil(-1) + $end 'soil' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 428) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('GeometryOperation', 428) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 492) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 493) + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryOperation', 492) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 493) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 713) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('GeometryOperation', 713) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 741) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryOperation', 741) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=5 + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('GeometryBodyOperation', 389) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 439) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryOperation', 439) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 503) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 504) + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryOperation', 503) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 504) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 724) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('GeometryOperation', 724) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 752) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 753) + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryOperation', 752) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 113) + DependencyObject('GeometryOperation', 112) + DependencyObject('GeometryBodyOperation', 75) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 154) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 113) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 448) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 449) + DependencyObject('GeometryBodyOperation', 154) + DependencyObject('GeometryOperation', 448) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 510) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 511) + DependencyObject('GeometryBodyOperation', 449) + DependencyObject('GeometryOperation', 510) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 590) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 511) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 729) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryBodyOperation', 590) + DependencyObject('GeometryOperation', 729) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 757) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 758) + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryOperation', 757) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 216) + DependencyObject('GeometryOperation', 215) + DependencyObject('GeometryBodyOperation', 204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 216) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 464) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 465) + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('GeometryOperation', 464) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 514) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 515) + DependencyObject('GeometryBodyOperation', 465) + DependencyObject('GeometryOperation', 514) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 591) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 515) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 731) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 732) + DependencyObject('GeometryBodyOperation', 591) + DependencyObject('GeometryOperation', 731) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 759) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 760) + DependencyObject('GeometryBodyOperation', 732) + DependencyObject('GeometryOperation', 759) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 251) + DependencyObject('GeometryOperation', 250) + DependencyObject('GeometryBodyOperation', 239) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 272) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 251) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 470) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 471) + DependencyObject('GeometryBodyOperation', 272) + DependencyObject('GeometryOperation', 470) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 518) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 519) + DependencyObject('GeometryBodyOperation', 471) + DependencyObject('GeometryOperation', 518) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 592) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 519) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 733) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 734) + DependencyObject('GeometryBodyOperation', 592) + DependencyObject('GeometryOperation', 733) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 761) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 762) + DependencyObject('GeometryBodyOperation', 734) + DependencyObject('GeometryOperation', 761) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 286) + DependencyObject('GeometryOperation', 285) + DependencyObject('GeometryBodyOperation', 274) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 307) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 286) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 476) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 477) + DependencyObject('GeometryBodyOperation', 307) + DependencyObject('GeometryOperation', 476) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 522) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 523) + DependencyObject('GeometryBodyOperation', 477) + DependencyObject('GeometryOperation', 522) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 593) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 523) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 735) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 736) + DependencyObject('GeometryBodyOperation', 593) + DependencyObject('GeometryOperation', 735) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 763) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 764) + DependencyObject('GeometryBodyOperation', 736) + DependencyObject('GeometryOperation', 763) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 951) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 49) + DependencyObject('GeometryBodyOperation', 45) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=3 + DependencyObject('GeometryBodyOperation', 75) + DependencyObject('GeometryBodyOperation', 49) + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('GeometryBodyOperation', 73) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 112) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 51) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('GeometryBodyOperation', 51) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 63) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 73) + DependencyObject('GeometryBodyOperation', 63) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 156) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 204) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 156) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 215) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 165) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 239) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 165) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 250) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 174) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 274) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 174) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 285) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 198) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 202) + DependencyObject('GeometryBodyOperation', 198) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 367) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 202) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 368) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 374) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 380) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 369) + DependencyObject('GeometryOperation', 368) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 369) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 375) + DependencyObject('GeometryOperation', 374) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 375) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 381) + DependencyObject('GeometryOperation', 380) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 389) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 381) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 709) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 114] + $begin 'AssignedFace' + kID=288 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(2, 2, 2, 0) + $begin 'FaceGeometry' + Area=13.351768777756622 + FcUVMid(-1.9890913754777577, -1.9890913754777573, -2.5219999999999998) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=289 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.269800692218626 + FcUVMid(-2.590132139486323, -2.590132139486323, -3.7720000000000002) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=953 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1245.3840999999998 + FcUVMid(0, 0, 30.000000000000004) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=955 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, -17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=956 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(-17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=957 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, 17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=958 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=256 + $begin 'EdgeData' + ParentObjectID=252 + ParentFaces[2: 253, 254] + $begin 'EdgeGeomTopol' + EdgeFaces(253, 254) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-2.4133554441896861, -2.4133554441896861, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=291 + $begin 'EdgeData' + ParentObjectID=287 + ParentFaces[2: 288, 289] + $begin 'EdgeGeomTopol' + EdgeFaces(288, 289) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-1.9890913754777577, -1.9890913754777577, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=971 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 959, 968] + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=972 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 960, 959, 970] + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=974 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 961, 967] + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=975 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 970, 966, 963] + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=976 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 968, 964, 963] + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=977 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 967, 965, 964] + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[7: 6, 34, 114, 217, 252, 287, 952] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta2', 'beta3', 'beta4', 'coax_inner_rad', 'coax_outer_rad', 'feedLength', 'subLength', 'subWidth') + IncludedDependentParameters() + ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta2='', beta3='', beta4='', coax_inner_rad='', coax_outer_rad='', feedLength='', subLength='', subWidth='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' diff --git a/_unittest_solvers/example_models/T00/array_simple_232.json b/_unittest_solvers/example_models/T00/array_simple_232.json new file mode 100644 index 00000000000..a64330c56ec --- /dev/null +++ b/_unittest_solvers/example_models/T00/array_simple_232.json @@ -0,0 +1,44 @@ +{ + "primarylattice": "Circ_Patch_5GHz_232_1_Primary1", + "secondarylattice": "Circ_Patch_5GHz_232_1_Primary2", + "useairobjects": true, + "rowdimension": 3, + "columndimension": 3, + "visible": false, + "showcellnumber": false, + "paddingcells": 0, + "referencecsid": 1, + "cells": { + "(1,1)": { + "name": "Circ_Patch_5GHz_232_1", + "color": "(255,0,20)", + "active": true, + "postprocessing": true, + "rotation": 0.0 + }, + "(1,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(1,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,3)": { + "name": "Circ_Patch_5GHz_232_1" + } + } +} \ No newline at end of file diff --git a/_unittest_solvers/test_00_analyze.py b/_unittest_solvers/test_00_analyze.py index f35a5fb6334..93f85153aae 100644 --- a/_unittest_solvers/test_00_analyze.py +++ b/_unittest_solvers/test_00_analyze.py @@ -14,7 +14,7 @@ from pyaedt import Icepak from pyaedt import Hfss3dLayout from pyaedt import Circuit, Maxwell3d - +from _unittest.conftest import config sbr_platform_name = "satellite_231" array_name = "array_231" @@ -22,6 +22,11 @@ original_project_name = "Galileo_t21_231" transient = "Transient_StrandedWindings" +if config["desktopVersion"] > "2022.2": + component = "Circ_Patch_5GHz_232.a3dcomp" +else: + component = "Circ_Patch_5GHz.a3dcomp" + test_subfolder = "T00" @@ -147,14 +152,25 @@ def test_02_hfss_export_results(self, hfss_app): hfss_app.insert_design("Array_simple_resuts", "Modal") from pyaedt.generic.DataHandlers import json_to_dict - dict_in = json_to_dict( - os.path.join(local_path, "../_unittest_solvers/example_models", test_subfolder, "array_simple.json")) - dict_in["Circ_Patch_5GHz1"] = os.path.join( - local_path, "../_unittest_solvers/example_models", test_subfolder, "Circ_Patch_5GHz.a3dcomp" - ) - dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} - assert hfss_app.add_3d_component_array_from_json(dict_in) - dict_in["cells"][(3, 3)]["rotation"] = 90 + if config["desktopVersion"] > "2023.1": + dict_in = json_to_dict( + os.path.join(local_path, "example_models", test_subfolder, "array_simple_232.json") + ) + dict_in["Circ_Patch_5GHz_232_1"] = os.path.join( + local_path, "example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz_232_1"} + dict_in["cells"][(3, 3)]["rotation"] = 90 + else: + dict_in = json_to_dict( + os.path.join(local_path, "example_models", test_subfolder, "array_simple.json") + ) + dict_in["Circ_Patch_5GHz1"] = os.path.join( + local_path, "example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + dict_in["cells"][(3, 3)]["rotation"] = 90 + hfss_app.add_3d_component_array_from_json(dict_in) exported_files = hfss_app.export_results() assert len(exported_files) == 0 setup = hfss_app.create_setup(setupname="test") diff --git a/doc/source/API/Primitive_Objects.rst b/doc/source/API/Primitive_Objects.rst index 8c6d9b9dab6..ee4652f3461 100644 --- a/doc/source/API/Primitive_Objects.rst +++ b/doc/source/API/Primitive_Objects.rst @@ -61,6 +61,7 @@ They contain all getters and setters to simplify object manipulation. cad.elements3d.VertexPrimitive cad.polylines.PolylineSegment cad.polylines.Polyline + cad.component_array.ComponentArray cad.components_3d.UserDefinedComponent cad.elements3d.Point cad.elements3d.Plane diff --git a/examples/02-HFSS/Array.py b/examples/02-HFSS/Array.py index 1d3950e471c..9564242c923 100644 --- a/examples/02-HFSS/Array.py +++ b/examples/02-HFSS/Array.py @@ -54,7 +54,18 @@ dict_in = pyaedt.data_handler.json_to_dict(os.path.join(example_path, "array_simple.json")) dict_in["Circ_Patch_5GHz1"] = os.path.join(example_path, "Circ_Patch_5GHz.a3dcomp") dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} -hfss.add_3d_component_array_from_json(dict_in) +array = hfss.add_3d_component_array_from_json(dict_in) + +########################################################## +# Modify cells +# ~~~~~~~~~~~~ +# Make center element passive and rotate corner elements. + +array.cells[1][1].is_active = False +array.cells[0][0].rotation = 90 +array.cells[0][2].rotation = 90 +array.cells[2][0].rotation = 90 +array.cells[2][2].rotation = 90 ########################################################## # Set up simulation diff --git a/pyaedt/hfss.py b/pyaedt/hfss.py index 99f5473731c..53d96d99303 100644 --- a/pyaedt/hfss.py +++ b/pyaedt/hfss.py @@ -20,6 +20,7 @@ from pyaedt.generic.general_methods import parse_excitation_file from pyaedt.generic.general_methods import pyaedt_function_handler from pyaedt.modeler import cad +from pyaedt.modeler.cad.component_array import ComponentArray from pyaedt.modeler.cad.components_3d import UserDefinedComponent from pyaedt.modeler.geometry_operators import GeometryOperators from pyaedt.modules.Boundary import BoundaryObject @@ -192,6 +193,10 @@ def __init__( aedt_process_id, ) self._field_setups = [] + self.component_array = {} + self.component_array_names = list(self.get_oo_name(self.odesign, "Model")) + for component_array in self.component_array_names: + self.component_array[component_array] = ComponentArray(self, component_array) def _init_from_design(self, *args, **kwargs): self.__init__(*args, **kwargs) @@ -240,7 +245,8 @@ def hybrid(self): @hybrid.setter def hybrid(self, value): - self.design_solutions.hybrid = value + if value != self.design_solutions.hybrid and isinstance(value, bool): + self.design_solutions.hybrid = value @property def composite(self): @@ -5555,8 +5561,7 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): Returns ------- - bool - ``True`` when successful, ``False`` when failed. + class:`pyaedt.modeler.cad.component_array.ComponentArray` Examples -------- @@ -5594,9 +5599,8 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): >>> from pyaedt.generic.DataHandlers import json_to_dict >>> hfss_app = Hfss() >>> dict_in = json_to_dict(path\to\json_file) - >>> hfss_app.add_3d_component_array_from_json(dict_in) + >>> component_array = hfss_app.add_3d_component_array_from_json(dict_in) """ - self.hybrid = True if isinstance(json_file, dict): json_dict = json_file @@ -5621,9 +5625,11 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): cells_names[v["name"]].append(k1) else: def_names = self.oeditor.Get3DComponentDefinitionNames() - if v["name"] not in def_names and v["name"][:-1] not in def_names: + if v["name"] not in def_names and v["name"][:-1] not in def_names and v["name"][:-2] not in def_names: if v["name"] not in json_dict: - self.logger.error("a3comp is not present in design and not define correctly in json.") + self.logger.error( + "3D component array is not present in design and not defined correctly in the JSON file." + ) return False geometryparams = self.get_components3d_vars(json_dict[v["name"]]) @@ -5704,9 +5710,15 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): args.append(col) if self.omodelsetup.IsArrayDefined(): self.omodelsetup.EditArray(args) + if settings.aedt_version < "2024.1": + self.save_project() else: self.omodelsetup.AssignArray(args) - return True + if settings.aedt_version < "2024.1": + self.save_project() + self.component_array[array_name] = ComponentArray(self, array_name) + self.component_array_names = [array_name] + return self.component_array[array_name] @pyaedt_function_handler() def get_antenna_ffd_solution_data( diff --git a/pyaedt/modeler/cad/component_array.py b/pyaedt/modeler/cad/component_array.py new file mode 100644 index 00000000000..bacf6f5cdc7 --- /dev/null +++ b/pyaedt/modeler/cad/component_array.py @@ -0,0 +1,720 @@ +from __future__ import absolute_import + +from collections import OrderedDict +import os +import re + +from pyaedt import pyaedt_function_handler +from pyaedt.generic.general_methods import _uname +from pyaedt.generic.general_methods import read_csv + + +class ComponentArray(object): + """Manages object attributes for a 3D component array. + + Parameters + ---------- + app : :class:`pyaedt.Hfss` + HFSS PyAEDT object. + name : str, optional + Array name. The default is ``None``, in which case a random name is assigned. + + Examples + -------- + Basic usage demonstrated with an HFSS design with an existing array: + + >>> from pyaedt import Hfss + >>> aedtapp = Hfss(projectname="Array.aedt") + >>> array_names = aedtapp.component_array_names[0] + >>> array = aedtapp.component_array[array_names[0]] + """ + + def __init__(self, app, name=None): + # Public attributes + self.logger = app.logger + self.update_cells = True + + # Private attributes + self.__app = app + if name is None: + name = _uname("Array_") + self.__name = name + + # Leverage csv file if possible (aedt version > 2023.2) + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + self.__array_info_path = os.path.join(self.__app.toolkit_directory, "array_info.csv") + else: + self.__app.save_project() + self.__array_info_path = None + + # Data that cannot be obtained from CSV + try: + self.__cs_id = app.design_properties["ArrayDefinition"]["ArrayObject"]["ReferenceCSID"] + except AttributeError: # pragma: no cover + self.__cs_id = 1 + + self.__omodel = self.__app.get_oo_object(self.__app.odesign, "Model") + self.__oarray = self.__app.get_oo_object(self.__omodel, name) + self.__cells = None + self.__post_processing_cells = {} + + @pyaedt_function_handler() + def __getitem__(self, key): + """Get cell object corresponding to a key (row, column). + + Parameters + ---------- + key : tuple(int,int) + Row and column associated to the cell. + + Returns + ------- + :class:`pyaedt.modeler.cad.component_array.CellArray` + """ + + if key[0] > self.a_size or key[1] > self.b_size: + self.logger.error("Specified cell does not exist.") + return False + + if key[0] <= 0 or key[1] <= 0: + self.logger.error("Row and column index start with ``1``.") + return False + + return self.cells[key[0] - 1][key[1] - 1] + + @property + def component_names(self): + """List of component names.""" + return self.properties["component"] + + @property + def cells(self): + """List of :class:`pyaedt.modeler.cad.component_array.CellArray` objects.""" + if not self.update_cells: + return self.__cells + + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + else: + self.__app.save_project() + + self.__cells = [[None for _ in range(self.b_size)] for _ in range(self.a_size)] + array_props = self.properties + component_names = self.component_names + for row_cell in range(0, self.a_size): + for col_cell in range(0, self.b_size): + self.__cells[row_cell][col_cell] = CellArray(row_cell, col_cell, array_props, component_names, self) + return self.__cells + + @property + def name(self): + """Name of the array.""" + return self.__name + + @name.setter + def name(self, array_name): + if array_name not in self.__app.component_array_names: + if array_name != self.__name: + self.__oarray.SetPropValue("Name", array_name) + self.__app.component_array.update({array_name: self}) + self.__app.component_array_names = list(self.__app.omodelsetup.GetArrayNames()) + del self.__app.component_array[self.__name] + self.__name = array_name + else: # pragma: no cover + self.logger.warning("Name %s already assigned in the design", array_name) + + @property + def properties(self): + """Ordered dictionary of the properties of the component array.""" + # From 2024R1, array information can be loaded from a CSV + if self.__array_info_path and os.path.exists(self.__array_info_path): # pragma: no cover + res = self.parse_array_info_from_csv(self.__array_info_path) + else: + res = self.__get_properties_from_aedt() + return res + + @property + def post_processing_cells(self): + """Dictionary of each component's postprocessing cells.""" + if not self.__post_processing_cells: + self.__post_processing_cells = {} + component_info = {} + for row, row_info in enumerate(self.cells, start=1): + for col, col_info in enumerate(row_info, start=1): + name = col_info.component + component_info.setdefault(name, []).append([row, col]) + + for component_name, component_cells in component_info.items(): + if component_name not in self.__post_processing_cells.keys() and component_name is not None: + self.__post_processing_cells[component_name] = component_cells[0] + + return self.__post_processing_cells + + @post_processing_cells.setter + def post_processing_cells(self, val): + if isinstance(val, dict): + self.__post_processing_cells = val + self.edit_array() + else: # pragma: no cover + self.logger.error("Dictionary with component names and cell is not correct.") + + @property + def visible(self): + """Flag indicating if the array is visible.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Visible") + + @visible.setter + def visible(self, val): + self.__oarray.SetPropValue("Visible", val) + + @property + def show_cell_number(self): + """Flag indicating if the array cell number is shown.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Show Cell Number") + + @show_cell_number.setter + def show_cell_number(self, val): + self.__oarray.SetPropValue("Show Cell Number", val) + + @property + def render_choices(self): + """List of rendered name choices.""" + return list(self.__oarray.GetPropValue("Render/Choices")) + + @property + def render(self): + """Array rendering.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Render") + + @render.setter + def render(self, val): + if val not in self.render_choices: + self.logger.warning("Render value is not available.") + else: + self.__oarray.SetPropValue("Render", val) + + @property + def render_id(self): + """Array rendering ID.""" + res = self.render_choices.index(self.render) + return res + + @property + def a_vector_choices(self): + """List of name choices for vector A.""" + return list(self.__app.get_oo_property_value(self.__omodel, self.name, "A Vector/Choices")) + + @property + def b_vector_choices(self): + """List of name choices for vector B.""" + return list(self.__app.get_oo_property_value(self.__omodel, self.name, "B Vector/Choices")) + + @property + def a_vector_name(self): + """Name of vector A.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "A Vector") + + @a_vector_name.setter + def a_vector_name(self, val): + if val in self.a_vector_choices: + self.__oarray.SetPropValue("A Vector", val) + else: + self.logger.warning("A vector name not available") + + @property + def b_vector_name(self): + """Name of vector B.""" + return self.__oarray.GetPropValue("B Vector") + + @b_vector_name.setter + def b_vector_name(self, val): + if val in self.b_vector_choices: + self.__oarray.SetPropValue("B Vector", val) + else: + self.logger.warning("B vector name not available") + + @property + def a_size(self): + """Number of cells in the vector A direction.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "A Cell Count")) + + @a_size.setter + def a_size(self, val): # pragma: no cover + # Bug in 2024.1, not possible to change cell count. + # self._oarray.SetPropValue("A Cell Count", val) + self.logger.warning("A size cannot be modified.") + + @property + def b_size(self): + """Number of cells in the vector B direction.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "B Cell Count")) + + @b_size.setter + def b_size(self, val): # pragma: no cover + # Bug in 2024.1, not possible to change cell count. + # self._oarray.SetPropValue("B Cell Count", val) + self.logger.warning("B size cannot be modified.") + + @property + def padding_cells(self): + """Number of padding cells.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "Padding")) + + @padding_cells.setter + def padding_cells(self, val): + self.__oarray.SetPropValue("Padding", val) + + @property + def coordinate_system(self): + """Coordinate system name.""" + cs_dict = self.__map_coordinate_system_to_id() + res = "Global" + for name, cs_id in cs_dict.items(): + if cs_id == self.__cs_id: + res = name + if res == "Global": + self.logger.warning("Coordinate system is not loaded. Save the project.") + return res + + @coordinate_system.setter + def coordinate_system(self, name): + cs_dict = self.__map_coordinate_system_to_id() + if name not in cs_dict: + self.logger.warning("Coordinate system is not loaded. Save the project.") + else: + self.__cs_id = cs_dict[name] + self.edit_array() + + @pyaedt_function_handler() + def update_properties(self): + """Update component array properties. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + """ + # From 2024R1, array information can be loaded from a CSV, and this method is not needed. + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + else: + self.__app.save_project() + new_properties = self.properties + # TODO : post_processing_cells property can not be retrieved, so if the length of the components and the + # property is different, the method will reset the property. + if len(new_properties["component"]) != len(self.post_processing_cells): + self.__post_processing_cells = {} + new_properties = self.properties + return new_properties + + @pyaedt_function_handler() + def delete(self): + """Delete the component array. + + References + ---------- + + >>> oModule.DeleteArray + + """ + self.__app.omodelsetup.DeleteArray() + del self.__app.component_array[self.name] + self.__app.component_array_names = list(self.__app.get_oo_name(self.__app.odesign, "Model")) + + @pyaedt_function_handler() + def export_array_info(self, array_path=None): # pragma: no cover + """Export array information to a CSV file. + + Returns + ------- + str + Path of the CSV file. + + References + ---------- + + >>> oModule.ExportArray + + """ + if self.__app.settings.aedt_version < "2024.1": # pragma: no cover + self.logger.warning("This feature is not available in {}.".format(str(self.__app.settings.aedt_version))) + return False + + if not array_path: # pragma: no cover + array_path = os.path.join(self.__app.toolkit_directory, "array_info.csv") + self.__app.omodelsetup.ExportArray(self.name, array_path) + return array_path + + @pyaedt_function_handler() + def parse_array_info_from_csv(self, csv_file): # pragma: no cover + """Parse component array information from the CSV file. + + Parameters + ---------- + csv_file : str + Name of the CSV file. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + + Examples + -------- + >>> from pyaedt import Hfss + >>> aedtapp = Hfss(projectname="Array.aedt") + >>> array_names = aedtapp.component_array_names[0] + >>> array = aedtapp.component_array[array_names[0]] + >>> array_csv = array.export_array_info() + >>> array_info = array.array_info_parser(array_csv) + """ + + info = read_csv(csv_file) + if not info: + self.logger.error("Data from CSV file is not loaded.") + return False + + components = {} + array_matrix = [] + array_matrix_rotation = [] + array_matrix_active = [] + + # Components + start_str = ["Component Index", "Component Name"] + end_str = ["Source Row", "Source Column", "Source Name", "Magnitude", "Phase"] + + capture_data = False + line_cont = 0 + for element_data in info: + if element_data == start_str: + capture_data = True + elif element_data == end_str: + break + elif capture_data: + components[int(float(element_data[0]))] = element_data[1] + line_cont += 1 + + # Array matrix + start_str = ["Array", "Format: Component_index:Rotation_angle:Active_or_Passive"] + capture_data = False + + for element_data in info[line_cont + 1 :]: + if capture_data: + rows = element_data[:-1] + component_index = [] + rotation = [] + active_passive = [] + + for row in rows: + split_elements = row.split(":") + + # Check for non-empty strings + if split_elements[0]: + component_index.append(int(split_elements[0])) + else: + component_index.append(-1) + + # Some elements might not have the rotation and active/passive status, so we check for their + # existence + if split_elements[0] and len(split_elements) > 1: + string_part = re.findall("[a-zA-Z]+", split_elements[1]) + if string_part and string_part[0] == "deg": + rot = re.findall(r"[+-]?\d+\.\d+", split_elements[1]) + rotation.append(int(float(rot[0]))) + if len(split_elements) > 2: + active_passive.append(bool(int(split_elements[2]))) + else: + active_passive.append(True) + else: + active_passive.append(False) + rotation.append(0) + elif split_elements[0]: + active_passive.append(True) + rotation.append(0) + else: + active_passive.append(False) + rotation.append(0) + + array_matrix.append(component_index) + array_matrix_rotation.append(rotation) + array_matrix_active.append(active_passive) + elif element_data == start_str: + capture_data = True + res = OrderedDict() + res["component"] = components + res["active"] = array_matrix_active + res["rotation"] = array_matrix_rotation + res["cells"] = array_matrix + return res + + @pyaedt_function_handler() + def edit_array(self): + """Edit component array. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oModule.EditArray + """ + + args = [ + "NAME:" + self.name, + "Name:=", + self.name, + "UseAirObjects:=", + True, + "RowPrimaryBnd:=", + self.a_vector_name, + "ColumnPrimaryBnd:=", + self.b_vector_name, + "RowDimension:=", + self.a_size, + "ColumnDimension:=", + self.b_size, + "Visible:=", + self.visible, + "ShowCellNumber:=", + self.show_cell_number, + "RenderType:=", + self.render_id, + "Padding:=", + self.padding_cells, + "ReferenceCSID:=", + self.__cs_id, + ] + + cells = ["NAME:Cells"] + component_info = {} + cells_obj = self.cells[:] + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + name = col_info.component + component_info.setdefault(name, []).append([row, col]) + + for component_name, component_cells in component_info.items(): + if component_name: + cells.append(component_name + ":=") + component_cells_str = ", ".join(str(item) for item in component_cells) + cells.append([component_cells_str]) + + rotations = ["NAME:Rotation"] + component_rotation = {} + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + component_rotation.setdefault(col_info.rotation, []).append([row, col]) + + for rotation, rotation_cells in component_rotation.items(): + rotations.append(str(rotation) + " deg:=") + component_cells_str = ", ".join(str(item) for item in rotation_cells) + rotations.append([component_cells_str]) + + args.append(cells) + args.append(rotations) + + args.append("Active:=") + + component_active = [] + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + if col_info.is_active: + component_active.append([row, col]) + + if component_active: + args.append(", ".join(str(item) for item in component_active)) + else: # pragma: no cover + args.append("All") + + post = ["NAME:PostProcessingCells"] + for component_name, values in self.post_processing_cells.items(): + post.append(component_name + ":=") + post.append([str(values[0]), str(values[1])]) + args.append(post) + args.append("Colors:=") + col = [] + args.append(col) + self.__app.omodelsetup.EditArray(args) + return True + + @pyaedt_function_handler() + def get_cell(self, row, col): + """Get cell object corresponding to a row and column. + + Returns + ------- + :class:`pyaedt.modeler.cad.component_array.CellArray` + + """ + return self[row, col] + + @pyaedt_function_handler() + def lattice_vector(self): + """Get model lattice vector. + + Returns + ------- + list + List of starting point coordinates paired with ending point coordinates. + + References + ---------- + >>> oModule.GetLatticeVectors() + + """ + return self.__app.omodelsetup.GetLatticeVectors() + + @pyaedt_function_handler() + def __get_properties_from_aedt(self): + """Get array properties from an AEDT file. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + + """ + props = self.__app.design_properties + component_id = {} + user_defined_models = props["ModelSetup"]["GeometryCore"]["GeometryOperations"]["UserDefinedModels"][ + "UserDefinedModel" + ] + if not isinstance(user_defined_models, list): + user_defined_models = [user_defined_models] + for component_defined in user_defined_models: + component_id[component_defined["ID"]] = component_defined["Attributes"]["Name"] + + components_map = props["ArrayDefinition"]["ArrayObject"]["ComponentMap"] + components = {} + for c in components_map: + m = re.search(r"'(\d+)'=(\d+)", c) + components[int(m.group(1))] = component_id[int(m.group(2))] + res = OrderedDict() + res["component"] = components + res["active"] = props["ArrayDefinition"]["ArrayObject"]["Active"]["matrix"] + res["rotation"] = props["ArrayDefinition"]["ArrayObject"]["Rotation"]["matrix"] + res["cells"] = props["ArrayDefinition"]["ArrayObject"]["Cells"]["matrix"] + return res + + @pyaedt_function_handler() + def __map_coordinate_system_to_id(self): + """Map coordinate system to ID. + + Returns + ------- + dict + Coordinate system ID. + """ + res = {"Global": 1} + if self.__app.design_properties and "ModelSetup" in self.__app.design_properties: # pragma: no cover + cs = self.__app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] + for _, val in cs.items(): + try: + if isinstance(val, dict): + val = [val] + for ite in val: + name = ite["Attributes"]["Name"] + cs_id = ite["ID"] + res[name] = cs_id + except AttributeError: + pass + return res + + +class CellArray(object): + """Manages object attributes for a 3D component and a user-defined model. + + Parameters + ---------- + row : int + Row index of the cell. + col : int + Column index of the cell. + array_props : dict + Dictionary containing the properties of the array. + component_names : list + List of component names in the array. + array_obj : class:`pyaedt.modeler.cad.component_array.ComponentArray` + Instance of the array containing the cell. + + """ + + def __init__(self, row, col, array_props, component_names, array_obj): + self.__row = row + 1 + self.__col = col + 1 + self.__array_obj = array_obj + self.__cell_props = OrderedDict( + { + "component": array_props["cells"][row][col], + "active": array_props["active"][row][col], + "rotation": array_props["rotation"][row][col], + } + ) + self.__rotation = self.__cell_props["rotation"] + self.__is_active = self.__cell_props["active"] + + component_index = self.__cell_props["component"] + if component_index == -1: + self.__component = None + else: + self.__component = component_names[component_index] + + @property + def rotation(self): + """Rotation value of the cell object.""" + return self.__rotation + + @rotation.setter + def rotation(self, val): + if val in [0, 90, 180, 270]: + self.__rotation = val + self.__array_obj.update_cells = False + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: + self.__array_obj.logger.error("Rotation must be an integer. 0, 90, 180, and 270 degrees are available.") + + @property + def component(self): + """Component name of the cell object.""" + return self.__component + + @component.setter + def component(self, val): + component_names = self.__array_obj.component_names + if val in component_names.values() or val is None: + self.__array_obj.update_cells = False + if val is None: + post_processing_cells = self.__array_obj.post_processing_cells + for values in post_processing_cells: + if (values[0], values[1]) == (self.__row, self.__col): + flat_cell_list = [item for sublist in self.__array_obj.cells for item in sublist] + for cell in flat_cell_list: + if cell.component == self.component and cell.col != self.__col or cell.row != self.__row: + self.__array_obj.post_processing_cells[self.component] = [cell.row, cell.col] + break + break + self.__component = val + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: # pragma: no cover + self.__array_obj.logger.error("Component must be defined.") + + @property + def is_active(self): + """Flag indicating if the cell object is active or passive.""" + return self.__is_active + + @is_active.setter + def is_active(self, val): + if isinstance(val, bool): + self.__is_active = val + self.__array_obj.update_cells = False + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: + self.__array_obj.logger.error("Only Boolean type is allowed.") From c3183202dc97747b83553a2a3530cce3513f3aa0 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:05:46 +0100 Subject: [PATCH 61/78] improve the speed of IL computation in Touchstone parser (#3863) * improve the speed of IL computation in Touchstone parser * improve the speed of IL computation in Touchstone parser --------- Co-authored-by: maxcapodi78 --- pyaedt/generic/touchstone_parser.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pyaedt/generic/touchstone_parser.py b/pyaedt/generic/touchstone_parser.py index 9ccdbdeb0c5..3650790a729 100644 --- a/pyaedt/generic/touchstone_parser.py +++ b/pyaedt/generic/touchstone_parser.py @@ -104,10 +104,12 @@ def get_insertion_loss_index(self, threshold=-3): """ temp_list = [] freq_idx = 0 + s_db = self.s_db[freq_idx, :, :] for i in self.port_tuples: - loss = self.s_db[freq_idx, i[0], i[1]] - if loss > threshold: - temp_list.append(i) + if i[0] != i[1]: + loss = s_db[i[0], i[1]] + if loss > threshold: + temp_list.append(i) return temp_list def plot_insertion_losses(self, threshold=-3, plot=True): @@ -126,13 +128,7 @@ def plot_insertion_losses(self, threshold=-3, plot=True): list List of tuples representing insertion loss excitations. """ - temp_list = [] - freq_idx = 0 - for i in self.port_tuples: - loss = self.s_db[freq_idx, i[0], i[1]] - if loss > threshold: - temp_list.append(i) - + temp_list = self.get_insertion_loss_index(threshold=threshold) if plot: # pragma: no cover for i in temp_list: self.plot_s_db(*i, logx=self.log_x) From 7b692a270160e2a06c214cd735d023b62ad76e97 Mon Sep 17 00:00:00 2001 From: svandenb-dev <74993647+svandenb-dev@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:14:31 +0100 Subject: [PATCH 62/78] Replace rlc with gap port bug fix (#3862) * edb intersection bug fix * replace rlc by gap port bug fix --- _unittest/test_00_EDB.py | 4 +++- pyaedt/edb_core/components.py | 32 +++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index e1ea1b7ee2b..b926ebd088d 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -1118,8 +1118,10 @@ def test_086_set_component_type(self): assert comp.type == "Other" def test_087_deactivate_rlc(self): - assert self.edbapp.components.deactivate_rlc_component(component="C1", create_circuit_port=True) + assert self.edbapp.components.deactivate_rlc_component(component="C1", create_circuit_port=False) + assert self.edbapp.ports["C1"] assert self.edbapp.components["C1"].is_enabled is False + assert self.edbapp.components.deactivate_rlc_component(component="C2", create_circuit_port=True) self.edbapp.components["C2"].is_enabled = False assert self.edbapp.components["C2"].is_enabled is False self.edbapp.components["C2"].is_enabled = True diff --git a/pyaedt/edb_core/components.py b/pyaedt/edb_core/components.py index c74daf2c054..6e77eef40ea 100644 --- a/pyaedt/edb_core/components.py +++ b/pyaedt/edb_core/components.py @@ -1057,7 +1057,7 @@ def deactivate_rlc_component(self, component=None, create_circuit_port=False): >>> from pyaedt import Edb >>> edb_file = r'C:\my_edb_file.aedb' >>> edb = Edb(edb_file) - >>> for cmp in list(edb.components.components.keys()): + >>> for cmp in list(edb.components.instances.keys()): >>> edb.components.deactivate_rlc_component(component=cmp, create_circuit_port=False) >>> edb.save_edb() >>> edb.close_edb() @@ -1078,12 +1078,10 @@ def deactivate_rlc_component(self, component=None, create_circuit_port=False): self._logger.info("Component %s passed to deactivate is not an RLC.", component.refdes) return False component.is_enabled = False - if create_circuit_port: - return self.add_port_on_rlc_component(component.refdes) - return True + return self.add_port_on_rlc_component(component=component.refdes, circuit_ports=create_circuit_port) @pyaedt_function_handler() - def add_port_on_rlc_component(self, component=None): + def add_port_on_rlc_component(self, component=None, circuit_ports=True): """Deactivate RLC component and replace it with a circuit port. The circuit port supports only 2-pin components. @@ -1092,6 +1090,10 @@ def add_port_on_rlc_component(self, component=None): component : str Reference designator of the RLC component. + circuit_ports : bool + ``True`` will replace RLC component by circuit ports, ``False`` gap ports compatible with HFSS 3D modeler + export. + Returns ------- bool @@ -1108,35 +1110,43 @@ def add_port_on_rlc_component(self, component=None): pt = self._pedb.point_data(*pos_pin_loc) pin_layers = self._padstack._get_pin_layer_range(pins[0]) - pos_pin_term = self._pedb.edb_api.cell.terminal.PointTerminal.Create( + pos_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create( self._active_layout, pins[0].GetNet(), "{}_{}".format(component.refdes, pins[0].GetName()), - pt, + pins[0], pin_layers[0], + False, ) if not pos_pin_term: # pragma: no cover return False neg_pin_loc = self.get_pin_position(pins[1]) pt = self._pedb.point_data(*neg_pin_loc) - neg_pin_term = self._pedb.edb_api.cell.terminal.PointTerminal.Create( + neg_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create( self._active_layout, pins[1].GetNet(), "{}_{}_ref".format(component.refdes, pins[1].GetName()), - pt, + pins[1], pin_layers[0], + False, ) if not neg_pin_term: # pragma: no cover return False pos_pin_term.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) - pos_pin_term.SetIsCircuitPort(True) pos_pin_term.SetName(component.refdes) neg_pin_term.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) - neg_pin_term.SetIsCircuitPort(True) pos_pin_term.SetReferenceTerminal(neg_pin_term) + if circuit_ports: + pos_pin_term.SetIsCircuitPort(True) + neg_pin_term.SetIsCircuitPort(True) + else: + pos_pin_term.SetIsCircuitPort(False) + neg_pin_term.SetIsCircuitPort(False) + self._logger.info("Component {} has been replaced by port".format(component.refdes)) return True + return False @pyaedt_function_handler() def add_rlc_boundary(self, component=None, circuit_type=True): From 7c9af4bc770762802a3ef83c7973e1a3a7d062ce Mon Sep 17 00:00:00 2001 From: svandenb-dev <74993647+svandenb-dev@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:59:52 +0100 Subject: [PATCH 63/78] Create port on pin enhancement (#3858) * edb intersection bug fix * create port on pin -> port name option added --- pyaedt/edb_core/components.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/pyaedt/edb_core/components.py b/pyaedt/edb_core/components.py index 6e77eef40ea..3d492a36528 100644 --- a/pyaedt/edb_core/components.py +++ b/pyaedt/edb_core/components.py @@ -713,7 +713,7 @@ def create_source_on_component(self, sources=None): return True @pyaedt_function_handler() - def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): + def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0, port_name=None): """Create circuit port between pins and reference ones. Parameters @@ -732,6 +732,8 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): str, [str], EDBPadstackInstance, [EDBPadstackInstance] impedance : Port impedance str, float + port_name : Port Name (Optional) when provided will overwrite the default naming convention + str Returns ------- @@ -767,6 +769,8 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): if not len([pin for pin in pins if isinstance(pin, EDBPadstackInstance)]) == len(pins): self._logger.error("Pin list must contain only pins instances") return + if not port_name: + port_name = "Port_{}_{}".format(pins[0].net_name, pins[0].name) if len([pin for pin in reference_pins if isinstance(pin, str)]) == len(reference_pins): ref_cmp_pins = [] for ref_pin_name in reference_pins: @@ -781,17 +785,17 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): if len(pins) > 1: group_name = "group_{}_{}".format(pins[0].net_name, pins[0].name) pin_group = self.create_pingroup_from_pins(pins, group_name) - term = self._create_pin_group_terminal(pingroup=pin_group) + term = self._create_pin_group_terminal(pingroup=pin_group, term_name=port_name) else: - term = self._create_terminal(pins[0]) + term = self._create_terminal(pins[0], term_name=port_name) term.SetIsCircuitPort(True) if len(reference_pins) > 1: ref_group_name = "group_{}_{}_ref".format(reference_pins[0].net_name, reference_pins[0].name) ref_pin_group = self.create_pingroup_from_pins(reference_pins, ref_group_name) - ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group) + ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group, term_name=port_name + "_ref") else: - ref_term = self._create_terminal(reference_pins[0]) + ref_term = self._create_terminal(reference_pins[0], term_name=port_name + "_ref") ref_term.SetIsCircuitPort(True) term.SetImpedance(self._edb.utility.value(impedance)) term.SetReferenceTerminal(ref_term) @@ -820,7 +824,7 @@ def create_port_on_component( False will take the closest reference pin and generate one port per signal pin. refnet : string or list of string. list of the reference net. - port_name : string + port_name : str Port name for overwriting the default port-naming convention, which is ``[component][net][pin]``. The port name must be unique. If a port with the specified name already exists, the @@ -933,13 +937,16 @@ def create_port_on_component( return True @pyaedt_function_handler() - def _create_terminal(self, pin): + def _create_terminal(self, pin, term_name=None): """Create terminal on component pin. Parameters ---------- pin : Edb padstack instance. + term_name : Terminal name (Optional). + str. + Returns ------- Edb terminal. @@ -951,7 +958,8 @@ def _create_terminal(self, pin): cmp_name = pin.GetComponent().GetName() net_name = pin.GetNet().GetName() pin_name = pin.GetName() - term_name = "{}.{}.{}".format(cmp_name, pin_name, net_name) + if term_name is None: + term_name = "{}.{}.{}".format(cmp_name, pin_name, net_name) for term in list(self._pedb.active_layout.Terminals): if term.GetName() == term_name: return term @@ -1223,7 +1231,7 @@ def add_rlc_boundary(self, component=None, circuit_type=True): return True @pyaedt_function_handler() - def _create_pin_group_terminal(self, pingroup, isref=False): + def _create_pin_group_terminal(self, pingroup, isref=False, term_name=None): """Creates an EDB pin group terminal from a given EDB pin group. Parameters @@ -1232,14 +1240,16 @@ def _create_pin_group_terminal(self, pingroup, isref=False): isref : bool + term_name : Terminal name (Optional). If not provided default name is Component name, Pin name, Net name. + str. + Returns ------- Edb pin group terminal. """ pin = list(pingroup.GetPins())[0] - term_name = "{}.{}.{}".format( - pin.GetComponent().GetName(), pin.GetComponent().GetName(), pin.GetNet().GetName() - ) + if term_name is None: + term_name = "{}.{}.{}".format(pin.GetComponent().GetName(), pin.GetName(), pin.GetNet().GetName()) for t in list(self._pedb.active_layout.Terminals): if t.GetName() == term_name: return t From 4b63b48561d2cb18df22a5877937908a66676285 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Fri, 10 Nov 2023 19:16:19 +0100 Subject: [PATCH 64/78] refacto export_touchstone hfss3d (#3867) --- pyaedt/hfss3dlayout.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pyaedt/hfss3dlayout.py b/pyaedt/hfss3dlayout.py index 96b9860b64a..edbb836c5af 100644 --- a/pyaedt/hfss3dlayout.py +++ b/pyaedt/hfss3dlayout.py @@ -777,7 +777,15 @@ def create_scattering( @pyaedt_function_handler() def export_touchstone( - self, setup_name=None, sweep_name=None, file_name=None, variations=None, variations_value=None + self, + setup_name=None, + sweep_name=None, + file_name=None, + variations=None, + variations_value=None, + renormalization=False, + impedance=None, + gamma_impedance_comments=False, ): """Export a Touchstone file. @@ -797,6 +805,15 @@ def export_touchstone( variations_value : list, optional List of all parameter variation values. For example, ``["22cel", "100"]``. The default is ``None``. + renormalization : bool, optional + Perform renormalization before export. + The default is ``False``. + impedance : float, optional + Real impedance value in ohm, for renormalization, if not specified considered 50 ohm. + The default is ``None``. + gamma_impedance_comments : bool, optional + Include Gamma and Impedance values in comments. + The default is ``False``. Returns ------- @@ -814,6 +831,9 @@ def export_touchstone( file_name=file_name, variations=variations, variations_value=variations_value, + renormalization=renormalization, + impedance=impedance, + comments=gamma_impedance_comments, ) @pyaedt_function_handler() From 66bf62e7f91a0f5c876d511acb8f975671899624 Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Mon, 13 Nov 2023 06:17:09 -0500 Subject: [PATCH 65/78] Improve condition based on Boolean value. (#3869) * Comparison to should be * Fix documentation for modeler and touchstone parser. * Remove ruff. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- pyaedt/generic/touchstone_parser.py | 2 +- pyaedt/modeler/advanced_cad/oms.py | 4 ++-- pyaedt/modeler/cad/Modeler.py | 8 ++++---- pyproject.toml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pyaedt/generic/touchstone_parser.py b/pyaedt/generic/touchstone_parser.py index 3650790a729..75a506b89fc 100644 --- a/pyaedt/generic/touchstone_parser.py +++ b/pyaedt/generic/touchstone_parser.py @@ -460,7 +460,7 @@ def get_worst_curve(self, freq_min=None, freq_max=None, worst_is_higher=True, cu @pyaedt_function_handler() def read_touchstone(file_path): - """Load the contents of a Touchstone file into an NPort + """Load the contents of a Touchstone file into an NPort. Parameters ---------- diff --git a/pyaedt/modeler/advanced_cad/oms.py b/pyaedt/modeler/advanced_cad/oms.py index 48674e53004..9f230692036 100644 --- a/pyaedt/modeler/advanced_cad/oms.py +++ b/pyaedt/modeler/advanced_cad/oms.py @@ -191,9 +191,9 @@ def generate_buildings(self, center_lat_lon, terrain_mesh, max_radius=500): # create closed and filled polygon from outline of building roof = self.create_building_roof(points) - if np.isnan(float(h)) == False: + if np.isnan(float(h)) is False: extrude_h = float(h) * 2 - elif np.isnan(float(l)) == False: + elif np.isnan(float(l)) is False: extrude_h = float(l) * 10 else: extrude_h = 15.0 diff --git a/pyaedt/modeler/cad/Modeler.py b/pyaedt/modeler/cad/Modeler.py index 8714124a50b..b8feba49549 100644 --- a/pyaedt/modeler/cad/Modeler.py +++ b/pyaedt/modeler/cad/Modeler.py @@ -431,7 +431,7 @@ def props(self): @property def _part_name(self): - """Internally get the part name which the face belongs to""" + """Internally get the part name which the face belongs to.""" if not self.face_id: # face_id has not been defined yet return None @@ -596,7 +596,7 @@ def create( @pyaedt_function_handler() def _get_type_from_id(self, obj_id): - """Get the entity type from the id""" + """Get the entity type from the id.""" for obj in self._modeler.objects.values(): if obj.id == obj_id: return "3dObject" @@ -613,7 +613,7 @@ def _get_type_from_id(self, obj_id): @pyaedt_function_handler() def _get_type_from_object(self, obj): - """Get the entity type from the object""" + """Get the entity type from the object.""" if type(obj) is FacePrimitive: return "Face" elif type(obj) is EdgePrimitive: @@ -1640,7 +1640,7 @@ def update(self): @pyaedt_function_handler() def _get_type_from_id(self, obj_id): - """Get the entity type from the id""" + """Get the entity type from the id.""" for obj in self._modeler.objects.values(): if obj.id == obj_id: return "3dObject" diff --git a/pyproject.toml b/pyproject.toml index 6bd31d0a1f7..ad022e8fe18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -206,4 +206,4 @@ exclude = [ '\.Modeler3D\.create_choke$', # bad RT05 '\._unittest\', # missing docstring for tests 'HistoryProps.', # bad RT05 because of the base class named OrderedDict -] +] \ No newline at end of file From 07626f98f4b16ee7ae0ed303ac35932868d56395 Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Mon, 13 Nov 2023 16:59:43 +0100 Subject: [PATCH 66/78] Add recirculation boundary function (#3870) * Add recirculation boundary create and edit * add assign_recirculation_opening * add recirculation test * update name in example * add dictionary support * improve input arguments handling * add dictionary test * improve recirculation opening test * fix docstring * improve coverage * improve coverage --- _unittest/test_98_Icepak.py | 59 ++++++++++++ pyaedt/icepak.py | 179 ++++++++++++++++++++++++++++++++++++ pyaedt/modules/Boundary.py | 4 + 3 files changed, 242 insertions(+) diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index b9d858fb6ea..5c35da5e11c 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -1278,3 +1278,62 @@ def test_68_mesh_priority_3d_comp(self, add_app): assert app.mesh.add_priority(entity_type=2, comp_name="all_3d_objects1", priority=2) app.close_project(name="3d_comp_mesh_prio_test", save_project=False) + + def test_69_recirculation_boundary(self): + box = self.aedtapp.modeler.create_box([5, 5, 5], [1, 2, 3], "BlockBoxEmpty", "copper") + box.solve_inside = False + assert not self.aedtapp.assign_recirculation_opening( + [box.top_face_x, box.bottom_face_x, box.bottom_face_y], box.top_face_x, flow_assignment="10kg_per_s_m2" + ) + assert self.aedtapp.assign_recirculation_opening( + [box.top_face_x, box.bottom_face_x], box.top_face_x, conductance_external_temperature="25cel" + ) + assert self.aedtapp.assign_recirculation_opening( + [box.top_face_x, box.bottom_face_x], box.top_face_x, start_time="0s" + ) + self.aedtapp.solution_type = "Transient" + assert self.aedtapp.assign_recirculation_opening([box.top_face_x, box.bottom_face_x], box.top_face_x) + assert self.aedtapp.assign_recirculation_opening([box.top_face_x.id, box.bottom_face_x.id], box.top_face_x.id) + assert not self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Conductance", + flow_direction=[1], + ) + temp_dict = {"Function": "Square Wave", "Values": ["1cel", "0s", "1s", "0.5s", "0cel"]} + flow_dict = {"Function": "Sinusoidal", "Values": ["0kg_per_s_m2", 1, 1, "1s"]} + recirc = self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Temperature", + assignment_value=temp_dict, + flow_assignment=flow_dict, + ) + assert recirc + assert recirc.update() + self.aedtapp.solution_type = "SteadyState" + assert not self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Temperature", + assignment_value=temp_dict, + flow_assignment=flow_dict, + ) + assert not self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Temperature", + flow_direction="Side", + ) + assert self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Temperature", + flow_direction=[0, 1, 0], + ) + assert not self.aedtapp.assign_recirculation_opening( + [box.top_face_x.id, box.bottom_face_x.id], + box.top_face_x.id, + thermal_specification="Temperature", + flow_assignment=flow_dict, + ) diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index 474ba02677e..0690a92e050 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -4869,3 +4869,182 @@ def assign_symmetry_wall( raise SystemExit except (GrpcApiError, SystemExit): return None + + @pyaedt_function_handler() + def assign_recirculation_opening(self, face_list, extract_face, thermal_specification="Temperature", + assignment_value="0cel", conductance_external_temperature=None, + flow_specification="Mass Flow", flow_assignment="0kg_per_s_m2", + flow_direction=None, start_time=None, end_time=None, boundary_name=None): + """Assign recirculation faces. + + Parameters + ---------- + face_list : list + List of modeler.cad.elements3d.FacePrimitive or of integers + containing faces ids. + extract_face : modeler.cad.elements3d.FacePrimitive, int + Face of the face on the extract side. + thermal_specification : str, optional + Type of the thermal assignment across the two recirculation + faces. Options are ``"Conductance"``, ``"Heat Input"`` and + ``"Temperature"``. Default is ``"Temperature"``. + assignment_value : str or dict, optional + String with value and units of the thermal assignment. For a + transient assignment, a dictionary can be used. The dictionary + should contain two keys: ``"Function"`` and ``"Values"``. + - For the ``"Function"`` key, acceptable values are + ``"Exponential"``, ``"Linear"``, ``"Piecewise Linear"``, + ``"Power Law"``, ``"Sinusoidal"``, and ``"Square Wave"``. + - For the ``"Values"`` key, a list of strings containing the + parameters required by the ``"Function"`` key selection. For + example, when``"Linear"`` is set as the ``"Function"`` key, two + parameters are required: the value of the variable at t=0 and the + slope of the line. For the parameters required by each + ``"Function"`` key selection, see the Icepak documentation. + The parameters must contain the units where needed. + The default value is ``"0cel"``. + conductance_external_temperature : str, optional + External temperature value, needed if ``thermal_specification`` + is set to ``"Conductance"``. Default is ``None``. + flow_specification : str, optional + Flow specification for the recirculation zone. Available + options are: ``"Mass Flow"``, ``"Mass Flux"``, and + ``"Volume Flow"``. The default value is ``"Mass Flow"``. + flow_assignment : str or dict, optional + String with value and units of the flow assignment. For a + transient assignment, a dictionary can be used. The dictionary + should contain two keys: ``"Function"`` and ``"Values"``. + - For the ``"Function"`` key, acceptable values are + ``"Exponential"``, ``"Linear"``, ``"Piecewise Linear"``, + ``"Power Law"``, ``"Sinusoidal"``, and ``"Square Wave"``. + - For the ``"Values"`` key, a list of strings containing the + parameters required by the ``"Function"`` key selection. For + example, when``"Linear"`` is set as the ``"Function"`` key, two + parameters are required: the value of the variable at t=0 and the + slope of the line. For the parameters required by each + ``"Function"`` key selection, see the Icepak documentation. + The parameters must contain the units where needed. + The default value is ``"0kg_per_s_m2"``. + flow_direction : list, optional + Flow direction enforced at the recirculation zone. The default value + is ``None`` in which case the normal direction is used. + start_time : str, optional + Start of the time interval. Relevant only if the simulation is + transient. The default value is ``"0s"``. + end_time : str, optional + End of the time interval. Relevant only if the simulation is + transient. The default value is ``"0s"``. + boundary_name : str, optional + Name of the recirculation boundary. The default is ``None``, in + which case the boundary is automatically generated. + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Boundary object when successful or ``None`` when failed. + + References + ---------- + + >>> oModule.AssignRecircBoundary + + Examples + -------- + >>> from pyaedt import Icepak + >>> ipk = Icepak() + >>> ipk.solution_type = "Transient" + >>> box = ipk.modeler.create_box([5, 5, 5], [1, 2, 3], "BlockBoxEmpty", "copper") + >>> box.solve_inside = False + >>> recirc = ipk.assign_recirculation_opening([box.top_face_x, box.bottom_face_x], box.top_face_x, + >>> flow_assignment="10kg_per_s_m2") + + """ + if not len(face_list) == 2: + self.logger.error("Recirculation boundary condition must be assigned to two faces.") + return False + if conductance_external_temperature is not None and thermal_specification is not "Conductance": + self.logger.warning( + '``conductance_external_temperature`` will not have any effect unless the ``thermal_specification`` ' + 'is ``"Conductance"``.') + if conductance_external_temperature is not None and thermal_specification is not "Conductance": + self.logger.warning( + '``conductance_external_temperature`` needs to be specified when ``thermal_specification`` ' + 'is ``"Conductance"``. Setting ``conductance_external_temperature`` to ``"AmbientTemp"``.') + if (start_time is not None or end_time is not None) and not self.solution_type == "Transient": + self.logger.warning( + '``start_time`` and ``end_time`` will not have any effect unless for steady-state simulations.') + elif self.solution_type == "Transient" and not (start_time and end_time): + self.logger.warning( + '``start_time`` and ``end_time`` should be declared for transient simulations. Setting them to "0s".') + start_time = "0s" + end_time = "0s" + assignment_dict = { + "Conductance": "Conductance", + "Heat Input": "Heat Flow", + "Temperature": "Temperature Change" + } + props = {} + if not isinstance(face_list[0], int): + face_list = [f.id for f in face_list] + props["Faces"] = face_list + if isinstance(extract_face, int): + extract_face = [extract_face] + else: + extract_face = [extract_face.id] + props["ExtractFace"] = extract_face + props["Thermal Condition"] = thermal_specification + if isinstance(assignment_value, dict): + if not self.solution_type == "Transient": + self.logger.error("Transient assignment is supported only in transient designs.") + return None + assignment = self._parse_variation_data( + assignment_dict[thermal_specification], + "Transient", + variation_value=assignment_value["Values"], + function=assignment_value["Function"], + ) + props.update(assignment) + else: + props[assignment_dict[thermal_specification]] = assignment_value + if thermal_specification == "Conductance": + props["External Temp"] = conductance_external_temperature + if isinstance(flow_assignment, dict): + if not self.solution_type == "Transient": + self.logger.error("Transient assignment is supported only in transient designs.") + return None + assignment = self._parse_variation_data( + flow_specification + " Rate", + "Transient", + variation_value=flow_assignment["Values"], + function=flow_assignment["Function"], + ) + props.update(assignment) + else: + props[flow_specification + " Rate"] = flow_assignment + if flow_direction is None: + props["Supply Flow Direction"] = "Normal" + else: + props["Supply Flow Direction"] = "Specified" + if not (isinstance(flow_direction, list)): + self.logger.error("``flow_direction`` can be only ``None`` or a list of strings or floats.") + return False + elif len(flow_direction) != 3: + self.logger.error("``flow_direction`` must have only three components.") + return False + for direction, val in zip(["X", "Y", "Z"], flow_direction): + props[direction] = str(val) + if self.solution_type == "Transient": + props["Start"] = start_time + props["End"] = end_time + if not boundary_name: + boundary_name = generate_unique_name("Recirculating") + + bound = BoundaryObject(self, boundary_name, props, "Recirculating") + try: + if bound.create(): + self._boundaries[bound.name] = bound + return bound + else: # pragma: no cover + raise SystemExit + except (GrpcApiError, SystemExit): # pragma: no cover + return None diff --git a/pyaedt/modules/Boundary.py b/pyaedt/modules/Boundary.py index 630fd3937cf..fccfc365197 100644 --- a/pyaedt/modules/Boundary.py +++ b/pyaedt/modules/Boundary.py @@ -556,6 +556,8 @@ def create(self): self._app.oboundary.AssignStationaryWallBoundary(self._get_args()) elif bound_type == "Symmetry Wall": self._app.oboundary.AssignSymmetryWallBoundary(self._get_args()) + elif bound_type == "Recirculating": + self._app.oboundary.AssignRecircBoundary(self._get_args()) elif bound_type == "Resistance": self._app.oboundary.AssignResistanceBoundary(self._get_args()) elif bound_type == "Conducting Plate": @@ -728,6 +730,8 @@ def update(self): self._app.oboundary.EditStationaryWallBoundary(self._boundary_name, self._get_args()) # pragma: no cover elif bound_type == "Symmetry Wall": self._app.oboundary.EditSymmetryWallBoundary(self._boundary_name, self._get_args()) # pragma: no cover + elif bound_type == "Recirculating": + self._app.oboundary.EditRecircBoundary(self._boundary_name, self._get_args()) elif bound_type == "Resistance": self._app.oboundary.EditResistanceBoundary(self._boundary_name, self._get_args()) # pragma: no cover elif bound_type == "Conducting Plate": From 94e72ee4be9b7f45b7fd8865949ca956767ac3ea Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 08:57:36 +0000 Subject: [PATCH 67/78] [pre-commit.ci] pre-commit autoupdate (#3874) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/psf/black: 23.10.1 → 23.11.0](https://github.com/psf/black/compare/23.10.1...23.11.0) * Update .pre-commit-config.yaml --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3b7ba2393c4..e49a24303f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ exclude: | repos: - repo: https://github.com/psf/black - rev: 23.10.1 # IF VERSION CHANGES --> MODIFY "blacken-docs" MANUALLY AS WELL!! + rev: 23.11.0 # IF VERSION CHANGES --> MODIFY "blacken-docs" MANUALLY AS WELL!! hooks: - id: black args: @@ -61,7 +61,7 @@ repos: rev: 1.16.0 hooks: - id: blacken-docs - additional_dependencies: [black==23.10.1] + additional_dependencies: [black==23.11.0] # - repo: https://github.com/numpy/numpydoc From 55bbb978cfe86b2eeee5e79fd4eaa95fdcfb9bc9 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 14 Nov 2023 11:44:37 +0100 Subject: [PATCH 68/78] Reduce default Roughness nodule radius (#3875) Deprecate is_used_variable method --- _unittest/test_09_VariableManager.py | 2 ++ pyaedt/application/Variables.py | 26 ++++++++++++++++++++++++-- pyaedt/modules/LayerStackup.py | 6 +++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/_unittest/test_09_VariableManager.py b/_unittest/test_09_VariableManager.py index 1fd01c51075..cd8e828b5c6 100644 --- a/_unittest/test_09_VariableManager.py +++ b/_unittest/test_09_VariableManager.py @@ -668,6 +668,8 @@ def test_32_delete_unused_variables(self): self.aedtapp.modeler.create_rectangle(0, ["used_var", "used_var", "used_var"], [10, 20]) mat1 = self.aedtapp.materials.add_material("new_copper2") mat1.permittivity = "$project_used_var" + assert self.aedtapp.variable_manager.is_used("used_var") + assert not self.aedtapp.variable_manager.is_used("unused_var") assert self.aedtapp.variable_manager.delete_variable("unused_var") self.aedtapp["unused_var"] = "1mm" number_of_variables = len(self.aedtapp.variable_manager.variable_names) diff --git a/pyaedt/application/Variables.py b/pyaedt/application/Variables.py index 48257aaadcd..e9cd41646af 100644 --- a/pyaedt/application/Variables.py +++ b/pyaedt/application/Variables.py @@ -19,6 +19,7 @@ import os import re import types +import warnings from pyaedt import pyaedt_function_handler from pyaedt.generic.constants import AEDT_UNITS @@ -1237,7 +1238,7 @@ def delete_variable(self, var_name): return False @pyaedt_function_handler() - def is_used_variable(self, var_name): + def is_used(self, var_name): """Find if a variable is used. Parameters @@ -1268,6 +1269,27 @@ def is_used_variable(self, var_name): return used return used + @pyaedt_function_handler() + def is_used_variable(self, var_name): + """Find if a variable is used. + + .. deprecated:: 0.7.4 + Use :func:`is_used` method instead. + + Parameters + ---------- + var_name : str + Name of the variable. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + """ + warnings.warn("`is_used_variable` is deprecated. Use `is_used` method instead.", DeprecationWarning) + return self.is_used(var_name) + def _find_used_variable_history(self, history, var_name): """Find if a variable is used. @@ -1307,7 +1329,7 @@ def delete_unused_variables(self): var_list = self.variable_names for var in var_list[:]: - if not self.is_used_variable(var): + if not self.is_used(var): self.delete_variable(var) return True diff --git a/pyaedt/modules/LayerStackup.py b/pyaedt/modules/LayerStackup.py index fed46ca06fc..05e010c8536 100644 --- a/pyaedt/modules/LayerStackup.py +++ b/pyaedt/modules/LayerStackup.py @@ -160,13 +160,13 @@ def __init__(self, app, layertype="signal", negative=False): # Rough option self._user = False self._RMdl = "Huray" - self._NR = 0.5 + self._NR = 0.0005 self._HRatio = 2.9 self._BRMdl = "Huray" - self._BNR = 0.5 + self._BNR = 0.0005 self._BHRatio = 2.9 self._SRMdl = "Huray" - self._SNR = 0.5 + self._SNR = 0.0005 self._SHRatio = 2.9 # Solver option self._usp = False From ddcc3d71234e4bb3017a4cad5c990cba904ca5e5 Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:34:17 +0100 Subject: [PATCH 69/78] Add blower bc function (#3872) * Add recirculation boundary create and edit * add assign_recirculation_opening * add recirculation test * update name in example * add dictionary support * improve input arguments handling * add dictionary test * add "blower" in create and update functions * add functions to create blower * add blower tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add pragma nocover * update docstring * fix indentation * add no cover to GrpcApiError * Update pyaedt/icepak.py * Update pyaedt/icepak.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- _unittest/test_98_Icepak.py | 13 +++ pyaedt/icepak.py | 212 +++++++++++++++++++++++++++++++----- pyaedt/modules/Boundary.py | 4 + 3 files changed, 203 insertions(+), 26 deletions(-) diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index 5c35da5e11c..8779be60eb9 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -1337,3 +1337,16 @@ def test_69_recirculation_boundary(self): thermal_specification="Temperature", flow_assignment=flow_dict, ) + + def test_70_blower_boundary(self): + cylinder = self.aedtapp.modeler.create_cylinder(cs_axis="X", position=[0, 0, 0], radius=10, height=1) + curved_face = [f for f in cylinder.faces if not f.is_planar] + planar_faces = [f for f in cylinder.faces if f.is_planar] + assert not self.aedtapp.assign_blower_type1(curved_face + planar_faces, planar_faces, [10, 5, 0], [0, 1, 2, 4]) + blower = self.aedtapp.assign_blower_type1( + [f.id for f in curved_face + planar_faces], [f.id for f in planar_faces], [10, 5, 0], [0, 2, 4] + ) + assert blower + assert blower.update() + box = self.aedtapp.modeler.create_box([5, 5, 5], [1, 2, 3], "BlockBoxEmpty", "copper") + assert self.aedtapp.assign_blower_type2([box.faces[0], box.faces[1]], [box.faces[0]], [10, 5, 0], [0, 2, 4]) diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index 0690a92e050..1a9fa26fd00 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -4880,44 +4880,45 @@ def assign_recirculation_opening(self, face_list, extract_face, thermal_specific Parameters ---------- face_list : list - List of modeler.cad.elements3d.FacePrimitive or of integers - containing faces ids. + List of face primitive objects or a list of integers + containing faces IDs. extract_face : modeler.cad.elements3d.FacePrimitive, int - Face of the face on the extract side. + ID of the face on the extract side. thermal_specification : str, optional Type of the thermal assignment across the two recirculation - faces. Options are ``"Conductance"``, ``"Heat Input"`` and - ``"Temperature"``. Default is ``"Temperature"``. + faces. The default is ``"Temperature"``. Options are + ``"Conductance"``, ``"Heat Input"``, and ``"Temperature"``. assignment_value : str or dict, optional String with value and units of the thermal assignment. For a transient assignment, a dictionary can be used. The dictionary should contain two keys: ``"Function"`` and ``"Values"``. - - For the ``"Function"`` key, acceptable values are + - For the ``"Function"`` key, options are ``"Exponential"``, ``"Linear"``, ``"Piecewise Linear"``, ``"Power Law"``, ``"Sinusoidal"``, and ``"Square Wave"``. - - For the ``"Values"`` key, a list of strings containing the + - For the ``"Values"`` key, provide a list of strings containing the parameters required by the ``"Function"`` key selection. For - example, when``"Linear"`` is set as the ``"Function"`` key, two + example, when ``"Linear"`` is set as the ``"Function"`` key, two parameters are required: the value of the variable at t=0 and the - slope of the line. For the parameters required by each - ``"Function"`` key selection, see the Icepak documentation. + slope of the line. For the parameters required by each ``"Function"`` + key selection, see the Icepak documentation. The parameters must contain the units where needed. The default value is ``"0cel"``. conductance_external_temperature : str, optional - External temperature value, needed if ``thermal_specification`` - is set to ``"Conductance"``. Default is ``None``. + External temperature value, which is needed if + ``thermal_specification`` is set to ``"Conductance"``. + The default is ``None``. flow_specification : str, optional - Flow specification for the recirculation zone. Available - options are: ``"Mass Flow"``, ``"Mass Flux"``, and - ``"Volume Flow"``. The default value is ``"Mass Flow"``. + Flow specification for the recirculation zone. The default is + ``"Mass Flow"``. Options are: ``"Mass Flow"``, ``"Mass Flux"``, + and ``"Volume Flow"``. flow_assignment : str or dict, optional - String with value and units of the flow assignment. For a + String with the value and units of the flow assignment. For a transient assignment, a dictionary can be used. The dictionary should contain two keys: ``"Function"`` and ``"Values"``. - - For the ``"Function"`` key, acceptable values are + - For the ``"Function"`` key, options are ``"Exponential"``, ``"Linear"``, ``"Piecewise Linear"``, ``"Power Law"``, ``"Sinusoidal"``, and ``"Square Wave"``. - - For the ``"Values"`` key, a list of strings containing the + - For the ``"Values"`` key, provide a list of strings containing the parameters required by the ``"Function"`` key selection. For example, when``"Linear"`` is set as the ``"Function"`` key, two parameters are required: the value of the variable at t=0 and the @@ -4927,13 +4928,13 @@ def assign_recirculation_opening(self, face_list, extract_face, thermal_specific The default value is ``"0kg_per_s_m2"``. flow_direction : list, optional Flow direction enforced at the recirculation zone. The default value - is ``None`` in which case the normal direction is used. + is ``None``, in which case the normal direction is used. start_time : str, optional - Start of the time interval. Relevant only if the simulation is - transient. The default value is ``"0s"``. + Start of the time interval. This parameter is relevant only if the + simulation is transient. The default value is ``"0s"``. end_time : str, optional - End of the time interval. Relevant only if the simulation is - transient. The default value is ``"0s"``. + End of the time interval. This parameter is relevant only if the + simulation is transient. The default value is ``"0s"``. boundary_name : str, optional Name of the recirculation boundary. The default is ``None``, in which case the boundary is automatically generated. @@ -4964,15 +4965,15 @@ def assign_recirculation_opening(self, face_list, extract_face, thermal_specific return False if conductance_external_temperature is not None and thermal_specification is not "Conductance": self.logger.warning( - '``conductance_external_temperature`` will not have any effect unless the ``thermal_specification`` ' + '``conductance_external_temperature`` does not have any effect unless the ``thermal_specification`` ' 'is ``"Conductance"``.') if conductance_external_temperature is not None and thermal_specification is not "Conductance": self.logger.warning( - '``conductance_external_temperature`` needs to be specified when ``thermal_specification`` ' + '``conductance_external_temperature`` must be specified when ``thermal_specification`` ' 'is ``"Conductance"``. Setting ``conductance_external_temperature`` to ``"AmbientTemp"``.') if (start_time is not None or end_time is not None) and not self.solution_type == "Transient": self.logger.warning( - '``start_time`` and ``end_time`` will not have any effect unless for steady-state simulations.') + '``start_time`` and ``end_time`` only effect steady-state simulations.') elif self.solution_type == "Transient" and not (start_time and end_time): self.logger.warning( '``start_time`` and ``end_time`` should be declared for transient simulations. Setting them to "0s".') @@ -5046,5 +5047,164 @@ def assign_recirculation_opening(self, face_list, extract_face, thermal_specific return bound else: # pragma: no cover raise SystemExit + except (GrpcApiError, SystemExit): # pragma : no cover + return None + + @pyaedt_function_handler() + def assign_blower_type1(self, faces, inlet_face, fan_curve_pressure, fan_curve_flow, blower_power="0W", blade_rpm=0, + blade_angle="0rad", fan_curve_pressure_unit="n_per_meter_sq", + fan_curve_flow_unit="m3_per_s", boundary_name=None): + """Assign blower type 1. + + Parameters + ---------- + faces : list + List of modeler.cad.elements3d.FacePrimitive or of integers + containing faces ids. + inlet_face : modeler.cad.elements3d.FacePrimitive, int or list + Inlet faces. + fan_curve_pressure : list + List of the fan curve pressure values. Only floats should + be included in the list as their unit can be modified with + fan_curve_pressure_unit argument. + fan_curve_flow : list + List of the fan curve flow value. Only floats should be + included in the list as their unit can be modified with + fan_curve_flow_unit argument. + blower_power : str, optional + blower power expressed as a string containing the value and unit. + Default is "0W". + blade_rpm : float, optional + Blade RPM value. Default is 0. + blade_angle : str, optional + Blade angle expressed as a string containing value and the unit. + Default is "0rad". + fan_curve_pressure_unit : str, optional + Fan curve pressure unit. Default is "n_per_meter_sq". + fan_curve_flow_unit : str, optional + Fan curve flow unit. Default is "m3_per_s". + boundary_name : str, optional + Name of the recirculation boundary. The default is ``None``, in + which case the boundary is automatically generated. + + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Boundary object when successful or ``None`` when failed. + + References + ---------- + + >>> oModule.AssignBlowerBoundary + + Examples + -------- + >>> from pyaedt import Icepak + >>> ipk = Icepak() + >>> cylinder = self.aedtapp.modeler.create_cylinder(cs_axis="X", position=[0,0,0], radius=10, height=1) + >>> curved_face = [f for f in cylinder.faces if not f.is_planar] + >>> planar_faces = [f for f in cylinder.faces if f.is_planar] + >>> cylinder.solve_inside=False + >>> blower = self.aedtapp.assign_blower_type1([f.id for f in curved_face+planar_faces], + >>> [f.id for f in planar_faces], [10, 5, 0], [0, 2, 4]) + + """ + props = {} + props["Blade RPM"] = blade_rpm + props["Fan Blade Angle"] = blade_angle + props["Blower Type"] = "Type 1" + return self._assign_blower(props, faces, inlet_face, fan_curve_flow_unit, fan_curve_pressure_unit, + fan_curve_flow, fan_curve_pressure, blower_power, boundary_name) + + @pyaedt_function_handler() + def assign_blower_type2(self, faces, inlet_face, fan_curve_pressure, fan_curve_flow, blower_power="0W", + exhaust_angle="0rad", fan_curve_pressure_unit="n_per_meter_sq", + fan_curve_flow_unit="m3_per_s", boundary_name=None): + """Assign blower type 2. + + Parameters + ---------- + faces : list + List of modeler.cad.elements3d.FacePrimitive or of integers + containing faces ids. + inlet_face : modeler.cad.elements3d.FacePrimitive, int or list + Inlet faces. + fan_curve_pressure : list + List of the fan curve pressure values. Only floats should + be included in the list as their unit can be modified with + fan_curve_pressure_unit argument. + fan_curve_flow : list + List of the fan curve flow value. Only floats should be + included in the list as their unit can be modified with + fan_curve_flow_unit argument. + blower_power : str, optional + blower power expressed as a string containing the value and unit. + Default is "0W". + exhaust_angle : float, optional + Exhaust angle expressed as a string containing value and the unit. + Default is "0rad". + fan_curve_pressure_unit : str, optional + Fan curve pressure unit. Default is "n_per_meter_sq". + fan_curve_flow_unit : str, optional + Fan curve flow unit. Default is "m3_per_s". + boundary_name : str, optional + Name of the recirculation boundary. The default is ``None``, in + which case the boundary is automatically generated. + + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Boundary object when successful or ``None`` when failed. + + References + ---------- + + >>> oModule.AssignBlowerBoundary + + Examples + -------- + >>> from pyaedt import Icepak + >>> ipk = Icepak() + >>> box = ipk.modeler.create_box([5, 5, 5], [1, 2, 3], "BlockBoxEmpty", "copper") + >>> box.solve_inside=False + >>> blower = self.aedtapp.assign_blower_type2([box.faces[0], box.faces[1]], + >>> [box.faces[0]], [10, 5, 0], [0, 2, 4]) + + """ + props = {} + props["Exhaust Exit Angle"] = exhaust_angle + props["Blower Type"] = "Type 2" + return self._assign_blower(props, faces, inlet_face, fan_curve_flow_unit, fan_curve_pressure_unit, + fan_curve_flow, fan_curve_pressure, blower_power, boundary_name) + + @pyaedt_function_handler() + def _assign_blower(self, props, faces, inlet_face, fan_curve_flow_unit, fan_curve_pressure_unit, fan_curve_flow, + fan_curve_pressure, blower_power, boundary_name): + if isinstance(faces[0], int): + props["Faces"] = faces + else: + props["Faces"] = [f.id for f in faces] + if not isinstance(inlet_face, list): + inlet_face = [inlet_face] + if not isinstance(inlet_face[0], int): + props["InletFace"] = [f.id for f in inlet_face] + props["Blower Power"] = blower_power + props["DimUnits"] = [fan_curve_flow_unit, fan_curve_pressure_unit] + if len(fan_curve_flow) != len(fan_curve_pressure): + self.logger.error("``fan_curve_flow`` and ``fan_curve_pressure`` must have the same length.") + return False + props["X"] = [str(pt) for pt in fan_curve_flow] + props["Y"] = [str(pt) for pt in fan_curve_pressure] + if not boundary_name: + boundary_name = generate_unique_name("Blower") + bound = BoundaryObject(self, boundary_name, props, "Blower") + try: + if bound.create(): + self._boundaries[bound.name] = bound + return bound + else: # pragma : no cover + raise SystemExit except (GrpcApiError, SystemExit): # pragma: no cover return None diff --git a/pyaedt/modules/Boundary.py b/pyaedt/modules/Boundary.py index fccfc365197..92ea792ce45 100644 --- a/pyaedt/modules/Boundary.py +++ b/pyaedt/modules/Boundary.py @@ -570,6 +570,8 @@ def create(self): self._app.oboundary.AssignGrilleBoundary(self._get_args()) elif bound_type == "Block": self._app.oboundary.AssignBlockBoundary(self._get_args()) + elif bound_type == "Blower": + self._app.oboundary.AssignBlowerBoundary(self._get_args()) elif bound_type == "SourceIcepak": self._app.oboundary.AssignSourceBoundary(self._get_args()) elif bound_type == "Opening": @@ -748,6 +750,8 @@ def update(self): self._app.oboundary.EditEMLoss(self._boundary_name, self._get_args()) # pragma: no cover elif bound_type == "Block": self._app.oboundary.EditBlockBoundary(self._boundary_name, self._get_args()) + elif bound_type == "Blower": + self._app.oboundary.EditBlowerBoundary(self._boundary_name, self._get_args()) elif bound_type == "SourceIcepak": self._app.oboundary.EditSourceBoundary(self._boundary_name, self._get_args()) elif bound_type == "HeatFlux": From d238ff2e564479e064f90476765c221c6728d66c Mon Sep 17 00:00:00 2001 From: Lorenzo Vecchietti <58366962+lorenzovecchietti@users.noreply.github.com> Date: Tue, 14 Nov 2023 14:10:49 +0100 Subject: [PATCH 70/78] Add adiabatic plate bc function (#3878) * new function for adiabatic plate * update docstring and example * add test * fix if radiation dictionary is none * add summary in docstring --- _unittest/test_98_Icepak.py | 12 ++++++ pyaedt/icepak.py | 79 +++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index 8779be60eb9..b9e5ab38d95 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -1350,3 +1350,15 @@ def test_70_blower_boundary(self): assert blower.update() box = self.aedtapp.modeler.create_box([5, 5, 5], [1, 2, 3], "BlockBoxEmpty", "copper") assert self.aedtapp.assign_blower_type2([box.faces[0], box.faces[1]], [box.faces[0]], [10, 5, 0], [0, 2, 4]) + + def test_71_assign_adiabatic_plate(self): + box = self.aedtapp.modeler.create_box([5, 5, 5], [1, 2, 3], "Box", "copper") + rectangle = self.aedtapp.modeler.create_rectangle(0, [0, 0, 0], [1, 2]) + assert self.aedtapp.assign_adiabatic_plate( + box.top_face_x, {"RadiateTo": "AllObjects"}, {"RadiateTo": "AllObjects"} + ) + assert self.aedtapp.assign_adiabatic_plate(box.top_face_x.id) + assert self.aedtapp.assign_adiabatic_plate(rectangle) + ad_plate = self.aedtapp.assign_adiabatic_plate(rectangle.name) + assert ad_plate + assert ad_plate.update() diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index 1a9fa26fd00..e6b678d6254 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -11,6 +11,7 @@ from pyaedt import is_ironpython from pyaedt import is_linux from pyaedt.generic.general_methods import GrpcApiError +from pyaedt.modeler.cad.elements3d import FacePrimitive from pyaedt.modules.SetupTemplates import SetupKeys if is_linux and is_ironpython: @@ -4870,6 +4871,84 @@ def assign_symmetry_wall( except (GrpcApiError, SystemExit): return None + @pyaedt_function_handler() + def assign_adiabatic_plate(self, assignment, high_radiation_dict=None, low_radiation_dict=None, boundary_name=None): + """ + Assign adiabatic plate boundary condition. + + Parameters + ---------- + assignment : list + List of strings containing object names, or list of integers + containing face ids or list of faces or objects. + high_radiation_dict : dictionary, optional + Dictionary containing the radiation assignment for the high side. + The two keys that are always required are ``"RadiateTo"`` and + ``"Surface Material"``. If the value of ``"RadiateTo"`` is + ``"RefTemperature"``, then the others required keys are + ``"Ref. Temperature"`` and ``"View Factor"``. The other possible + value of ``"RadiateTo"`` is ``"AllObjects"``. Default is ``None`` + in which case the radiation on the high side is set to off. + low_radiation_dict : dictionary, optional + Dictionary containing the radiation assignment for the low side. + The dictionary structure is the same of ``high_radiation_dict``. + Default is ``None``, in which case the radiation on the low side + is set to off. + + Returns + ------- + :class:`pyaedt.modules.Boundary.BoundaryObject` + Boundary object when successful or ``None`` when failed. + + References + ---------- + + >>> oModule.AssignAdiabaticPlateBoundary + + Examples + -------- + >>> from pyaedt import Icepak + >>> ipk = Icepak() + >>> box = ipk.modeler.create_box([5, 5, 5], [1, 2, 3], "Box", "copper") + >>> ad_plate = ipk.assign_adiabatic_plate(box.top_face_x, None, {"RadiateTo": "AllObjects"}) + + """ + if not isinstance(assignment, list): + assignment = [assignment] + if isinstance(assignment[0], str): + key = "Objects" + elif isinstance(assignment[0], int): + key = "Faces" + elif isinstance(assignment[0], FacePrimitive): + key = "Faces" + assignment = [f.id for f in assignment] + else: + key = "Objects" + assignment = [o.name for o in assignment] + props = {key: assignment} + for rad_dict, side in zip([high_radiation_dict, low_radiation_dict], ["HighSide", "LowSide"]): + props[side] = {"Radiate": bool(rad_dict)} + if rad_dict is not None: + for k, v in rad_dict.items(): + if side == "HighSide": + if k == "RadiateTo": + v += " - High" + k += " - High" + props[side][k] = v + + if not boundary_name: + boundary_name = generate_unique_name("AdiabaticPlate") + + bound = BoundaryObject(self, boundary_name, props, "Adiabatic Plate") + try: + if bound.create(): + self._boundaries[bound.name] = bound + return bound + else: # pragma: no cover + raise SystemExit + except (GrpcApiError, SystemExit): # pragma: no cover + return None + @pyaedt_function_handler() def assign_recirculation_opening(self, face_list, extract_face, thermal_specification="Temperature", assignment_value="0cel", conductance_external_temperature=None, From 812c992e58ed1b0d9c88f3ad81dc1a5ad5280ae1 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Tue, 14 Nov 2023 14:16:10 +0100 Subject: [PATCH 71/78] improve docstring returns (#3876) * improve docstring returns * Update pyaedt/maxwell.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --------- Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> --- pyaedt/maxwell.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyaedt/maxwell.py b/pyaedt/maxwell.py index 499cae7b0bc..fb63f86563f 100644 --- a/pyaedt/maxwell.py +++ b/pyaedt/maxwell.py @@ -800,8 +800,8 @@ def assign_translate_motion( Returns ------- - :class:`pyaedt.modules.Boundary.BoundaryObject` - Boundary object. + :class:`pyaedt.modules.Boundary.BoundaryObject` or ``False`` + Boundary object or bool if not successful. References ---------- From 67d7ec1b3897ced0f494bd2a47559392a7442f75 Mon Sep 17 00:00:00 2001 From: Alberto Di Maria <84965833+Alberto-DM@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:19:32 +0100 Subject: [PATCH 72/78] Fix vtk requirement (#3882) * dummy edit * reset temp dir * reset temp dir * reset temp dir * reset temp dir * Testvtk rollback * reverting dummy modifications --------- Co-authored-by: maxcapodi78 --- pyproject.toml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ad022e8fe18..d0b8e7090c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ tests = [ "pytest==7.4.2", "pytest-cov==4.1.0", "pytest-xdist==3.3.1", + "vtk==9.2.6", "pyvista==0.38.0; python_version <= '3.7'", "pyvista==0.42.2; python_version > '3.7'", "scikit-learn==1.3.0; python_version == '3.7'", @@ -80,6 +81,7 @@ doc = [ "osmnx", "pypandoc==1.11", "pytest-sphinx==0.5.0", + "vtk==9.2.6", "pyvista==0.42.2; python_version > '3.7'", "pyvista==0.38.0; python_version <= '3.7'", "recommonmark==0.7.1", @@ -112,6 +114,7 @@ full = [ "pandas==2.0.3; python_version == '3.8'", "pandas==2.1.1; python_version > '3.9'", "osmnx", + "vtk==9.2.6", "pyvista==0.42.2; python_version > '3.7'", "pyvista==0.38.0; python_version <= '3.7'", "SRTM.py", @@ -131,6 +134,7 @@ all = [ "pandas==2.0.3; python_version == '3.8'", "pandas==2.1.1; python_version > '3.9'", "osmnx", + "vtk==9.2.6", "pyvista==0.42.2; python_version > '3.7'", "pyvista==0.38.0; python_version <= '3.7'", "SRTM.py", @@ -204,6 +208,6 @@ checks = [ exclude = [ '\.AEDTMessageManager.add_message$', # bad SS05 '\.Modeler3D\.create_choke$', # bad RT05 - '\._unittest\', # missing docstring for tests + '\._unittest', # missing docstring for tests 'HistoryProps.', # bad RT05 because of the base class named OrderedDict ] \ No newline at end of file From e44a1cd9fc06cf830fe1329cb6392215d47cb390 Mon Sep 17 00:00:00 2001 From: Alberto Di Maria <84965833+Alberto-DM@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:54:43 +0100 Subject: [PATCH 73/78] Fixed bug in SweepMaterial creation (#3879) * Fixed bug in SweepMaterial creation * Improved add_material_sweep unit test * beautify --- _unittest/conftest.py | 1 + _unittest/test_01_Design.py | 2 + _unittest/test_03_Materials.py | 27 +++++++++- _unittest/test_09_VariableManager.py | 4 +- _unittest_solvers/conftest.py | 1 + pyaedt/generic/configurations.py | 4 +- pyaedt/icepak.py | 4 +- pyaedt/modules/MaterialLib.py | 74 +++++++++++----------------- 8 files changed, 63 insertions(+), 54 deletions(-) diff --git a/_unittest/conftest.py b/_unittest/conftest.py index 2e481dcfa91..a7202f811fb 100644 --- a/_unittest/conftest.py +++ b/_unittest/conftest.py @@ -138,6 +138,7 @@ def desktop(): for key in keys: del _desktop_sessions[key] d = Desktop(desktop_version, NONGRAPHICAL, new_thread) + d.odesktop.SetTempDirectory(tempfile.gettempdir()) d.disable_autosave() d.odesktop.SetDesktopConfiguration("All") d.odesktop.SetSchematicEnvironment(0) diff --git a/_unittest/test_01_Design.py b/_unittest/test_01_Design.py index 00e37c48092..b2ee32b2b48 100644 --- a/_unittest/test_01_Design.py +++ b/_unittest/test_01_Design.py @@ -1,4 +1,5 @@ import os +import tempfile from _unittest.conftest import config from _unittest.conftest import desktop_version @@ -90,6 +91,7 @@ def test_06_libs(self): def test_06a_set_temp_dir(self): assert os.path.exists(self.aedtapp.set_temporary_directory(os.path.join(self.local_scratch.path, "temp_dir"))) assert self.aedtapp.set_temporary_directory(os.path.join(self.local_scratch.path, "temp_dir")) + self.aedtapp.set_temporary_directory(tempfile.gettempdir()) def test_08_objects(self): print(self.aedtapp.oboundary) diff --git a/_unittest/test_03_Materials.py b/_unittest/test_03_Materials.py index 53b23a0bbf1..c6f47d6dd6d 100644 --- a/_unittest/test_03_Materials.py +++ b/_unittest/test_03_Materials.py @@ -232,8 +232,31 @@ def test_09_non_linear_materials(self, add_app): assert app.materials.material_keys["mymat2"].is_used def test_10_add_material_sweep(self): - assert self.aedtapp.materials.add_material_sweep(["copper", "aluminum"], "sweep_copper") - assert "sweep_copper" in list(self.aedtapp.materials.material_keys.keys()) + material_name = "sweep_material" + assert self.aedtapp.materials.add_material_sweep(["copper", "aluminum", "FR4_epoxy"], material_name) + assert material_name in list(self.aedtapp.materials.material_keys.keys()) + properties_to_check = [ + "permittivity", + "permeability", + "conductivity", + "dielectric_loss_tangent", + "thermal_conductivity", + "mass_density", + "specific_heat", + "thermal_expansion_coefficient", + "youngs_modulus", + "poissons_ratio", + ] + # check if the variables are correctly created + assert "$ID" + material_name in self.aedtapp.variable_manager.variable_names + for prop in properties_to_check: + var_name = "$" + material_name + "_" + prop + assert var_name in self.aedtapp.variable_manager.variable_names + # check if the material properties are correct + for prop in properties_to_check: + var_name = "$" + material_name + "_" + prop + mat_prop = getattr(self.aedtapp.materials[material_name], prop).value + assert mat_prop == var_name + "[$ID" + material_name + "]" def test_11_material_case(self): assert self.aedtapp.materials["Aluminum"] == self.aedtapp.materials["aluminum"] diff --git a/_unittest/test_09_VariableManager.py b/_unittest/test_09_VariableManager.py index cd8e828b5c6..3eac9011b0d 100644 --- a/_unittest/test_09_VariableManager.py +++ b/_unittest/test_09_VariableManager.py @@ -461,14 +461,12 @@ def test_16_maxwell_circuit_variables(self): assert mc["var3"] == "10deg" assert mc["var4"] == "10rad" - def test_17_project_sweep_variable(self): + def test_17_project_variable_operation(self): self.aedtapp["$my_proj_test"] = "1mm" self.aedtapp["$my_proj_test2"] = 2 self.aedtapp["$my_proj_test3"] = "$my_proj_test*$my_proj_test2" assert self.aedtapp.variable_manager["$my_proj_test3"].units == "mm" assert self.aedtapp.variable_manager["$my_proj_test3"].numeric_value == 2.0 - self.aedtapp.materials.add_material_sweep(["copper", "aluminum"], "sweep_alu") - assert "$sweep_alupermittivity" in self.aedtapp.variable_manager.dependent_variables def test_18_test_optimization_properties(self): var = "v1" diff --git a/_unittest_solvers/conftest.py b/_unittest_solvers/conftest.py index 62566a67495..88608481ed0 100644 --- a/_unittest_solvers/conftest.py +++ b/_unittest_solvers/conftest.py @@ -131,6 +131,7 @@ def local_scratch(init_scratch): @pytest.fixture(scope="module", autouse=True) def desktop(): d = Desktop(desktop_version, NONGRAPHICAL, new_thread) + d.odesktop.SetTempDirectory(tempfile.gettempdir()) d.disable_autosave() yield d diff --git a/pyaedt/generic/configurations.py b/pyaedt/generic/configurations.py index fb32675cab7..91403b5f4c3 100644 --- a/pyaedt/generic/configurations.py +++ b/pyaedt/generic/configurations.py @@ -1060,8 +1060,8 @@ def import_config(self, config_file, *args): self._app.logger.warning("Material %s already exists. Renaming to %s", el, newname) else: newname = el - newmat = Material(self._app, el, val) - if newmat.update(): + newmat = Material(self._app, el, val, material_update=True) + if newmat: self._app.materials.material_keys[newname] = newmat else: # pragma: no cover self.results.import_materials = False diff --git a/pyaedt/icepak.py b/pyaedt/icepak.py index e6b678d6254..c20bee56ea5 100644 --- a/pyaedt/icepak.py +++ b/pyaedt/icepak.py @@ -2953,7 +2953,7 @@ def assign_surface_material(self, obj, mat): if oo: from pyaedt.modules.Material import SurfaceMaterial - sm = SurfaceMaterial(self.materials, mat) + sm = SurfaceMaterial(self.materials, mat, material_update=False) sm.coordinate_system = oo.GetPropEvaluatedValue("Coordinate System Type") props = oo.GetPropNames() if "Surface Emissivity" in props: @@ -2966,6 +2966,8 @@ def assign_surface_material(self, obj, mat): sm.surface_diffuse_absorptance = oo.GetPropEvaluatedValue("Solar Diffuse Absorptance") if "Solar Normal Absorptance" in props: sm.surface_incident_absorptance = oo.GetPropEvaluatedValue("Solar Normal Absorptance") + sm.update() + sm._material_update = True self.materials.surface_material_keys[mat.lower()] = sm return True diff --git a/pyaedt/modules/MaterialLib.py b/pyaedt/modules/MaterialLib.py index dcbfecbc873..5aa55150cd5 100644 --- a/pyaedt/modules/MaterialLib.py +++ b/pyaedt/modules/MaterialLib.py @@ -49,7 +49,6 @@ def __init__(self, app): self._desktop = self._app.odesktop self._oproject = self._app.oproject self.logger = self._app.logger - # self.material_keys = self._get_materials() self.material_keys = {} self._surface_material_keys = {} self._load_from_project() @@ -199,19 +198,6 @@ def _get_aedt_case_name(self, material_name): return self._mat_names_aedt[self.mat_names_aedt_lower.index(material_name.lower())] return False - @pyaedt_function_handler() - def _get_materials(self): - """Get materials.""" - mats = {} - try: - for ds in self._app.project_properties["AnsoftProject"]["Definitions"]["Materials"]: - mats[ds.lower()] = Material( - self, ds, self._app.project_properties["AnsoftProject"]["Definitions"]["Materials"][ds] - ) - except: - pass - return mats - @pyaedt_function_handler() def _get_surface_materials(self): mats = {} @@ -221,6 +207,7 @@ def _get_surface_materials(self): self, ds, self._app.project_properties["AnsoftProject"]["Definitions"]["SurfaceMaterials"][ds], + material_update=False, ) except: pass @@ -330,8 +317,8 @@ def add_material(self, materialname, props=None): elif self._get_aedt_case_name(materialname): return self._aedmattolibrary(self._get_aedt_case_name(materialname)) else: - material = Material(self, materialname, props) - if material.update(): + material = Material(self, materialname, props, material_update=True) + if material: self.logger.info("Material has been added. Edit it to update in Desktop.") self.material_keys[materialname.lower()] = material self._mats.append(materialname) @@ -375,10 +362,11 @@ def add_surface_material(self, material_name, emissivity=None): self.logger.warning("Warning. The material is already in the database. Change the name or edit it.") return self.surface_material_keys[material_name.lower()] else: - material = SurfaceMaterial(self._app, material_name) + material = SurfaceMaterial(self._app, material_name, material_update=False) if emissivity: material.emissivity = emissivity - material.update() + material.update() + material._material_update = True self.logger.info("Material has been added. Edit it to update in Desktop.") self.surface_material_keys[material_name.lower()] = material return self.surface_material_keys[material_name.lower()] @@ -404,22 +392,15 @@ def _create_mat_project_vars(self, matlist): return matprop @pyaedt_function_handler() - def add_material_sweep(self, swargs, matname): + def add_material_sweep(self, materials_list, material_name): """Create a sweep material made of an array of materials. - If a material needs to have a dataset (thermal modifier), then a - dataset is created. Material properties are loaded from the XML file - database ``amat.xml``. - Parameters ---------- - swargs : list + materials_list : list List of materials to merge into a single sweep material. - matname : str + material_name : str Name of the sweep material. - enableTM : bool, optional - Unavailable currently. Whether to enable the thermal modifier. - The default is ``True``. Returns ------- @@ -441,25 +422,26 @@ def add_material_sweep(self, swargs, matname): >>> hfss.materials.add_material_sweep(["MyMaterial", "MyMaterial2"], "Sweep_copper") """ matsweep = [] - for args in swargs: - matobj = self.checkifmaterialexists(args) + for mat in materials_list: + matobj = self.checkifmaterialexists(mat) if matobj: matsweep.append(matobj) mat_dict = self._create_mat_project_vars(matsweep) - newmat = Material(self, matname) - index = "$ID" + matname + newmat = Material(self, material_name, material_update=False) + index = "$ID" + material_name newmat.is_sweep_material = True self._app[index] = 0 for el in mat_dict: if el in list(mat_dict.keys()): - self._app["$" + matname + el] = mat_dict[el] - newmat.__dict__["_" + el].value = "$" + matname + el + "[" + index + "]" - newmat._update_props(el, "$" + matname + el + "[" + index + "]", False) + array_var_name = "$" + material_name + "_" + el + self._app[array_var_name] = mat_dict[el] + newmat.__dict__["_" + el].value = array_var_name + "[" + index + "]" + newmat._update_props(el, array_var_name + "[" + index + "]", False) newmat.update() - self.material_keys[matname.lower()] = newmat + self.material_keys[material_name.lower()] = newmat return index @pyaedt_function_handler() @@ -526,8 +508,7 @@ def duplicate_material(self, material_name, new_name=None, props=None): if not new_name: new_name = material_name + "_clone" - new_material = Material(self, new_name, material._props) - new_material.update() + new_material = Material(self, new_name, material._props, material_update=False) # Parameterize material properties if these were passed. if props: @@ -543,8 +524,8 @@ def duplicate_material(self, material_name, new_name=None, props=None): setattr(new_material, p, var_name) except TypeError: print("p = {}".format(p)) - - # new_material.update() # Assign parameter to material property. + new_material.update() + new_material._material_update = True self._mats.append(new_name) self.material_keys[new_name.lower()] = new_material return new_material @@ -580,8 +561,9 @@ def duplicate_surface_material(self, material, new_name): if not material.lower() in list(self.surface_material_keys.keys()): self.logger.error("Material {} is not present".format(material)) return False - newmat = SurfaceMaterial(self, new_name.lower(), self.surface_material_keys[material.lower()]._props) - newmat.update() + newmat = SurfaceMaterial( + self, new_name.lower(), self.surface_material_keys[material.lower()]._props, material_update=True + ) self.surface_material_keys[new_name.lower()] = newmat return newmat @@ -811,8 +793,8 @@ def import_materials_from_file(self, full_json_path): self.logger.warning("Material %s already exists. Renaming to %s", el, newname) else: newname = el - newmat = Material(self, newname, val) - newmat.update() + newmat = Material(self, newname, val, material_update=True) + # newmat.update() self.material_keys[newname] = newmat materials_added.append(newmat) return materials_added @@ -864,8 +846,8 @@ def import_materials_from_excel(self, material_file): and not (isinstance(val[keys.index(prop)], float) and math.isnan(val[keys.index(prop)])) ): props[prop] = float(val[keys.index(prop)]) - new_material = Material(self, newname, props) - new_material.update() + new_material = Material(self, newname, props, material_update=True) + # new_material.update() self.material_keys[newname] = new_material materials_added.append(new_material) From 67d35a8aa220e88e70f4f4ed5f51423f953feed6 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Fri, 17 Nov 2023 11:15:39 +0100 Subject: [PATCH 74/78] siwave syz setup enhancement (#3890) * fix * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Update pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> --------- Co-authored-by: ring630 <@gmail.com> Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> --- .../edb_data/siwave_simulation_setup_data.py | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py index 90abe4e3f2e..99002a940da 100644 --- a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py @@ -1,3 +1,5 @@ +import warnings + from pyaedt.edb_core.edb_data.simulation_setup import BaseSimulationSetup from pyaedt.edb_core.general import convert_netdict_to_pydict from pyaedt.edb_core.general import convert_pydict_to_netdict @@ -1005,11 +1007,13 @@ def set_pi_slider(self, value): - ``0``: Optimal speed - ``1``: Balanced - ``2``: Optimal accuracy + + .. deprecated:: 0.7.5 + Use :property:`pi_slider_position` property instead. + """ - self.use_si_settings = False - self.use_custom_settings = False + warnings.warn("`set_pi_slider` is deprecated. Use `pi_slider_position` property instead.", DeprecationWarning) self.pi_slider_position = value - self.advanced_settings.set_pi_slider(value) @pyaedt_function_handler def set_si_slider(self, value): @@ -1020,11 +1024,14 @@ def set_si_slider(self, value): - ``0``: Optimal speed - ``1``: Balanced - ``2``: Optimal accuracy``` + + .. deprecated:: 0.7.5 + Use :property:`si_slider_position` property instead. + """ - self.use_si_settings = True - self.use_custom_settings = False + warnings.warn("`set_si_slider` is deprecated. Use `si_slider_position` property instead.", DeprecationWarning) + self.si_slider_position = value - self.advanced_settings.set_si_slider(value) @property def pi_slider_position(self): @@ -1038,9 +1045,13 @@ def pi_slider_position(self, value): self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() + self.use_si_settings = False + self.use_custom_settings = False + self.advanced_settings.set_pi_slider(value) + @property def si_slider_position(self): - """SI solider position. Values are from ``1`` to ``3``.""" + """SI slider position. Values are from ``1`` to ``3``.""" return self.get_sim_setup_info.SimulationSettings.SISliderPos @si_slider_position.setter @@ -1050,6 +1061,10 @@ def si_slider_position(self, value): self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() + self.use_si_settings = True + self.use_custom_settings = False + self.advanced_settings.set_si_slider(value) + @property def use_custom_settings(self): """Custom settings to use. From d2699179d706ce9638699fd4055fb15c3d13f676 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Fri, 17 Nov 2023 11:15:50 +0100 Subject: [PATCH 75/78] fix (#3889) Co-authored-by: ring630 <@gmail.com> --- pyaedt/edb_core/edb_data/nets_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyaedt/edb_core/edb_data/nets_data.py b/pyaedt/edb_core/edb_data/nets_data.py index 0574e17b7f8..6b8ef68b62e 100644 --- a/pyaedt/edb_core/edb_data/nets_data.py +++ b/pyaedt/edb_core/edb_data/nets_data.py @@ -239,7 +239,7 @@ def serial_rlc(self): { i: v for i, v in self._app._nets[net].components.items() - if list(set(v.nets).intersection(nets)) != [net] + if list(set(v.nets).intersection(nets)) != [net] and v.type in ["Resistor", "Inductor", "Capacitor"] } ) return comps_common From 9eeb5d9840710e6cf7f4116fa1968a1dee16c5b7 Mon Sep 17 00:00:00 2001 From: gmalinve <103059376+gmalinve@users.noreply.github.com> Date: Fri, 17 Nov 2023 11:59:44 +0100 Subject: [PATCH 76/78] get materials in project (#3886) * get materials in design * docstring * fixes * uncomment * Update pyaedt/modules/MaterialLib.py * Update _unittest/test_03_Materials.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> * Update _unittest/test_03_Materials.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> * Update pyaedt/modules/MaterialLib.py Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> * Update pyaedt/modules/MaterialLib.py --------- Co-authored-by: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Co-authored-by: Alberto Di Maria <84965833+Alberto-DM@users.noreply.github.com> --- _unittest/test_03_Materials.py | 6 ++++++ pyaedt/modules/MaterialLib.py | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/_unittest/test_03_Materials.py b/_unittest/test_03_Materials.py index c6f47d6dd6d..560ee092fd9 100644 --- a/_unittest/test_03_Materials.py +++ b/_unittest/test_03_Materials.py @@ -268,3 +268,9 @@ def test_12_material_model(self): self.aedtapp["$dk"] = 3 self.aedtapp["$df"] = 0.01 assert mat.set_djordjevic_sarkar_model(dk="$dk", df="$df") + + def test_13_get_materials_in_project(self): + used_materials = self.aedtapp.materials.get_used_project_material_names() + assert isinstance(used_materials, list) + for m in [mat for mat in self.aedtapp.materials if mat.is_used]: + assert m.name in used_materials diff --git a/pyaedt/modules/MaterialLib.py b/pyaedt/modules/MaterialLib.py index 5aa55150cd5..782e21c07d8 100644 --- a/pyaedt/modules/MaterialLib.py +++ b/pyaedt/modules/MaterialLib.py @@ -852,3 +852,19 @@ def import_materials_from_excel(self, material_file): materials_added.append(new_material) return materials_added + + @pyaedt_function_handler + def get_used_project_material_names(self): + """Get list of material names in current project. + + Returns + ------- + List of str + List of material names used in the current project. + + References + ---------- + + >>> oDefinitionManager.GetInUseProjectMaterialNames + """ + return self.odefinition_manager.GetInUseProjectMaterialNames() From ae2591ab851fe5a6d0aa849807568e20a8d9323d Mon Sep 17 00:00:00 2001 From: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:22:25 +0100 Subject: [PATCH 77/78] Explain how to contribute in details. (#3891) --- CONTRIBUTING.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8ca4529e4ec..74280703f34 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,3 +12,37 @@ questions or submissions to this repository. For contributing to this project, please refer to the [PyAnsys Developer's Guide]. [PyAnsys Developer's Guide]: https://dev.docs.pyansys.com/index.html + +## Directing Issues and Features Requests + +For reporting bugs and proposing new features, please use the Issues tab instead of the Discussions tab. This will help us track and prioritize work in a more organized manner. + +## Purpose of Discussions + +The Discussions tab should primarily be used for general questions and discussions about the project. This could include discussions about potential improvements, the future direction of the project, brainstorming ideas, help with using the software, and other topics that don't exactly fit as an Issue. + +Remember, maintaining distinct places for different types of interactions helps keep our project organized and moving forward in a coordinated manner. + +## Modify the Code + +Everyone can contribute to this project, irrespective of their level of expertise. Your diverse skills, perspectives, and experiences are valuable and we welcome them. + +Here's a simple overview of how you can start making contributions: + +**Fork the Repository:** "Forking" means creating a personal copy of this repository on your GitHub account. + +**Clone the Repository:** After forking, you need to download the repository to your local machine. This can be done using the `git clone` command. + +**Create a New Branch:** A branch is used to isolate your changes from the main project. You can create a new branch using the `git branch` command. Remember to switch to your new branch with the `git checkout` command. + +**Commit Your Changes:** After making your changes, you need to "commit" them. A commit is a packaged set of alterations. Use `git add` to add your files to staging, and then `git commit -m "your message"` to commit them. + +**Push Your Changes:** After committing your changes, "push" them to your forked repository on GitHub with `git push origin `. + +**Create a Pull Request:** A Pull Request (PR) lets us know you have changes you think should be included in the main project. Go to your forked repository on GitHub and click on the 'Pull request' button. + +Following these steps ensures that your contributions will be easily reviewed and potentially included in the project much faster. + +Please don't get discouraged if you find these steps complex, we are here to help you throughout the process. + +We hope these rules will make the Discussions section a better place for every contributor. From 611651b8102a2a1a47acf18a964b2d57b50f0fb1 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 21 Nov 2023 15:17:29 +0100 Subject: [PATCH 78/78] Fix touchstone deepcopy issue (#3892) * Fix touchstone deepcopy issue * Shallow copy --- _unittest/test_44_TouchstoneParser.py | 2 +- pyaedt/generic/touchstone_parser.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_unittest/test_44_TouchstoneParser.py b/_unittest/test_44_TouchstoneParser.py index 5852b3fb7dc..726a4a74c99 100644 --- a/_unittest/test_44_TouchstoneParser.py +++ b/_unittest/test_44_TouchstoneParser.py @@ -38,7 +38,7 @@ def test_02_read_ts_file(self): ts1 = TouchstoneData(touchstone_file=os.path.join(test_T44_dir, "port_order_1234.s8p")) assert ts1.get_mixed_mode_touchstone_data() ts2 = TouchstoneData(touchstone_file=os.path.join(test_T44_dir, "port_order_1324.s8p")) - assert ts1.get_mixed_mode_touchstone_data(port_ordering="1324") + assert ts2.get_mixed_mode_touchstone_data(port_ordering="1324") assert ts1.plot_insertion_losses(plot=False) assert ts1.get_worst_curve(curve_list=ts1.get_return_loss_index(), plot=False) diff --git a/pyaedt/generic/touchstone_parser.py b/pyaedt/generic/touchstone_parser.py index 75a506b89fc..b373f6997e1 100644 --- a/pyaedt/generic/touchstone_parser.py +++ b/pyaedt/generic/touchstone_parser.py @@ -1,4 +1,4 @@ -from copy import deepcopy as copy +from copy import copy import itertools import os import re