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 01/37] 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 02/37] 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 03/37] 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 04/37] 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 05/37] 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 06/37] 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 07/37] 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 08/37] 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 09/37] 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\ +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\ +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\ +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\ +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 10/37] 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 11/37] 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 12/37] 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 13/37] 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 14/37] 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 15/37] 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 16/37] 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 17/37] 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 18/37] 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 19/37] 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 20/37] 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 21/37] 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 22/37] 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 23/37] 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 24/37] 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 25/37] 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 26/37] 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 27/37] [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 28/37] 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 29/37] 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 30/37] 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 31/37] 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 32/37] 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 33/37] 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 34/37] 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-M2BfSxtT0V6+g9LSvYw0+9PKhqrRycFs+P8uoeys+g84pzPX9VuisyyhI+B1P+E+TqhinVLjvlRS5nKNvvsMTh6TlKXiJSwTMLPFwDlyfEv6wfX7hT2PXKL42gcsnTZ-2zgfMLrOYmmurhxNgehj9LeHws8sqv4JSM8MlZZz88Ay-IhYzzh3ZzPXqhiNXGX4FzAWBzevTaWOrjTh53PNax4ANbkk6zVqjdqbZN3j-xzChwgc6xwCjdopBOANyLPkvOmd4Qr6hsBjhtqZZZ73jtxjtRdtKFfsRT1jTPYMnwirsrSwCphGANiHPgQKpbOSJIIOy5RjghvHmhX19mvJVvyHoij9OndaMo6xyCxQtyP8vTbcrrlqLKRhPIX4PYqv4G8ZbbhojowfMkmwipMowBoWrYyKhXjzDOZEpbixbiybMiKYKz5xmrgdypgSHzgxvimhH3vSKJAnad3jlsd0tVXymR9JzinJPtPog91Lyud8KBtNInCOYKz52cH1gPzVh+0pmT4XLxbdV1kCybMiKYKz5Fr0QRDN9rRWPBoPGkgurmmUXrsv3pjNeyXCYh9SlwilbBm9TXArjvl4RUHQp\ +cFfsRGzbqxnJzbZN44TZqfBPP1zjWPpwQWfnNhvxjx+ygmjPSzv+CPOZ3aiqfDowcc6xyCqyjeDejLmRihimffxTnJEhuihzKnhfS5Pev7RqkjKp6latBhlSL79ZMS3jJaEPvPiygNmrvHrJndtzNPcburtgZXGhhpzoxWn9RbaKtSryhL5vPv6WvXxxrDtvUNLaYZ34jjprureNXPSvjfpSpSiphjLnVbmC3rXvOZjHhRKzDEqyjrwb1jhyedyDn9ZGhACtbf3OPJwPTn1Vw6jXqhLpMlxPtdvqLqc7YTeedRrdyRrpWz7Scb5-w9l8nhswvzp+TKerfvxN2DzOFxhDzCoAgdsyWlYzT9ChzxWPqwLxbfzF8fLjPpSrejeGKyjViTA9rfvFOKzgMKTht49PNxQmQ3ThUt-dNhYrFu+7KrjlV4nBnMlaL5x4jjqr3zPgQKwzbHBHfz+DhvhPpxfC3yXFXTIgpyezrliKXwQWo3yqsP2hySScelyC9yvDqhQfSX4NQNwPVhgt-Z4RzyovuxudPBapIwb+MNhgDXQqNCjTq4PwyCyOvTPcuv3LuwZRqLnhathjioFEPqSRqzvli5YMxyivtblNqQQyzNyk9TztBfSfdxDTTifbDLqu9x95LwdhjCs4VqMGrgNbvNqbZT55Adtx0jVqjPpukPSzh9NLNs6ZQapD2sB1AyZvWnAuhNDndX8A0Lz5hjviwXnjqP9oxXprMzmNQHqNc7hotjFeaX9yRANnTnfRXY1C5hSLdvx8cyfCpdty7SO5MBIwMTnrUZrjbqbyQHfUANrqf4jjrIIXFA4LwpMxP9hGPsREyhysnDkvJeoX5kvBhjPyLMhKYOy5PDmdRRjtxhZZ73j-xyiMQf6hzDhhDyTPamziOLiyLQCIYKz5VtwPaPJPTaSTnHkLrut3mwWrMvqpzTsqvplwilMhh6xyCZNTrLLvOVxsyyoFwilMh6xyCBpHrz4FXZZbPyLMhKYO\ +y5SynvhYWgz1hhKfGAT1jSggUjyyFwilMh6xyCnLplwCpOh6lwCvOshjDhKfGAT1iqqBjtRWpOhFfsR4tDtT9gK9GDT1fuRPtRFFfsRT9i48GDTnfRXxPLRNfBxnUPkvFeaX5kvhk9RnoH9mvS1PyLMhKYOy5RzRqtrTfYL9uDlqwCpwiskmwirUqnJA4TZqjVpwhisMd6xwCwCoOdclwCw0rOx2mwirUqzZq9Jd4jVpwisMd6xzChsBjpn-ZtBjthRanLhqT3jhr8TV+xXapTIyM8stIn7XHAWFbLTlpXAotwnuFZtBj-hvzSjf8whyJnjeWdh5nuYISpfbVbLmZUzBe3VHdplrRQl6KDx8WGzUgYNyLPkvJ2BgzushvOfuErQwBDisQJ899hDa0iCo6sLYX8YhCXpXCyDlknDKfo9mSmMt6xwCjbqfh9Lfx6sKjOB5fNtmVhzDhsBgLxipBaneCaZLAS4e9XdwrnPQbNonqvQYNYrrvhaVb1EpPCm9S1PyTPyLOybKw5rwurwypwCw0rwypwCxwCwCpwCxzChsBjtxjthRfuRPkTTnfTnvLkvrkuybKzbqzZqjVpwCxzChzDh+BzChzDhT1jsRfuRPyTPhyLPkvLmv3gqrwyrUqzZqjdpjtxj-hzDhT1jT1j1hT1jTnfQ1T1jTnfTnvS1PhyLOybKzbqw4rwypwCxzChsBjtxjtRfsRsBjtRYQ8T1j+hzDhT1jT1fuRPyTPhyLOy5LkvrwurwypwCzVqjdpjtxjtRj1hT1jTnfQ1T1jTnfTnvS1PDwGrplpghmXv-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\ +/w3cV//AENn9xFFfhb8BvGn7VnxR+B3wZ+JniD9tz49WevfEX4UfDvx1rdpo/w7/Y0t9ItdX8XeENH8\ +QalbaXBe/sp3E0GnJeahMsCTXE8qxKqyTSuC7er+R+0r/wBHy/tF/wDhA/sV/wD0I9fqdDj3B4ijRr0\ +8kx/s68YzjdYJO0kpK6+u6OzP13PeBsg4dzvOOH8y8WOH45jkWKxGDxChh+KZwVfC1p0KqjNcMpSiqk\ +JcskveSv1P17or8LfjN40/as+HXhDR/EGiftufHq6vNQ+K/wABvAs0Wq/Dv9jSe2XSPij8cvh38M/EF\ +zElp+ynA66jDoPi7UprNy7RR3cEEk8NxCslvL6v5H7Sv/R8v7Rf/hA/sV//AEI9C49wcq1Sgskx3tKc\ +YTemCtyzc1HX673pyv207hW4GyChkmXcQVPFjh9ZdmmKxmDpNYfilzdfA0cBXxClD/Vq8YqnmOGcZbS\ +bml8Gv690V+QnkftK/wDR8v7Rf/hA/sV//Qj15R8RPGn7VnhHxf8AAbw/pv7bnx6ns/ij8V9Y8C+IJb\ +74d/saS3NnpGn/AAO+M3xMhudHeD9lOJLfUTr3w60SFnnS4iNpdXUYhWZ4biArce4OhBTqZJj+WUoQ0\ +WCetScacf8AmN25pK/Zahk3A2QZ7i62CwHixw/KvQwuOxkufD8UxXsMuwOIzDEtP/Vl3ksPhqrhH7c0\ +oLWSZ+6VFfkJ5H7Sv/R8v7Rf/hA/sV//AEI9HkftK/8AR8v7Rf8A4QP7Ff8A9CPWv+u+G/6EmO/8sv8\ +A5tPL/wBX+E/+js5D/wCEvFX/ANDR+vdFfhZpPjb9qq9+N/xG+G1z+298eIvD/g/4TfBrx7YXyfDz9j\ +NNVk1X4h+LvjzoOuQahcyfspmB9MhsvhdoD2qpBFJHJd3jTTTpJClv+D3i/wD4OCPj1ofi3xRovhv4i\ +ftG+KvDmkeIta0vQfFLeMP2KdHfxJoun6lc2mma+dIH/BOq6GmG8sYoLj7N9quBD9o8vz5dvmN0Zdxb\ +/asassDw9j6yoylGV3gI2cJypv4ser+9CVrbpXPazPw/ybKcZTwOL8VeH/b1cJgMauXD8USXsMywOHz\ +DCtv/AFaS5pYbE0nOO8J80XrHX+7Sivxa8C+K/jz8RPBPhDx/4Y/bu/aLvPDnjjwxoPi7Qbr/AIQH9i\ +nNxo/iPS7XV9NmYL+ySQrtZ3kJIycEkdq5L4d+NP2rPF3i/wCPPh/Uv23Pj1BZ/C74r6P4F8Py2Pw7/\ +Y0iubzSNQ+B3wZ+Jk1zrDz/ALKcqXGojXviLrcKvAlvELS1tYzC0yTXE/HV48wlGpSpVMjx8Z1puCVs\ +F8ShObT/ANt092Evnp1Msv4GyHM8JnuNwvivw+6HDmFhjMTzYfimLjRnjsHl8XBf6te/L6zj8OnFaqD\ +nPaOv7pUV+QnkftK/9Hy/tF/+ED+xX/8AQj0eR+0r/wBHy/tF/wDhA/sV/wD0I9af674b/oSY7/yy/w\ +Dm08r/AFf4T/6OzkP/AIS8Vf8A0NH690V+FvwG8aftWfFH4HfBn4meIP23Pj1Z698RfhR8O/HWt2mj/\ +Dv9jS30i11fxd4Q0fxBqVtpcF7+yncTQacl5qEywJNcTyrEqrJNK4Lt6v5H7Sv/AEfL+0X/AOED+xX/\ +APQj1lQ49weIo0a9PJMf7OvGM43WCTtJKSuvrujsz1M94GyDh3O844fzLxY4fjmORYrEYPEKGH4pnBV\ +8LWnQqqM1wylKKqQlyyS95K/U/Xuivwt+PPjT9qz4XfA74zfEzw/+258erzXvh18KPiJ460S01j4d/s\ +aXGkXWr+EfCGseINNttVgsv2U7eafTnvNPhWdIbiCVomZY5onIdfV/I/aV/wCj5f2i/wDwgf2K/wD6E\ +ehce4OVapQWSY72lOMJvTBW5Zuajr9d705X7adwrcDZBQyTLuIKnixw+suzTFYzB0msPxS5uvgaOAr4\ +hSh/q1eMVTzHDOMtpNzS+DX9e6K/ITyP2lf+j5f2i/8Awgf2K/8A6EerHgrxr+0P4P8A2h/2XNB179q\ +P4r/FDwh8UPiv418C+MPB/jrwV+zTp+kX2kaf+zT8fviXptzb6l8NPgD4d1aw1GDxZ8O/DcqPFqSxPF\ +FNBPDLHKQN6fG2EnWw1GWT42l9arUaKlL6m4xlXqwoxlLlxkpcqlNOXLGUlG7UW9Hjl/BWTZvPG4fKP\ +E3Isxx2DwWY45YeFDiSnUrU8swGJzGvSpTxHD1Ggq06GFqRoqtWo0pVXCNSrTi3NfrnRRRX2h8AFf58\ +37UP/J1f7Wn/AGdn+1D/AOr7+Idf6DNf5837UP8AydX+1p/2dn+1D/6vv4h1/LP0p/8AkneFv+w2r/6\ +YZ8r4yf8AKP8AxD/2WPCn/qk43Pjr4vfF7w98GPD2meI/Eema/q9tq+vweG7Ky8N2+lXOoyajc6Vq+r\ +wgQ6vq9lHIrW+i3UaJHK88s80MMMMjyAD5r/4eAfCn/oQfjN/4Svhv/wCbOj/goB/ySnwD/wBlm8K/+\ +o34zrzGvuPo2/Rt8LvE3wuwnFnFmEx1fN6+PxuHbw+NeHp+zw7pez/dqlP3vfld3100P4eq1cHgcHgq\ +1bBPFzxbq/8AL2VPl9nJLopJ3Ul0VrPV30/oF+EH/BxV+xP8EfhN8L/gx4r+F37UuoeKPhF8O/BPww8\ +SX/h7wT8JbvQL7X/APhrTPCmsXmh3WpfG60uLnR5dR0m5e2kuLW2meF0aW3hctGvon/ETz+wR/wBEj/\ +a9/wDCB+DP/wA/6v2e/ZB/5NM/Ze/7N2+Cf/qtfDNfRNfV5LmXBiybKVV4RxFSosNQUpLNZRUpeyheS\ +j9SfKm7tK7te13bX/QfxepZn/xFnxQ5cxhGP+sWd2X1dOy/tLE2V/a6+p/Mp8UP+Dir9if4u+GtM8Ke\ +G/hd+1LY6jpPxE+EHxPuZtc8E/CW2sn0D4I/FnwT8Z/FdnBJYfG65dtYuPC/gHWLfT42jWGW/ubaK5u\ +LS3eW6h9E/wCInn9gj/okf7Xv/hA/Bn/5/wBX7PftQ/8AJNfDP/ZxP7IP/rWfwTr6JopZlwZ/bGOk+E\ +cQ6Tw2ESj/AGrK6kquM5pc31LVSTikrLl5W7vmsjM6WZ/8Qm4JX9ow5v8AWLijX6utv7N4Qtp7T11vr\ +fpY/nY/4ief2CP+iR/te/8AhA/Bn/5/1ed+Nv8Ag4q/Yn8feJfhB4r0f4XftS22nfBH4ian8T/FcOp+\ +CfhLDe6hoGrfCb4ofBi2s/D0dr8bpku9YXxR8XfDdw8dzJaQiwsb6VbhriK3tbn+muvnb42f8lK/ZB/\ +7OJ8Tf+smftQ0ZtmXBjwtJU+EcRTl9ZwTbeayl7qxmHco2+pLWUeaKf2W1KztZnhfSzP/AFlzPmzGEl\ +/q7xf/AMw6Wv8AqnnVn/F6PW3XY/GH/iJ5/YI/6JH+17/4QPwZ/wDn/Uf8RPP7BH/RI/2vf/CB+DP/A\ +M/6v6J6K9L+0+Cf+iOxP/h2l/8AMJ+d+yzX/oZQ/wDCdf8Ay0/lQ+Jv/Bdj4A/FOP8AaH1j4LeAvj5o\ +vif45/s/eEvgd4A1Hxd4b+H2kw+FvEvw81j4w6r4w8TeIrjQvihqL6fpy6B8e/Dp0aW0jvp59T0y4iu\ +7ayt0hubj8YNG+Of7M2g/Ab4j/A/xPoHxCuf2lPF/xQ+HHijwJ4s07QPC1x8PNE8N+GtL1nTpvD+t+I\ +rvxjDq2n3t/beM/EsskFro11byz6bopln4d7P9hf8Agu34y1O//ag8JfDPQr17+yv/AIQ/CvUtd0KwV\ +7q4l8W6H4x+OkHhaB7eHLG/TRviFqTRRhS7JryFR84BX4b/ALTn/BT74X/s/wCk/s06F/wT81C/+Gel\ ++CNW8AzQa3+zB+0rc6rrOj+IINRi8Q3OsXFj4rtrefUr6XVtTmuXitoYmmvXKQopCDvyJZZg8vdWlks\ +8NTxtfFVI0pY5RnG+LrVKFV1ZUP3kVTdO9Lkip35nKPM4n6zxpjHmOOynF5bmVPE2yrhijUqcnKnLAc\ +OZTg8XQUXJe9DFYerTcruzTtzKzd79kD/gu18Af2QP2cfh18C/2gfAXx88VeKPBo16x0DxB8NvDfw/1\ +3Q7rwfJrFxqGiWN3d+KvihotzFqlimoS2fkpaPClnaWZWd3aRI/LJ/+C3vjm2/aR+JXx4+A48Qx/szf\ +EXUJPGB+DfxR8M/D/RdY1HxfpPwJ8NfCBNa8Ua9oA1nUNL0628W+BNE1L7Lpmvol3Y6KkLNaS3l0E0v\ ++CMnxQ8Q/AT9tLW/gb4+07WfCD/FvQNU8Eaz4a8S6fe6DqejfEPwctz4l8Nx61pepwxTWGoraQeJ9PS\ +CaNJPP8QomAxAN79rWKOf/AILo+GoJUDxTftI/sZxSowBV45PDfwLR0YHqCpIP1rathuHpYmpRlkPNj\ +Y054iWIliPaQqRleMvZUHR/cVHzuKqxqyaipJJKo0vlsNLMcJmGcU6ePlHLs0wzhUowUoRq01Ww+IVO\ +tKM0q1OOIoU60YSjyqrTpVFadKEl84eDP+C+X7a3i3xxeappnj7wrdabp1wt9J4B1H4WeEbXwneWHnh\ +Ght721throsdzRoS2sR3IEqnfnJH6rQ/8HI/7Mn2KPwjP8Dvj4fjSPDgMujxaZ8O0+GTeNF8Pf2o9nH\ +4xf4ktqqeEjegqL06A16LY+YdOaX90fZv+C+ag/sffDVsDcP2lPCCg45Ab4X/GEsAfQlF/Kuy/YE+H/\ +wAMviv/AMEh/hz8N/jJf2emfDrxjoPxf0jxDqd9q9loS6Wg+O/xGvNP1a11bUj5FjqNlqdpZXdq8oeJ\ +Z7GMyRyIGRubEV+F6+GjmL4bnRw9V+xp0oYq0qdTl/jSnDDw9slyt+ycINuVlVSWvlyhWqYHB1qlSEa\ +sa6VRwo8qnS95uCjzvllayU7tq212fzo3n/Bbf9sX4N6N8OfhvoPxKsvCvhjwX4J8LeE9A0jRPhb8Pt\ +ZtF8PeE9JtfDWmS6vqXivR7y8ub17XSkadoJwWk3OscSsiV93/AA1/4OPtI0z4TeOvC/7QNp4iu/iff\ ++Hr+x+GPxR/Z88HeC9audM1jUdH1COw1zxr4O+IXiyy0pLjT9WOnTr9nE8N0rNb3GkxeU0lxjfC7/gm\ +f+2d4O+GXw9/aW/Y2+P+j6mvjr4deF/Gt3pfg/xrqnw78WQXepaHbavqng65aO6l0XxNHp2qTX9hOt9\ +qNsrz2TrNYwuZIo/0K/4JDf8ABQ740/tR+KPHfwW+OVxp/ivXvCXgiPx14c8fWejWWh6leaZYa7pPh3\ +V9I8TwaRFDZXd353iDRpbOaC1tpWW3vPtJuGKPHvCtwe8qwdbC8N/W8NgqcHP2eLWGm4tL2alSlgpzg\ +orRxlNt2d1dM9/jKjxFLiHiqpmmYYbF5xHH4n65UVOFWaxaxE1ip+1pVfY4hVK6qS9pG9OSfNTvFo/M\ +b4ef8FqPH978Gf2gfhh+1rrvjb4uzfH74cX3wt+Cuu+CvAXwp0az8HeLPHfhfxd4cN14w/sZvDrf8Ip\ +dS65ocs1zHDqt3bLpLi3tGMzI+7+0n/wXm+I3xA8baD8Qv2Y/GPxL+CX7PFn4c0mHxHonin4XfBDXvi\ +LqepWmvar/AMJPr1hZa5Lr9qt1Lpstja6da/2zb20smnJJMLYzySVf/wCCj/hW6/ZC/b6+IXxC0a1kt\ +vBf7S3wd+Kkpit0K2c2p/Fv4beL/hn41tLlxjzZ4vHF7ba9KP4P7VtmO7offv8Agkn4XvP2l/24v2lv\ +20vEdnLJp+h6r4pvPCzXaHNl4n+LOraqmn29nI+dw0z4eWmq2Lxgkxx61bbmwRu82nDIqeNxuaSyPnp\ +PCYKpze1SpyvWxsZ0I03RdONTWmnVSfI05eybqafU5pKm/DHhOrDEUnyZxxJU9hywcqc62XcJU6VSUO\ +bmUJTo1lG6SnKM0pXpyOp/al/4LuXVroTeD/2bvhh4s8BfE/S9cutA+Io+P2k+CZ/Efw+u4PDvhfXod\ +JHhb4e/EDW7C08aI/iWSy1jTdXu7fU/DOr+G9S0LXNAtdWt7iCz6LxP4m/4Lb/A3xn+zD8XtV1H4X/t\ +J+IZPilNf/C/4U+CPBujeJ9QTxrr3wW+K2majpmt6X4C8GeHrzU9MT4Vat8SZZ7mw1W9s7RbI30l4iQ\ +RTH8lf+CVv7DPwP8A2vv2GtY/t/4z+GPgr8eLP9rH4h+Gfh9c67qGiT/8J7pV/wDCf4FXln4Vm8K3+s\ +2d5q7JrA1FrKfTpGlge+vA1teZWOL6V+Ifg7/gpV/wSU1L4Q/E/wD4W5pfiD4feCPiLOvwxMHii48f/\ +DvTPF2reAPHXhmbT2+Hnjizt59DkvPh3r3jq1keztI4olupGivY7tLOcetnWT5Xled1Mny2GH9rl+Kp\ +qSxNOUpTVOpTnKdGbcnGcEpTopSlaooc70k38rwRmmFpRw2OxOKr4GpiMFmFOUsLyRrzqYnA4nD0qXP\ +Nxj9VrVKsKOOjH3p4KpiIwi5uKf8AfX8CPG3j/wCI3we+Hnjf4qfC/U/gv8R/EXhuzvvGnwv1fVdK1u\ +88HeIAZLfUNNGraNdTQX1i0sJntXLJP9lu4RdwW12J7aIrxn9gT9pu+/bH/Y++Bf7SWreH7bwtrnxK8\ +L383iPQ7FblNMtPE/hfxLrngnxNLosd7NLNFoNxr/hvUbmwSaWaVLO7gWSeZw0rle0dx9gV/nmftWeH\ +PD1/+1n+1xd32g6Le3Uv7Wf7T/m3N3pdjc3Evl/Hj4gxJ5k00DM+2NEUZJwqADgCv9DOv8+b9qH/AJO\ +r/a0/7Oz/AGof/V9/EOv5a+lM3Hh3hZptP67V2/68M4/ELirijhDwM4mzLhPiTH8L5jX4s4WoTxGXYz\ +EYKvOhLJ+NKkqM6uGqUqkqUqlKnOVNycHOnCTXNCLX5Q/twQQ+E/hn4Jv/AArDF4Zvrv4s+G9Nur3w/\ +GmjXdzp0+geLZp7C4udOEbzWTzW1u7xMxRmt0YqSiked+fP/wA9pf8Av4/+Nek/8FAP+SU+Af8Ass3h\ +X/1G/GdeY1/TX0O8gyLMvA/L8VmOS4TH4p5pmUXUr4ajVqOMXQ5Y89SEpWjd2V7K7sfyNm3jh41Ry/K\ +JR8X+KIuTxF2uIM2TdpQtf/a9bdC273kt4trarcTz3FxNFBBFNHGSY45p2+aeZEVRFC55YdMDJNTPY6\ +8Lq3tRZXguWgu7g232yx3mBZLKNZy/2/yyokd1A37wWJ27STXb6NN4BGqaSJNN8YSauJJg7preixaa9\ +6NNvRdukTeH3litSv2kxqXd1JQMzYYnqjN4T/4ScF9N8QljoLC1RNb00KqjUFN888p8PneWJ04RKqLt\ +8uYuz70CfuHhtjOG6XDeZqfhf9beG4RVZSqZPhZznWcsDS9rBuavFc7qSnpJU1UnfSz/ALo41yrxKxH\ +iX4oVp/SojTjjuJ+IsNGlQ42zqNPB0fr2LqQp1Kap8uHlRUFQtDmUKkoU4rld1p/sm6bYeI/2pv2cvD\ +niXTLTWdE1j4/fCrQPEHh/XLW01XStV066+Ieh6Zq2katp1yJrfUtOnt2uIZoZFkhmilZHVkYg/wBdP\ +xb+HP7IPwp8TeC/B8H7Cvw7+JXiPxxoXjXxLp+neAPgv+zdbf2dongLUPA+l65e6td/EfXvD0Cbr74h\ +eHY4I7aW5mk3zM0caRbm/lt/Z21DwRf/ALZv7McnhrT5LW8/4aU+Dy3clmn2PTWnT4neHobrdZyRgec\ +JYH5gSJHa4aVnlbg/1i/HP/k5b4D/APZDP2m//U+/ZPr+NfHPNsIof6zZbwcuF8U8myuawuMwOHpSjO\ +pmeOpVKnsoXThOLtTnLkqSjGEpQjZJfpOQ1fEHgfAYLgGt9IbFeJ+Dy/jLjan/AGrknE2c4rDVaOH4f\ +4Tr4bC1MVUqUZqvhp3+s0KU61ChXqVqdLEVbznLw3+yP2bP+kWZ/wDDWfsJf/Pxq5q/wS/ZM8fJ+w54\ +/wDB37NXwY0Pwr8ZfiJb+IpdJu/g38NdNvdS8JeJ/wBkb4/+PtH0LxZYaXpM1teeTqNn4eu5LUzXVtH\ +qGi288TySW0Ew99ryT4V/8kV/4JP/AE+HH/rAPx7r8M4Lz2vxHVxtDMsDhHDDSwUo+zw1Km7yxlGEk2\ +lqnHRr9D7HL+MeOctx9evhPEDiCM5ZPxUmp57mtWLcOEs9rU5ctXFzSnTq0oVKclZxmlJO6i1heJND/\ +ZK0bx1498CaB/wTr8O/EGf4c67pPhrxD4g8J/B39kaw8PnW9X8EeEfiBFZaePHvxE0TULnyvD/jbQvN\ +kawSHz5JIopJRGWOQ0H7J1jf+HIPEv8AwTV0/wAJaX4j8aeBfAqeI9Y+EH7GN9pGk6v8RPGWheA/Dtx\ +qlt4W+K+o6gdOPiHxHpaTva2N1LFFI0vksqNXpXh//ktP7Wn/AGXPwj/6yv8As2VkfGf/AJF/wJ/2cV\ ++yb/61H8Hq8bG8YZjQ4oxeVU8FgVhKOPqYeKeDouXs44h00ua2/Klr31PJwPEnGVbKcrr1PEHiN18Xg\ +sLWnP8A1gzhP2lbDUqs5JLGci9+baXLZLSzR8ND/gk34C8W/wDBQbxp4y1fxd4Ot/h14KX4O/G+P4La\ +B8FNF0HwVqWgeLfE3xV8O6P8M5rOz8W/YYtMtI/gzYy6ldHTJI9cPiG6WbTrUmR5/rJYP2Tr6/8AEcH\ +hr/gmrp/i3S/DnjTx14FfxHo/wg/YxsdI1bV/h34y13wH4iuNLtvFPxX07UBpw8Q+HNUSB7qxtZZYo1\ +l8lVda+vvDP/J2fxs/7N2/Ze/9WV+19Xzp8GP+Rf8AHf8A2cV+1l/61H8Ya+98Q+Jsxy3KcnrUqWGry\ +pV8VhoKrhqMo06FGrONOEIqMVFRjCKva7UVdt6njYDMc8y7ibNY5bxRnGWLMcp4XzDFPDZvmWHnisdm\ +eQYHH43FYmpSxUKuIrVsXiK9XmqzkoOtONNRhyxj+XPxQ/YA+H/xk/bC+Hnjfwp4P8b/ALLWj/EHxXo\ +VjoHw/wDEXwP/AGdfGvwifxd8PPAmu+O7+w1HSfhx+1FIbXRNX8OfDXVWubUeHpbSe7lmF1KftzEd18\ +Vf+Cb3wl1T9pb9oz9rSXXPDvgb4N/ss/ErwL4o8Q/s6+E/gh4a1bw/408JfCb9n34IfGfxjoGn27eNN\ +H0qx/t+DV9Ys5bafTZLZ57uS4unmW4lRf0j8Qf8lp/ZL/7Ln4u/9ZX/AGk6yfip/wAkV/4KwfT4j/8A\ +rAPwErt4Q42z7NuHnmWKq0VisJUxWBg4YejFLCQwCxEaL9xvk9rCEnqnaKW10+WeEnLEcT4SWZY6dCl\ +lmAzqEXjsXJRzetxbleU1Myd6zVXGPA4vFUY16yq1IOvUqRaqcso/Ev7YH7Mvwv8A2k/hpofgb4afsb\ ++NP2bNd0rxzpniy78c+BvhJ+xdcatquk2OgeJtHn8J3CaB+1PoMw06e812wvHLXkkXm6FCGtncpLD3f\ +7L/AOw/+y746+Aeu/sifFT4GapH8RPh54a0rxB4h+MnibwB8GvBHxT13Tvil8QPinqngzXvDfiz4Z/E\ +vxpcWd3pkng/VNMeC/1WRJLbRraOW0msLprRPob9oXwh8YfHngCHwn8FvHmn/DTX9Z8TaBbeJvGlx9p\ +/tjR/AP2iR/FMng42+nXKr4ve3WBLQyiCMCSUi7tZfLmT8vbb4z/ED9k/WP8AgoDq3wf+M/jr466D8N\ +/2dPhNousfEn4n6vaePPEfw++NutfF688GeCvCtt4ja0S21K20+x+IvxA1X7K0DQx31nJZ3MbtZzq/H\ +4ccRcQ8S4jAZfPMsFTwuEq1MR9TpYNwqU5RiqVOv7eFP2dGcqtaKppz5pxjVtZ8il5nGmY5nDCZvjZZ\ +vmtfN8zoUsHPGVs0xlWpXozr0ZSwmInXxM6uIwrhTbdCpzUlU9jLkvFOPkbf8EffDVl+zf8ADP8AaJn\ +/AGgfHn9mfEDwj8C9Xl+HXhf4UeGtd8R3HiP433vgfw9pOg6PrPiL4x+HdNMC+JfHFhEbi+e2jjtonl\ +kZmXa33v8As0fsu/s2/s7eEr3RNQ/YU+M/xu8R6zcW91rfjL4x6T+xj4wvS1qkiQWXh3StT/aAltvC+\ +kqZpmMdurXE7OpvLq5ENuIfkrxOnxs/Zz+Hf7CngTwr8cfHnxL8Oftm+APgDqug+DPjRrkniTwt8KPi\ +j8O/iD+zj8RPDj+Dp7Wx+0+HPh7FFq9vpq6ZAswjs4nLfaZktjB6ZJovxw+A/wAbP2W/Dkv7UnxM+Mv\ +xy+KfjbTj8cvhPqOsQ+IPhhp/wxmt7y48c+MPDPhoaNbP4I0nTpIvL065kS3a9eB3hit0gns69binO+\ +IVXoZZgs/wM6WPyyljZRq4OUnjZU1ipVa1ZwopQpRWEt7TEO0ZyholzSh7eOxWOw2fZxiXPM8p/wBWc\ ++zfA5ZRpZliKU8kwsMRThDAYWdDFLklSlWq0p/Vqko1VGUlOd05fP3/AAVd1f8AZK1j4M+DIvhd8DtC\ ++APxr8MfG+88Lat4OsfCfwg8Ma/feEG+FugeNdW1jVn+D/iHVbHVvD7/APCb/DoadPJfMwuW1GBIkaG\ +4r9Rv+CbH7C3wV8N/se/CrVPi78D/AIXeN/iD8QrG4+JOtan4/wDhz4T8U61ZWXi6RLvwvo8V54j0ee\ +4sbSHwjFoTPa7lSO7ubp/LV5ZM/wA9X7Rf7JHw2/Z28N/FbRLuP48eMviP4O+KuheGvD3xO07wbpGj/\ +s02nhvW/Anw/wDHUWheNNTuhfXtt8R2g8U6vDBaQaiY5I7azuXRFmZT/YP+1jq2q+Fv2Uf2ltd8Manq\ +HhzW/Dn7PXxk1bw9rGg3tzpGq6DqukfDfxHeaTqejahp8kc2l6ha3dvby280DpJBJAjxMrKpH6DgqmX\ +43hfI8twuIp5tgMT+9Vb6r9Xp1b1J8so4WXN7KPM3LlbcuZOVlc/NuI894yynNqXE+H4jzTLeIMxxFf\ +Dyxf8AaWJqY5KjhcD7sswVf6zVg6OKpw5ZStGnCFPmmlaP8pP/AASB/wCCcnw6/b9/Yq8d/EPxz8QPH\ +nhX4r+Fv2lPG3gnS/Glrdr4ntLvwpZ/C/4Na7p+j614f1ucfa47bVvEOtzQSWt3ZTZ1ORJ5J41gSH9E\ +PBP/AAQR8BaZ8d/2cPBfxQ/aN8Y+PfBXxa+K+veCNb03wx4GsPAWt2em6B8DfjJ8YFkstd1PxZ4gjWS\ +e9+FtlYS/6EpW31eaWN0mjjNflN+wZ4v8P+CP2bvixpHhL9oz9p34N/tVH4veMtQ+Af7OH7Olv4o1H4\ +cfFWyg8H+Bh4S8U+L/AAP4f8MXOman4h1LVNP1nT9TnuNVguYtM8MWjvpM0dvDFefu38f/AAp8f5/GH\ +7N/xo/au/a88RfsnfCfSND0eJbn4GeIH8KeNfAHxltv2N/j342+JHirV7w6OIr/AFe7+IHh4eFtL0qw\ +u706xovjG80e1+wXl9vuftOKq0o8SRr4arRwGCljcPGhTVGnL2dOpWw1OVHDyVNqMKsJuk5UpRhBc12\ +uQx8Pcx4jxeMzbLc0zbG5zQzvLc7xOYUa2LxFJ47EYPKcxxtDGYt1Kili54PFQjj4Ku5urUpOC5pVLS\ +/q/wDhj8M/A3wa+Hng34VfDPw7Y+E/APgDw9pvhfwp4d0/zTbaXo+lW629tCZriR5by5YK0k9xPJJcX\ +M80lxcSyTSSSMV8sf8ABNjx98dvil+wz+zf8Qf2lobuP4z+KvAkmqeKp9Q0uLRdS1XT38Qa1D4L8Q6p\ +pkNvClpqmp+A4fDOoXISGJWn1OR1ijDBFK+oPCPuGv8APM/as8R+HrD9rP8Aa4tL7XtFsrqL9rP9p/z\ +ba71SxtriLzPjx8QZU8yGadWTdG6MMgZVwRwRX+hnX4ufBP8A5BHxV/7Oz/bg/wDWy/jxX4d418ILjX\ +CcP5U8weWrD1MRiOdUvbX5I0qfJy+0pWv7W/NzO3LazvdfQZjkHC/Efg/xbgeLMLj8Xl1LiXhirCOXY\ +3D4Cuq8cr4vhGU62Jy7M6cqSpzqKVNUITc3CSrRjCUKn8Ff7cE8Piz4Z+CbDwrNF4mvrT4s+G9SurLw\ +/Ims3dtp0GgeLYZ7+4ttOMjw2STXNujysoRWuEUsC6g+d+RP/wA8Zf8Av2/+Ff0if8HPP/JhHwj/AOz\ +vfAP/AKpn4/V/RPX6R4W5rnvg34X8PZJl2IwmdYXH47NKqlXwtanUhKLwvMr08a4yT51b3YuNndyvp+\ +A4jw48FcbNZdLIOKKayxcymuJcpbn7duTTX+qGnL7PTV3v0sf5y80E5uGljF1G8c8skU1u9xBKhYSRl\ +kmgZWAMUjg4OCHINZMVjepctDsu0tbdo7u3dGuEkWZm+QLOqBg8csTvlXDLmIknJr+3z4c/FvxN8Kf2\ +Qv2FoPB/gvQvHHiP4lfDv4L+ANO0/wAS+NdQ8BaJp32b9m7XviPd6te65pfgbxDO+LH4e3VtHBHpx8y\ +bUo2aaJI23dn/AMLz/aW/6IP8DP8AxJvx9/8AQn17fCn0z8+8M8kxHDtDF4HLpZ5k2GwGJg8LmM3LDu\ +nT5ZOVKrKDqOmqlNNO8Y1qlknI/oLjvwW4SxXiP4tY7K8m4nnQzjiDP4zceLchw1NVZZtiHWq0KFfhz\ +2lJ80ZwhJylKMZNe0m1zH8cX7Jmo6b4a/ak/Zv8Q+IdRtND0HRPj38J9c17Xtdvo7DS9K0yy+IOhajq\ +usaxq+pTLFZWMNvHcT3FxPIscccbySOqqSP7BPib8Sf2Bfi9qfhrWvGv7S3wh/tnwhY+ItL0DVvB/wC\ +1u3w01Oz0zxZceHbvxDp09/8ADX4q6RLqdjc3XhLw3K0N088aSaRE8ao24t84/t4/E3U/i7/wS0+O3j\ +XWvDVj4Q1n/hJk8H6toGl+IrjxZplnqfwz/ay0r4a38+neIbvw5pEup2NzdeEpbqFpdNtJEjvVjeLch\ +Zv5Cra2ub65W1tVgMhgmuGa4mkhQJDJbxkAx28hZi1wvYDCnmpwOQ4v6QeLx3EOMzTAZbgqGBy6hGi8\ +sq4qjXoyq43F0qkoVsfRcGnUvyyi7NRdoyi7/I5nxDwJ4JcCcGcN5dwPxPmubYvijjGs6i4zyvB4mji\ +YZXwnh8ZF4qnwjVp1YTp0rXjKF/3t6laNWKh/aD5f/BOP/o6zSf8AxYz8Xv8A6Iyp/F3x6/ZC8Kap+x\ +h4S8A/H34Dw+CfhV8VZtKgtrH40+C9ZtvCPgnQ/wBlD9oPwRoEusard+KriaDTkvNQ8Oact5fTs013q\ +drDJPJdXMYk/jL/AOEc1n00z/wNuv8A5W1+gn/BIqTzf2//AIAy42+ZbfFGTbnO3f8ABf4gtjOBnGfS\ +uHib6P8AT4Q4ezLPcvz3L4ywUsLOUKGSLDSqpYuhyxlUhmUmoqTvrCW1lZ6r0/DPxw4Yz7jSjk+deHf\ +FEKWPybiuEKmJ48y7Hwp/8YpnUqjjRXCEbTlSU4QnzxUJSU5RqKLpT/pD8Uaz/wAE6/F/i3xN441P9p\ +n4fad4i8ZX2n6p4mn8H/txeLPh/pmranpfh3RPCVlqM/h3wH8btN06O+Xw54b0K0aaO0SSWPTIjKzuC\ +xy7T/h29a6noeqyftNeDNWn8O+I/DfizSrTxL+3x8QfFeiJ4g8Ia9p3ifw3qF74d8TfHu70/VvsniDS\ +dNu44ru2ngM1lGzxsBivoS6+L3xp1nx78VPCvw4+E3wu1zQ/hd4w0bwTda742+OHizwTqur6rqfwx+H\ +vxMnuLfw9oXwB8Qw2unxWnxDsbVHbUnklk0+WQxRKyKczX/jL8fvBK+HNV8bfBn4PW3hjV/iH8LfAWp\ +3vhb9oPxp4h17Tf+FofEnwp8NbLVbDQ9W/Zq0m31b7JqHiy0uZYJNSs/MhtZFSZXKg/gFXDZG8RXxVX\ +B4CeIp1ajqVnklaT9rCo1Um63M7tVFJupzNNpy5nufpOHqZY6OBwlDJ+JoU8TQw3sMP/wAREyOEnRr0\ +ac8NTjh3w/GcOajUpqFF04yimoOEWuVeY+Hv2pv2YoP2nfi9r837RvwHh0LU/gP+zlo+m61L8Xvh9Hp\ +OoatofxB/amvda0ux1J/EIhu9Rs7PxDoEt1BG7S28WuWckqolzCX5y7/4dvXWp65qsf7TXgzSZ/EXiP\ +xJ4s1W08Nft8fEHwpoj+IPF+vaj4n8SahZeHfDPx7tNP0n7X4g1bUruSK0toIBNeyMkag4r6b8M/8AJ\ +2fxs/7N2/Ze/wDVlftfVyugfGX4/eNl8R6r4J+DPweufDGkfEP4peAtMvfFP7QfjTw9r2pf8Kv+JPiv\ +4a3uq3+h6T+zVq1vpP2vUPCd3cxQR6leeXDdRq8zOGA3rUKFbD06ObxwmOTr4yVOFTLauKs44manJRV\ +apyaySvZaSSu7Nv3uKcVwi+IKWIybh3iHA+yyDg6FarT40yjLYONXhbK5YalKVfhun7Wap05p8s3zSh\ +OoqdKMlCPkXhfWf+CdfhDxb4Z8caZ+0z8PtR8ReDb7UNU8Mz+MP24vFnxA0zSdT1Tw7rfhK91GDw748\ ++N2padJfN4c8Sa7aLNJaPJFHqcpiZHIYZnhH49fsheK9U/bP8JePvj78B5vBPxV+KsOlT2198afBejW\ +3i7wTrn7KH7PngjX5dH1W08VW80+nPeaf4j05ryxnVobvTLqGOeO6tpBH9B2vxe+NOjePfhX4V+I/wA\ +Jvhdoeh/FHxhrPgm113wT8cPFnjbVdI1XTPhj8QviZBcXHh7XfgD4ehutPltPh5fWruupJJFJqEUgil\ +VXUcnYePf+FV2X/BQ34n/2V/b3/CuPiNf+Pf7D+3f2X/bP/CH/ALFH7OHiH+yv7T+x3H9nfaP7O8nz/\ +s8/k+d5nky7djRSp4ahQoLAfU8HgaOJq+2hDLauHjzfUas5udF1oOd6Lim1F8y5Vd8ribZFU4YqYTj6\ +ljuGuI8bmeP4dwLw03xplONnOlLjLh+hRhRxVLhydPDyjjYyfvzfJy1L04e1jWj8JftVeGf2d/Fnwi1\ +Hw5+yp+2x8J/A3xS1XV9LgfxX8SP+CivxkuNH0jwuhnn1w6fYr8WNfgv9ZuDDZ2ix3enPbrbX91MJI7\ +iKDPzf8Efgr8MNJ+E/x5/Z++KX7Qn/AATO8A/DP4z/AAs0vQZvEvwN/aQ+I/jTx63xJ8FeJrfxF8Otf\ +1mw+NfxGn0uHw1a6lqni6/v7bSl0+W7vb6FU8uIlof20/4Tb9qn/oif7P3/AIk58Rv/AKEitr4XfFHx\ +/wCJ/H/j74cfEfwD4P8ABmueDPB/w28bWt14J+JOtfEXStX0r4i618UdCgt7ifXfhd4Xm0rULW7+F98\ +zosF1HLHqsREqMjofRyrEYXASw+DyvD4HA1alb2lNxyavQftoUpvnVR1IRU40lVjFyd+WU4L45KXyWY\ +Yvh2WX47F4/IOIMxwmCpwlXf8Ar9kWMqRpSxOHhC9Knw7VqzgsTKg+VU5KM+Wo0lByj+Fvwa8L+FfjB\ +4H+CPjH9qj9q/8AYsmHwO/Zt0fwz+zN8J/DXx01L4aa14a8a3Ph3wdf+GfEXxq8WWPiiy13wl400298\ +I+GbbVItC3NDc6fI8CoYJLa84L4B/BjVvh3490zxF8SP2t/+CdHjZ/EnirRh8XvirZft4ftPaR8c/EP\ +gAavp7axpGm6t4S+J/h/StQ1K00G3mj0hL+0MAngt/tskqIWH7RfDb4m6n8If2Bf2afGui+GrHxfrP/\ +Cof2SPB+k6BqniK48J6Zean8S2+FXw1sJ9R8Q2nhzV5dMsba68WxXUzRabdyPHZNGkW5wy7P8AwvP9p\ +b/og/wM/wDEm/H3/wBCfXk5jxZk2Co4XD8RV8shiMywOHvTnlFasnhuaU6dO9OpKHs411UqKm7JVPf5\ +F7rPsuJ8JkMONOPMPkPC3E9fBZRxDnGGVb/XbK8PJ4ijiZ06tVLEcO+3dWrTlTdWtKdWdTmUalapKLa\ +/E744+AtZ074GftI/BvQv+CgP7IXxD+AfinXfE/xzkutb+Lb/ABA/at8faz4P8PaNqPgb4YSz6j4uub\ +LUt0nw88DaTBcWs32yQaXE8NsVkfTpP2a/aB/aA/Zk+K/wF+N3wt8O/tVfsx2XiD4k/CL4k+AdCvNa+\ +OXw/t9HtNY8Y+DNa8O6Zc6tcWOs3M8GmR3uowNO8NvPKsSO0cMrgI2H8Rvi34m+K37IX7dUHjDwXoXg\ +fxH8Nfh38aPAGo6f4a8a6h490TUftP7N2g/Ee01ay1zVPA3h6dM2PxCtbaSCTTh5c2myMs0qSLt/QKv\ +ey3M8bmMqNbLcbhFl0aFCtQVPA1KNNupUrqU1S+sQcZT9lHnulflj7qs3L5niZeGuA4N4cxmacC59HO\ +Z53nmHrT/1nyupWlHDZdwzVoxqYiHC1SnVpxWLk6MYxXs3Oq3OaqRjS/jR/wCCafww+CvxM/YI+Ltt4\ +v8AjD8Mf2Yv2pvC/wC2b49+Lf7O/jT4q+NtA+F/jXw+X+H3wUl0qa7TU7tNSk8B3+o6VqlrNNbQXdvD\ +faa9zBFdXFg8En6a+L7P9qL9q39rX9je38KfGv8A4JofHfVtAvZLPw38A9T+LvjX4ofCDU/i34b+C/x\ +G8d+LvjF8TPBXgPwxZ6lPoELeEdRXRf3tzFp9/Po1jPDJbX+qST8j/wAGw3/JhHxc/wCzvfH3/qmfgD\ +X7+T/8nK/sNf8AZxfj/wD9Yr/a4r9G4uxWd5dxticNUxmFxFOjmOGo3WFqQkqdavhqVRU3LF1XC8G7X\ +57Nt/ad/nPDmp4YcQzq4KhwjnmFxX9i8Q4vD1cRxBl+KpUsThMizLHUJVKNPhjCTqwVfDwcoQxFCTV+\ +WpB6n6N/AQfHwfCbwoP2nx8Hx8cx/bg8cD4Cf8Jp/wAKmA/4STWP+EZHhT/hYX/E4/5E/wD4R/7d9s/\ +5iX2z7P8A6L5FFewUV90fGhX4ufBP/kEfFX/s7P8Abg/9bL+PFftHX8+nw/8Ail448OXPxl0bR/2bvj\ +R4+06z/az/AG1vs3i3wlrv7O9n4f1b7R+198b7ub+z7bx18e9F1WPyJ55baX7VpltmezkaDzrYw3Ev5\ +5xxXhQxOTznGck6eLXuU6lR35sK9Y04yklpu1a9le7V/wBGybIsdxD4YcZ4LAV8Fh61LPuGqrljsxy/\ +LKTjHL+K4NRxGZYrCUJ1Lzi1RhUlVlFTnGDhTqSj+Sf/AAc8/wDJhHwj/wCzvfAP/qmfj9X9E9fzKf8\ +ABxV428S+Pv2J/hdo/iv4QfET4I6dbftS+CdTh8V/E/U/hNq2gahew/CX43Wsfh6ztvgx8UPF+qJrEs\ +F5c3Mb3GmwWAh0m4WW+iuGtbe5/eL/AIXZ8Sv+jQf2if8Awpv2TP8A6KGjMs2wsuDOEKapYnmp4jNW2\ +8FjFH3pYK3LN0FGT095RbcdOa11f81peF/Ev9p5lL+0+HbShh/+av4Tvoqm6/tu6+aV+h8j6R/ybZ/w\ +Sz+vwr/9YS+ONfRNeBfBLVk8ffsmfs1eDvH/AOw58RPjL4V0P4MfBu70mXxFb/sjeJ/CWpXum/DXSdL\ +sPFmhaP4++P8ADc2fnadeXptZLvT7LUI7bVHint7aSSaAdF/wqv4K/wDSJ8f+G4/YB/8An91/NWd8FV\ +eJK2BzKjjpYaEsJhafLLBYyTvClFNqUaXK076NOx/UPGOX4/LeOfEDCV6+TynHiHPZprirhKDcaua4u\ +rHmp1s9pVac0p2lTnCMotWkk7pfLX7Un/KJL9oz/st3xf8A/Xh3iKv5YPDn/IZH/YMvf/SrTK/rb/bc\ +svFfiX9irxx+z98MP2OfiJ8I9P8AFuv/AAp8I+DbI3n7LPhr4f6T4h8VfHrwFJptgdL+H/x4vpNLGp+\ +KtSWLzYNNaEXut/ar+S3tzdXkX4USf8Eiv2/pceb8AbaTbnb5nxR+C77c4zjd8QTjOB+Vf2R4B8VcNc\ +I5RmWU55mksHXpYbLKUXLC4te09hTxFOU4x9g2otrS9u26dv5e8bfC/jfPcp4Fz/KMPk+Ow3+sXGlea\ +hxXwn7ixuC4Z9nD2ks7VKVSKbdSEJylBcrmoxqU3L4d1rSrzU/s32TV7rSvI87zPswlPn+b5Wzf5V1H\ +9zy2xnd/rDjHf7W/4JAW/l/t/wDwAl8+4ffZfFD93JLuiTd8F/iA3yJt+XGMDngHFWP+HQn7fP8A0b7\ +Zf+HO+Cn/AM8Cvpn9jP8AYz/a0/ZB/a0+AfxT+KfwD1650S517x74Q0XRfCHj34Jatr+t6/q3wS+KV9\ +Dp+nw33xSs7K1WLRtH1q9llvb20gEGkSRRSS3ktra3H6T4jeJHBeP4JzrL8Dnn1rFYn6tGnTjhcWpSl\ +9boOyboK7dnZN3drLV2PmPB/wALfEqPHuBlWwWU4HA4fKOK/azlxTwjNKNThTO6a5vZZ1UqKKnNOdRp\ +RpQTnOUKcZSj/Q/8Jv8Akp/7XH/ZwPhj/wBZS/Zlr43/AG2f2X/G/jvxt4Q+KOkftL/GL4e+Ab/4ifs\ +1+DfFPwk8IeJvF9vp+oa9r/x58D+DLfx/4Y1C68bPpngnxFp8Gu+HL+yW28PTQx6r4Oi1Rla/u57ge9\ +eK/D/gbx5r9/4r8cf8Ey/EvjPxRqv2X+1PEnivwt+wt4i1/UvsNlbabZfb9Y1f9oWa4vPJ06ztLeLzJ\ +G8uG1jiTCIqjO0jwR8MPD+raXr2g/8ABLfVNE13RNRstX0XWtI8E/sGabq2katptzFe6dqml6jZftAp\ +Np+o295DDLBPE6SxSwrJGysoI/iXMMAsxw+IwWIw0qmHq1qtWMvZ5hCUXUqzqRk4wwiu4qpaUHU5J2c\ +ZPlbt/SvD+X5tw7m2XZ/l3EGU4bMMNg8HhatF5/wNXpVI4bC4ahVpxq1+JJ8iqyw6lCvHDKtQbjUppV\ +IJmj+zT8HP+FI/tD/Hzwp/wtT4y/F3+0Pgv+zT4h/4ST44eOP+E+8WWP2vxx+1Rpv9h6frH9l2n2bw7\ +F/ZP2iK28ttlzqd3LvPnbV9J/Zu/wCRA8Vf9nDftb/+tV/GevIvD3xe+IMf7Tvxe1JP2WfjxPeXfwH/\ +AGcrGfQIvEP7MQ1bTLbT/iD+1NPaaxfTTftGpYSadfS6new2q217cXaS+Hrw3trZwvp8t8/V/BHww8Q\ +atqmva9/wS31TW9d1vUb3V9a1rV/BP7Bmpatq+ralcy3uo6pqmo3v7QLzahqNxeTTSzzyu8ssszSSMz\ +MSenDKlSoYZZfh6ip4SpjqahOhjUlGri3NNTWHqtuPJZxkr66tOLR6PH/C2d5lxBiJZ9nWTqvmuT8FV\ +5VqXEnCDk6mE4SwFCadCpn+DioT9vzQqwbhOMIypxnTqxqHy18UP2LfipfftIfDbxF4p/bW/aEm8EfF\ +r9oH4kf8I54L8E+IfEfg3VPhJ/anwg+O3xA0j/hBvEuo+M9YtLD7DpGgXHh8+Rolr52k69eQRfZIpWh\ +PqNv8Pf8AhVf7Ln/BT3wF/wAJx8Q/iP8A2C/xY/4rT4reJf8AhMPH2s/2p+w78FNZ/wCJ94i+xW/9o/\ +Z/7R+yWv7lPJsrG2g+byt7ey+FPD/gbwHr9h4r8D/8Ey/EvgzxRpX2r+y/EnhTwt+wt4d1/Tft1lc6b\ +e/YNY0j9oWG4s/O068u7eXy5F8yG6kifKOynmvhx8R/FereK/2utI1f9kX4z+LtH8XfGfS7XxP4YutU\ +/ZZv7K1sr/8AZZ/Z30G/8J+LLDXv2iIrPVvtej2sV1JHatqOny6f4ht4J7gXgvrG08yhlOBwXO4YetR\ +xWZV66UvZ5hWUYVcDUg1etRTf7yPPaMfdi7RtFNL6nL6vGGbZVxNTxGeZHj8r4dyDK2of29wPgnOrhO\ +M8ixEZSWBzipCmlhp+w9rXqpVaqXO3WqU1L7a1bTLbWtK1PRryXUIbTVtPvdMuptJ1bVdA1WK2v7aW1\ +nl0zXdCvba+0XUFilYw3dncQXdtIFmt5opkR1/Iv4Q/sH+P1+NPxZ8IfEf9ub9rbX9c0f4XfA/xJa+N\ +Ph58R9a+HGq6hpXijxZ8ftLg8L+IxrureJ5tY0/TbvwffXenFbu3jt5PF2o4t90zyP8ATv8AwrH4Nf8\ +ASKN//Dd/sB//AD/K9D8BX9l8K/7V/wCFYf8ABPL4jfDj+3vsP9uf8IFYfsUeD/7Z/sv7Z/Zn9q/8I9\ ++0fb/2j9n/ALR1DyPO3+T9um8vb5r7u3EZfh8yxuX4jMsDNwwMqj9yGY3anTlHlcY4WjGVpuMk5tuFp\ +ctuaV/z7KcBxHwrk3EWX8NcU5R7bPaeHjavnnAijCdDE0qqqRrVOI8ZVpXpRq05QoxiqznTdXm9lTcP\ +IZP+Ucf7Kf8A2Cf+Cc3/AKt79nOvcq8U+Avi7VPFf7IXwC8A+Lf2MPir8VfBM3wH+C1jcwarN+yhrng\ +nxdbaN4L8K3elaxFoHjf9oS3mn057zT7G+s11HTbW7haOCSa1trqMxx6H/Cq/gr/0ifH/AIbj9gH/AO\ +f3XxvEXCNTimWS4+hjJ4WOHy/DUHGWDxk23Bzm5KUKXK01USVn0bvY+z4pyrMMn458TcHicRk05V+Kc\ ++xUXHirhKDUK2M5FGdOtnlKrTqR9i3KE4KUW+WSjJNLkdX/AOTbP+Cpn1+Kn/rCXwOr9Qa/Mr426sng\ +H9kz9pXwd4A/Yc+Inwa8K658GPjJd6tL4dt/2RvDHhLTb3Uvhrq2l3/izXdH8A/H+a5vPJ06zsjdSWm\ +n3uoSW2lpFBb3MkcMB+rP+F2fEr/o0H9on/wpv2TP/ooa+64bjTyahRy2q61aeDwmGpuUcJikpNVcU7\ +qLo8yXvK199bbO3xvGnBGe51wNw3jMPjcipQq8QcRTSnxZwqly/wBlcIUl+8WculKd6MnOnCcpU1KDm\ +kqlNz/GH/g2G/5MI+Ln/Z3vj7/1TPwBr9/J/wDk5X9hr/s4vx//AOsV/tcV/N//AMG6vjbxL4B/Yn+K\ +Oj+FPhB8RPjdp1z+1L421ObxX8MNT+E2k6Bp97N8JfgjayeHry2+M/xQ8Iao+sRQWdtcyPb6bPYGHVr\ +dYr6W4W6t7b96fBnxE8X+Lv2rP2I9N8QfAb4r/C6zg+PXxEvovEHjrWPgbqGkXlzH+xp+1ZAmj28Pwz\ ++M3iK/XUZIrmadGmsorQRafMJLpJmt4Z/1DjvMsPiePsY6dPER9rm2Bt7TCYqlb/a8N8XtaMOT/t/lP\ +l/CLw+z7KsZXx2Kx+R1aOE4c4rlOOG4m4bxlZpcLZyrUsPg82r4ivLXSFGlUk9WotJ2/dKiiiv0Y+DC\ +vxc+Cf8AyCPir/2dn+3B/wCtl/Hiv2jr8XPgn/yCPir/ANnZ/twf+tl/HivguMv98yf/AK9Yv/0rCH1\ +s/wDk0vF//ZR8M/8Aqs4uPwr/AODnn/kwj4R/9ne+Af8A1TPx+r+iev52P+Dnn/kwj4R/9ne+Af8A1T\ +Px+r+ieu3NP+SI4N/7Cc3/APSsCfhVH/ka5n/gw/5VT8z9D8SeOtG/ZK/4J16B4E8e678OZ/iD4d+Dv\ +hPxB4h8NaT4I1fWz4fsP2RviJ49Gn2UXxA8I63p9t5viDwToDSS/YGn8mCSKKSMSsT2f9gfGn/o7T45\ +/wDhI/sr/wD0NleawNf2P7J3/BNXxLB4c8aeI9L8Jaf8INY8Rp4F8C+MviJq+k6RffsZfFfwtbapceH\ +fAehajqB04+IfEehWrzpatFFLqkPmsiturs/+Fz+H/wDoRP2iv/ETf2o//nPV/HvF+O4nw+YYGnlWMx\ +9HCfUcG1HD1MRGnzOjHmaVNqN29+t9z+zuJMFlNbjPxBqV8swWLry4k4g551sLhq1S6zjGJKU6tKc9I\ +8tk3ZK1lqSR+KPFvi/9lTwjqfjjxNfeMvEWnfto/DjwfP4m1TT/AA7pep6tpnw//wCClPhzwH4dn1Gy\ +8JaJpunR3y+HPDekxzNaWNrHLJC0piDuxPuHxeuvHus/Gn4TfDjwr8VPGHwu0PXPhd8cPG2u3XgnRvh\ +jqeq6vqvgnxZ8AdC8PW9xP8TPh74hhtdPitPiH4kZ0tYLeSWSaIySssSofnvQrTU7X9kbwlJquh+I/D\ +s+rftv+DfEtppXizw3r3hDxAmieK/+Cn2k+JvDt7qHhvxPp1pqGk/a/D+raZdxR3dtDMYL6N2jAYV7j\ +8ZdfXwT8fvgz421Xw58Q9X8MWvwe/aD8LXup+Avhb8Sfih/ZuveIfGn7NWraHYarZfDXwpq1xpP2vT/\ +AAn4kkgluYooZP7HmRZC6hT+q4ariP7CwVXE16tPETwOSOtUdScKt5V5e2c6ilGonJOXtG5Ju8uZ6s+\ +LqUKMssyahg8DQxVKHE3iJ9XofVqNei5QyPh94eNPDTp1KMuScaboQVNqMowdNJxjbk/HZi+F39lf8L\ +M/4KB/EH4df279u/sT/hO7z9jDwj/bH9mfY/7S/sr/AISD9na3/tD7P/aFh5/k7/K+3Q+Zt81N1Hw/4\ +r1/x54G/wCCZfjjxXf/ANq+KfGfiXwt4r8Sap9lsrH+0tf8RfsLftDavrF/9i022ht7PztRvLmTyreG\ +KGPzNkUaIFUcP8ddK/ZI/aW/4Rb/AIXZ8G/2hvGv/CFf25/wjP8Axjf+274c/sz/AISP+yP7Z/5FL4c\ +2H2zzv7B0n/j483y/sn7ry/Mk3+QfAb9jz4M/Au5/4J3/ABS0H4X6j4G+N3izVNO0j4m32r6348bVm1\ +bXv2Mfjp4i8aaXqnhPxNr0tp4f1E+LdIheeCKxtZbSW0a2jWCLzITxqvmbzWFPDVKONyl1ML7zx+Jq1\ +IL63g7ynTnTrUvaczkqUVVp81PnlKaa5T6fhLA8OLJcwr5vQx2ScXwyfiu1NZBlmFwtZvhLifkp0cTS\ +xGCxXsHSVKeLqTw1d0q/soQouM/aH15Z2fxQ+I/xQ/aCtrb9oL4o/D7Qfh98UfDvgnwz4Z8E+HfgNca\ +Va6VcfAb4LePry4uLzx98Ftd1K81CbxH4616R3kvzGsbxRRRRpHz538UPFmt/B/xD8O9Em/bS8Ya18Q\ +fEPxU+AmlWfwh8bD9le01Xxn4L8efHHwb4D8VyW/hrw98ENK16608+Gb3xYUu9NuYGgk0mWYTgWswHY\ +aR8Q9N+GHxa/aZtPFnhH4ysvin4w+GPFPh3UfCn7P8A8dPiFoGs6CP2cfgH4Xkv7DxL8Pvh1qmnz+X4\ +h8Ma/ZyxC686GbS5FljT5d3yx+0j8Gv2ZP2l/FPh3xPffBb9oXxd8Vdd+InwH8Kzav4k+E37aHhDQNM\ ++GqfFvwTZfEGxSbxD4b03w74J8PR/Dm78b3FzKn2BI5r681KORdVnN07zLEYmFDGvA43nzGOIxK9nVx\ ++JpWgq9XljThTlU9/lUFSp+z5Gmla1k/mOG8vwNXNsjhn2STo8L1MvyxvEYTIMtxSlVngcG6k8TXxFP\ +D/uHUdaeLxH1l1otTd+dylH768M/wDJ2fxs/wCzdv2Xv/VlftfV5Z8PNH+LXxP03xd4su/2mfjD4WVf\ +jL8f/CmneHfC3hj9nE6Do2gfD346fEX4feGrCwk8UfAPVNQn8vw94Y0wSy3eoXU003mStJ8+1c79mn9\ +n74Rfs3/tD/HzwP8ABfwl/wAIZ4X1X4L/ALNPiu/0v+3vE/iLz9fvvHH7VGkXV/8AbfFetX1xFu07Qt\ +Kj8pJlhX7LvWMSPIzs+FXxV0X4a6L4z8I+LvBnx1tdbtfjr+0tq5Gkfs0/tFeK9JutJ8V/tFfFLxZ4c\ +1TS/EfhP4W32naxp154c1zSruCe0u5omivV+YMGUel7WqqOCeYVf7P555i6io4qrGl7RYxckVWSw0qn\ +uubipQj9q0dGx8Y4Wh/b2YLhrCy4gdLJ+A1QnisrwtXFPDPg/BOrOWDlLMqeHTqRoKo6deqk/Zp1feU\ +TH0z4mx6J8e/gx8PPD37Z2ofGbWdc+KPjTwT8SfhPq2o/sx6jquk6V4e+DHxj8TXlxqelfDD4UaNrvh\ +7UNP8AHXg7wzBM8lzFHFJK1ndRM04QbfiDxXr/AID8Df8ABTTxx4Uv/wCyvFPgzxL4p8V+G9U+y2V9/\ +Zuv+Hf2Fv2etX0e/wDsWpW01veeTqNnbSeVcQywyeXsljdCyn5M8Xfsj/scfGz44/DrUtI/Z5+Mtxqf\ +xC+MPjfxT8cNc8V/Dr9r/wCG2gXug6r8Lfi/4lu7+/17xxpmkaV4f8/4snwK0UVhPaTPNNHZ28Zs5bi\ +BvX9A+CXhf4Y/s5f8FKvgj8EfBuo2mhWmqfEvSPBPgnSJ/EfizVrrVvFn7E3wP1Q6XpZ1S9vtS1nUbz\ +xJrl15EHmzytLerBAoURRL5WDxGczo4z2/sqmHp4jEujWpYzEYiopLLZuEIRq0rqNm5uccR7tZyjGk9\ +ah9fhcBwXTw2cvBrGYbMa/DuURxuDxuS5bl2HlSfHmRqvWqzwmLtKbahRhSq5evaYNQq1MUmlQX1F/w\ +qb4n/wDR2/7QP/hMfsp//Qy1x37NfxNTxl8VPjD4W0L9o3/hpHwR4Y+H3wU8QaZ4j+3fBfWP+Ef8VeL\ +/ABH8c9O8UaJ/a/wW8FaLaSbtI8F+DZ/s15HPcwef5qOkV0FO5q3x++G+taVqejXnhr9paG01bT73TL\ +qbSf2Xv2wNA1WK2v7aW1nl0zXdC+EttfaLqCxSsYbuzuILu2kCzW80UyI6/DXwn/4J7fsUfEf4qfEv7\ +P8As6fEPTvhjo3w++Ef/CM/8J7Z/tRfCvzvHmo+I/jP/wALA/sr/hYuoaPqGvbfD9j8MfP8v7RZ2u+H\ +yfJnuLrzeqeIxsczylZJiKWYJzq+1p18yxS5v3FTl0jHFR5FrJylTk+dU1FK7mvgMDl+U1eGuLpcdYD\ +GcPSp0MK8LiMFw1lcuR/X8KqrU6lXKqvt5pxpwp0sRBOhPEznKSiqU/onR/FHi3wh/wAE6/2Z9T8D+J\ +r7wb4i1H4ffsO+D4PE2l6f4d1TU9J0z4geLPgj4D8RT6dZeLdE1LTpL5vDniTVY4Wu7G6jikmWURF0U\ +jT/ALA+NP8A0dp8c/8Awkf2V/8A6GyuY+yandf8E3v2ZZNK0PxH4in0nwZ+wP4lu9K8J+G9e8X+IH0T\ +wp8QfgJ4m8RXun+G/DGnXeoat9k8P6Tqd3LHaW00wgsZHWMhTWh/wufw/wD9CJ+0V/4ib+1H/wDOer8\ +645xvEmHxWQwyfF46hhnleFclhqleNN1Oasm2qTUeflUE2/eso30sfc5xg8rr8Z+KlTFZdg8Zif8AXD\ +iKLlXw2Gr1FBYuDhHmq05zUOaU3GKajzObSu2YeueJPHWs/slf8FFNA8d+Pdd+I0/w+8O/GLwn4f8AE\ +PiXSfBGka2PD9/+yN8O/Hp0+9i+H/hHRNPufK8QeNtfaOX7As/kzxxSySCJSP0wr8uJ2v779k7/AIKV\ +eJZ/DnjTw5pfi3T/AIv6x4cTx14F8ZfDvV9W0ix/Yy+FHha51S38O+PNC07UBpw8Q+HNdtUne1WKWXS\ +5vKZ1XdX6j1+qcG1MXVy7BVMdOpUxc8DhXUlVcnUcva4zWbneTf8Ai1PzXxFp4alwbw9TwlKnQoR4j4\ +jtClGEKcW8n4MclGFNKEff5rqKSUr6XP52P+DYb/kwj4uf9ne+Pv8A1TPwBr9/J/8Ak5X9hr/s4vx//\ +wCsV/tcV+Af/BsN/wAmEfFz/s73x9/6pn4A1+/k/wDycr+w1/2cX4//APWK/wBriv1vxD/5L/MP+xvg\ +f/UvCnyXgh/yN4f9k7xX/wCstnR+vdFFFfbmQV/Pp8P9d/aIs7n4y23gX4W/BfxH4Vj/AGs/21v7K1n\ +xb8e/HHgvxBeb/wBr743yX39oeGdH/Zu1+203y9Re8ii8vVrvzoII7h/Ikla2h/oLr8XPgn/yCPir/w\ +BnZ/twf+tl/HivzzjinOricnjDETwzVPFvmgqbbXNhdH7SFSNtb6JO6Wtrp/o2TZpgcp8MOM8Tj+HMF\ +xPRnn3DUFh8dPMKdKEnl/FclWjLLcfl9d1IqMoJTrSpctSblSlNU5w/nn/4OKtT+LOrfsT/AAutvjP4\ +J+HfgHwun7Uvgmew1j4YfFDxL8XdfudfX4S/G6O10y88N+K/hB4It7HR306TVZZL5NVuJoprO3t10+V\ +LmS5tP3i/4Sb9rP8A6In+zt/4lD8Sv/oQa/GH/g55/wCTCPhH/wBne+Af/VM/H6v6J6MywGKXBnCE3n\ +WJlGeIzW0HDB8sbSwV3FrCKV5X97mlJaLlUdb/AJrS414a/tPMl/xCHh1NQw+v1niy70qb/wDGUW08k\ +vO5+f37LPiH9p2D9mL9nKHQPhD8B9T0KH4D/CGLRdS1j9o34g6Hq2oaTH8PvDyabfapotl+yzqMOj6j\ +LZiGSe1i1C+it5ZGijvLlEEz+8f8JN+1n/0RP9nb/wASh+JX/wBCDXyDAt/ffsnf8E1fDUHiPxp4c0v\ +xbp/wg0fxG/gXx14y+Her6tpFj+xl8V/FNtpdx4i8B67p2oDTh4h8OaFdPAl0sUsulw+arqu2uz/4Ux\ +4f/wCh7/aK/wDEsv2o/wD58Nfz9mPHVHht4DLK08ZXnHCYapzQeDUUp0otRSlhnLRaatvz6n9Icc4PI\ +M34+8QsdU8POH4yqcQZ5G858VTnP2eaYqm6k3T4qoU1OcouUlTpQgm/djFe6tP9o3xD+07N8PvDya18\ +IfgPp9mPjx+yzLDPpf7RvxB1i5k1aD9p34QzaBYy2l3+yzYpDp1zrsem215dCZ5bG0u572Gz1Ga3j0+\ +594/4Sb9rP/oif7O3/iUPxK/+hBr5k0K71O6/ZG8JR6rrniPxFPpP7b/g3w1aar4s8Sa94v8AED6J4U\ +/4KfaT4Z8O2WoeJPE+o3eoat9k8P6TplpFJd3M0wgsY0aQhRXuPxl0BfG3x++DPgnVfEfxD0jwxdfB7\ +9oPxTe6Z4C+KXxJ+F/9pa94e8afs1aTod/qt78NfFek3GrfZNP8WeJI4IrmWWGP+2JnWMOwYfW0MZXq\ +0I5vSxuIf17CZbUjCX1WLX1qrVjGMpLCyS5PaXbjBt6+VvDxWYcNy4R4dyTE+GmQU6OA4i40hOcKnFN\ +SK/s7KeG61SpSpvimlOU66pKHLUxHJHlpuKg/aOp1X/CTftZ/9ET/AGdv/EofiV/9CDXg/wAXvEP7Ts\ +nxB/ZZfUvhD8B7S8g+PHiGXQILH9o34g6hbanqx/Zi/aNhmsdYu5/2WbZ9D05dCm1q5W6hh1GV7vT7W\ +yNmkN5LqFjzfx11X9kj9mn/AIRb/hdnxk/aG8Ff8Jr/AG5/wjP/ABkh+274j/tP/hHP7I/tn/kUviNf\ +/Y/J/t7Sf+PjyvM+1/uvM8uTZ5B8Bv2w/gz8dLn/AIJ3/C3QfihqPjn43eE9U07V/ibY6vonjxdWXVt\ +B/Yx+Onh3xpqmqeLPE2gxWniDUR4t1eFJ54r66lu5btrmNp4vMmHJic5pSxdHKcXnkaGOnWwvLSWIwc\ +6nN9ZwzjF03hKU1OUZqpTSUueMZO3Ktfe4CyvDSpZpxdk3grhcVkNDI+KvaYyWC4uo4f2UeF8/9pUhi\ +VxXjcPOhGph54XFTbpujKrGMKkKzUofff8Awk37Wf8A0RP9nb/xKH4lf/Qg0f8ACTftZ/8ARE/2dv8A\ +xKH4lf8A0INeWaR8PNN+J/xa/aZu/Fni74yqvhb4w+GPC3h3TvCn7QHx0+HugaNoJ/Zx+AfiiSwsPDX\ +w++Iul6fB5niHxPr95LKLXzpptUkaWR/l2/LH7SPxl/Zk/Zo8U+HfDF98af2hfCPxV0L4ifAfxVNpHi\ +T4s/toeL9A1P4av8W/BN78Qb5IfEPiTUvDvjbw9J8ObTxvb3MSfb0kmsbzTY421WA2qdWMzitgKVfFY\ +rMnhsHQq1afPVr4Sm5OlOcLRUsByuc/ZycIe0u9rrdfE5Nl3D2fY/AZNlPhRluZ51jcNhMS6WFwnFmJ\ +p0oYqhQrKdSdLjN1Y0KP1iEa1f6vaGr5Hon9BeHvEP7To/ad+L00Pwh+A8muyfAf9nKLUtNl/aN+IMO\ +k2mkw/EH9qZ9FvrHWk/ZZebUNRuLyfX47q1k0+2is4tMs5Yry+e+mh073j/hJv2s/+iJ/s7f+JQ/Er/\ +6EGvG/2af2gfhF+0h+0P8AHzxx8F/Fv/CZ+F9K+C/7NPhS/wBU/sHxP4d8jX7Hxx+1Rq91YfYvFei2N\ +xLt07XdKk81IWhb7VsWQyJIqM+FXwq0X4laL4z8XeLvGfx1utbuvjr+0tpBOkftLftFeFNJtdJ8KftF\ +fFLwn4c0vS/DnhP4pWOnaPp1n4c0PSrSCC0tIYlisl+UsWY3hMVVlhqE8uzSeOp4ypjZwnGphfZShTx\ +couUakMJWUnJzT0934rNWSPe8QsTkWE4kq0uJfCfKsnxOUZNwZQq0asOKni4VcTwnl1aFKph6nFeB9l\ +CjToSgnO9Xl9lzqpOU6p7P/wAJN+1n/wBET/Z2/wDEofiV/wDQg14P8IfEP7TsfxB/amfTfhD8B7u8n\ ++PHh6XX4L79o34g6fbaZqw/Zi/ZyhhsdHu4P2Wbl9c05tCh0W5a6mh06VLvULqyFm8NnFqF98weLv2u\ +P2OPgn8cfh1pukftDfGW31P4e/GHxv4W+OGh+K/iL+1/8SdAstB0r4W/F/w1d2F/oPjjU9X0rxB5HxZ\ +HgVYpbCC7mSaGO8t5BZxXE6+v6B8bfC/xO/Zy/wCClXxu+CPjLUbvQrvVPiXq/gnxtpEHiPwnq1rq3h\ +P9ib4H6WdU0sapZWOpaNqNn4k0O68ifyoJVlslngYqYpW4oZ5hsbUjGnnyrYzLa1aUqNGvgq03Cngqs\ +5VElhYSUVKfsZOUOWM7xb5rW93J8i/snI+Mq1XwTwOX5NxHkWXU6eLxmF4wwdGVbE8YZBQp4apKpxPX\ +g24U1jqcaNeFWpSUJr9zzxn9cf8ACTftZ/8ARE/2dv8AxKH4lf8A0INH/CTftZ/9ET/Z2/8AEofiV/8\ +AQg1ymrfAH4b6LpWp6zeeJf2lprTSdPvdTuodJ/ah/bA1/VZbawtpbqeLTNC0L4tXN9rWoNFEwhtLO3\ +nu7mQrDbwyzOiN8NfCf/goT+xR8OPip8S/s/7RfxD1H4Y6z8PvhH/wjP8Awnt5+1F8VPJ8ead4j+M//\ +CwP7K/4WLp+sahoO7w/ffDHz/L+z2d1sh8nzp7e68rrr519QxGEo5tnUMthi3JKVTE4OLSjCUnLlq4G\ +knG8VBtS0lOK3aR8FlmWZXxJl+b4zg/wXwnEtfKIUpTp0MBxfUjJ1a1OkqftMLxli3GryTnWjB07yp0\ +asrpQbX0x+yz4h/adg/Zi/Zyh0D4Q/AfU9Ch+A/whi0XUtY/aN+IOh6tqGkx/D7w8mm32qaLZfss6jD\ +o+oy2YhkntYtQvoreWRoo7y5RBM/vH/CTftZ/9ET/Z2/8AEofiV/8AQg18yfa9Ttf+Cb37Msela54j8\ +Oz6t4M/YH8NXeq+E/EmveEPECaJ4r+IPwE8M+IrLT/EnhjUbTUNJ+1+H9W1O0lktLmGYwX0iLIAxrQ/\ +4Ux4f/6Hv9or/wASy/aj/wDnw18xm3GlPhaGT4CvUxmJlXwOHrp0/qajGMlKCj7+GctPZt3bejWt9T7\ +DjKhkGe8feJmPn4dcPwdHifPcM3OfFU6lSVLGynKrP2fFNCmnP2ybjTpxipJ8sYxaitP9qbxD+07P+z\ +F+0bDr/wAIfgPpmhTfAf4vRa1qWj/tG/EHXNW0/SZPh94hTUr7S9Fvf2WdOh1jUYrMzSQWsuoWMVxLG\ +sUl5bI5mT3j/hJv2s/+iJ/s7f8AiUPxK/8AoQa+QZ1v7H9k7/gpV4an8R+NPEel+EtP+L+j+HH8deOv\ +GXxE1fSdIvv2MvhR4pudLt/EXjzXdR1A6cfEPiPXbpIHumiil1SbylRW21+o9fW5FXq5zGOZ0swxNCG\ +NwuGqKMlhXJJ1MUrNrDculm9Et3e+lvmOLM+4fyTgHhjAT8LuH8TGhxBxHFL2/FUYK+V8I1OeK/1mdR\ +TnGrGM1KpOC9nH2cYtzlU/mU/4N1dT+LOk/sT/ABRtvgx4J+Hfj7wu/wC1L42nv9Y+J/xQ8S/CLX7bX\ +2+EvwRjutMs/DfhT4QeN7e+0dNOj0qWO+fVbeaWa8uLdtPiS2jubv8AenwZrHxy1D9qz9iOH4mfDv4U\ +eEdBX49fESW01LwL8ZvF/wARNXn1df2NP2rEgsbnRPEHwG8Lw2unNZvfyPdLqE0qS20MK2ciTvPb/i1\ +/wbDf8mEfFz/s73x9/wCqZ+ANfv5P/wAnK/sNf9nF+P8A/wBYr/a4r9L47weIo8fYz2ma4jF8mbYG/t\ +I4Vc/+14b4vZYalb/tzlPnPCLivIcdjK+GwvhlkeTVsRw5xXGGIw2I4klWoN8LZz79KOM4hxWHclayV\ +ahWjq7xbs1+vdFFFfox8GFfi58E/wDkEfFX/s7P9uD/ANbL+PFftHX8+nw/+FvjjxHc/GXWdH/aR+NH\ +gHTrz9rP9tb7N4S8JaF+zveeH9J+z/tffG+0m/s+58dfATWtVk8+eCW5l+1anc4nvJFg8m2ENvF+ecc\ +VJ0sTk8oYeeJbp4tcsHTTS5sLq/aTpxtpbRt3a0tdr9GybK8Dm3hhxnhsfxHguGKMM+4amsRjoZhUpT\ +ksv4riqMY5bgMwrqpJSlNOdGNLlpzUqsZunCf5J/8ABzz/AMmEfCP/ALO98A/+qZ+P1f0T1/Mp/wAHF\ +XgnxL4B/Yn+F2seK/i/8RPjdp1z+1L4J0yHwp8T9M+E2k6Bp97N8JfjddR+IbO5+DHwv8Iao+sRQWdz\ +bRpcalPYGHVrhpbGW4W1uLb94v8AhSfxK/6O+/aJ/wDCZ/ZM/wDoXqMyx+KfBnCEHkuJjGGIzW03PB8\ +srywV1FLFuV4297mjFarlctbfmtLgrhr+08yf/EXuHW3DD6fVuLLrSpv/AMYvbXyb87Hyxofhvx1rP7\ +JX/BOvX/AngLXfiNP8PvDvwd8WeIPD3hrVvBGka2PD9/8AsjfETwENQspfiB4u0TT7nyvEHjbQFki+3\ +rP5M8ksUcgiYDs/7f8AjT/0aX8c/wDwrv2V/wD6JOuH+CWkp4B/ZM/Zq8Y+P/24/iJ8GvCuufBj4N2m\ +kxeIrj9kbwx4S0291L4a6Tqlh4T0LWPH3wAmubzydOs70Wsd3qF7qEltpbyz3FzJHNOei/4Wp8Ff+ks\ +A/wDDj/sA/wDzhK/n7MeFcgzt4DHZo8ZhcXLCYaHLDE5bTi4wpRUZKNWcp63vdtX7LY/pbjTD1MFx74\ +h4fAca8N4vDR4hzySdXL+NqtSEp5pipzpTnhMh9g5U5ScX7Nzjfac1aTfH4X8W+EP2VPCOmeOPDN94N\ +8Raj+2j8OPGE/hnVNQ8O6pqek6Z8QP+ClPhzx54dg1G98Ja3qWnSXzeHPEmkyTLaX11HFJM0RlLowHu\ +HxetfHujfGn4TfEfwr8K/GHxR0PQ/hd8cPBOu2vgnWfhjpmq6RqvjbxZ8Add8PXFxB8TPiF4ehutPlt\ +Ph54kV3tZ7iSKSGISRKsquPnz4w+EdU8XfB7wd408Iftn/FX4oeENZ+PH7MdjpGs6PD+yhrvha8uZP2\ +qvhT4bOsaXrng39nuFL7UdI11ZLiBRdS2g1LQlt9Stb20W7sJ/V/HthZfCv+yv+Fn/APBQ34jfDj+3v\ +t39h/8ACe3/AOxR4P8A7Z/sv7H/AGn/AGV/wkP7OFv/AGj9n/tHT/P8nf5P26HzNvmpu+rp06FDCrAK\ +hiaOBweEy2EK3tcDzcuHq1XRm5yrOi+dwim1G0rvlUbxZ4dTIsHU4Y4ax9Lj7h3H5njuI+NJTwzwXGc\ +qU543KeHKWKowpUOH442MsPTnOeso8l6b9pV5K0Y5njsRfFH+yv8AhZn/AAT8+IPxF/sL7d/Yn/Cd2f\ +7GHi7+x/7T+x/2l/ZX/CQftE3H9n/aP7PsPP8AJ2eb9hh8zd5SbaPh/wAKa/4D8Df8Ey/A/iuw/srxT\ +4M8S+FvCniTS/tVlff2br/h39hb9obSNYsPtum3M1veeTqNncx+bbzSwyeXvikdCrHnf+FnfBr/AKSu\ +P/4cT9gP/wCcHTPiP8OPFereK/2RdX0j9rr4z+LtH8XfGfVLrwx4ntdL/ZZv7K1sr/8AZZ/aI16w8We\ +FL/Qf2d4rPVvtej2strHJdLqOny6f4huJ4LcXgsb60zX1VVPreGjXxuJdTCxk/aZbJ8rxeGa5vq9SEm\ +/3cYxc24rVaJ3O/hjIPZ4nEZTj+M8iyfLVk/FVSnBYPjuCU/8AVPPoSdNZjkdSjCEI4ipXrxoqNSoo3\ +SqzUKcvSrO8+KHw4+KH7QVzbfs+/FH4g6D8Qfij4d8beGfE3gnxF8BrfSrrSrf4DfBbwDeW9xZ+PvjT\ +oWpWeoQ+I/AuvRuklgI2jSKWKWRJOPO/ih4T1v4weIfh3rc37FvjDRfiD4e+KnwE1Wz+L3jY/sr3eq+\ +DPBfgP44+DfHniuO38S+HvjfquvWunjwzZeLAlppttO08mrSwiAi6mJ3/ABX4g8DeA9fv/Cnjj/gpp4\ +l8GeKNK+y/2p4b8V+Kf2FvDuv6b9usrbUrL7fo+r/s9Q3Fn52nXlpcReZGvmQ3UcqZR1Y52keN/hh4g\ +1bS9B0H/gqRqmt67reo2WkaLoukeNv2DNS1bV9W1K5istO0vS9Osv2fnm1DUbi8mhiggiR5ZZZljjVm\ +YAuvDAVZV8NWrYi1WrUlKk62UvlnUqSnKKUpupFxnNqPvc8f5uazPm8DkmJwqwGb4TiPh32mEwuFhDF\ +wy/xFSq0MNhqVGnUm6eSRoThUpUYSqWgqFS8nycj5V7r4Z/5Oz+Nn/Zu37L3/AKsr9r6vLPh5rHxa+G\ +Gm+LvCd3+zN8YfFKt8Zfj/AOK9O8ReFvE/7OI0HWdA+IXx0+IvxB8NX9hH4o+Pml6hB5nh7xPphliu9\ +PtZoZvMiaP5Nzc14e+EPxBk/ad+L2mp+1N8eILy0+A/7OV9Pr8Xh79mI6tqdtqHxB/amgtNHvoZv2cn\ +sI9OsZdMvZrVrayt7t5fEN4L26vIU0+Kxfq/jf4YeH9W1TQde/4Kkapomu6JqN7pGtaLq/jb9gzTdW0\ +jVtNuZbLUdL1TTr39n5JtP1G3vIZop4JUSWKWFo5FVlIHRKrCVKnWxFPEZfKnWxsYyVXL4qSqYqUpRf\ +t6s02nCPwpbOzaaZ6nE3C+BnnkcFguNeHs8p18i4NqVKU8DxtVlB4bhXLaVKsnl+Q03GFWFacoqpJtx\ +nBThTqxlCNXTPhlHrfx7+DHxD8PfsY6h8GdZ0P4o+NPG3xJ+LGrad+zHp2q6tpXiH4MfGPwzeW+p6r8\ +MPivrOu+IdQ1Dx14x8MzzJJbSxyyRNeXUqtAHO34g8Ka/wCPPA3/AAU08D+FLD+1fFPjPxL4p8KeG9L\ ++1WVj/aWv+Iv2Fv2etI0ew+26lcw29n52o3ltH5txNFDH5m+WREDMDwp4g8DePNfsPCngf/gpp4l8Z+\ +KNV+1f2X4b8KeKf2FvEWv6l9hsrnUr37Bo+kfs9TXF55OnWd3cS+XG3lw2skr4RGYc18OPhx4r0nxX+\ +11q+r/tdfGfwjo/hH4z6XdeJ/E91pf7LNhZXVlYfss/s769f+LPFl/r37O8tnpP2TR7qK1kktV07T4t\ +P8PW889ubw319d4U6eFhQhRw2Hr4jD43E1ZVZqpl+kpYCrSkk6NWNOLUIqb5o3vdtu8UehlWWSdLjTF\ +Zjx9kOCzDJuG8vp4ajPB8cfwqXGuQYulOrHHZFUxNSnLETlh4xw83vCMKcFGrVj7n/wALZ+J//RpH7Q\ +P/AIU/7Kf/ANE1XHfs1/DJPBvxU+MPinQv2cv+GbvBHif4ffBTw/pnhz7D8F9H/wCEg8VeEPEfxz1Hx\ +Rrf9kfBbxrrVpHt0jxp4Ng+03kkFzP5HlIjxWoYcB/ws74Nf9JXH/8ADifsB/8Azg69D8BWFl8VP7V/\ +4Vh/wUN+I3xH/sH7D/bn/CBX/wCxR4w/sb+1Ptn9mf2r/wAI9+zhcf2d9o/s7UPI87Z532Gby93lPt2\ +w0sJVx2CrxqYjHYnCSnKnB1cqk7ypShO3s5xqW5JOTUZLWKcrpWPjcfwy8Fked4KfFHD2RZbm1OhTxN\ +ZYDxDhFRpYqhXpN/WcjqYfm9tThCMqlOTSqTjDllNSXnej+F/Fvi//AIJ1/sz6Z4H8M33jLxFp3w+/Y\ +d8YQeGdL1Dw7pep6tpnw/8AFnwR8eeIoNOvfFut6bp0d8vhzw3qskK3d9axyyQrEJQ7qDp/2/8AGn/o\ +0v45/wDhXfsr/wD0Sdcz8BfCOqeFP2QvgF4+8W/tn/FX4VeCYfgP8Fr65n1WH9lDQ/BPhG21nwX4VtN\ +K0eLX/G/7PdxNBpyXmoWNjZtqOpXV3M0kEc11c3Uhkk0P+FqfBX/pLAP/AA4/7AP/AM4Svls24ayPP4\ +ZPi83WMwmJo4HD0oxp4jLqUZU4qUlPlrVJTd5VJK+iskuVNO/3PF2EeXcfeJuGy3jjhzG4erxPnteXt\ +cv41q1KVarjZRnRlPB5CqF4RpwuoyqLmbcakoSizC1zw3460b9kr/gopr/jvwFrvw5n+IPh34xeLPD/\ +AIe8S6t4I1fWz4fsP2Rvh34COoXsvw/8Xa3p9t5viDwTr6xxfb2n8mCOWWOMSqD+mFfmV8bdJTx9+yZ\ ++0r4x8Aftx/ET4y+FdD+DHxktNWi8O3H7I3ifwlqV7pvw11bVL/wnruseAfgBDc2fnadeWQuo7TULLU\ +I7bVElguLaSSGcfVn/AApP4lf9HfftE/8AhM/smf8A0L1fW5FCGWRjgcDgcTiMJhsLhoU5SqYOcpRVT\ +FNScoV4wle7V4pbPRaX+T4u4cynM+AuGsTmHidw9gcTU4h4jcksJxbCmpf2XwjT9lGFThydeMqcacJT\ +9qlFqpDknN+0jT/GH/g2G/5MI+Ln/Z3vj7/1TPwBr9/J/wDk5X9hr/s4vx//AOsV/tcV/N//AMG6vgn\ +xL4+/Yn+KOseFPi/8RPgjp1t+1L420ybwp8MNM+E2raBqF7D8JfgjdSeIby5+M/wv8X6omsSwXltbSJ\ +b6lBYCHSbdorGK4a6uLn96fBnw78X+Ef2rP2I9S8QfHn4r/FGzn+PXxEsYvD/jrR/gbp+kWdzJ+xp+1\ +ZOmsW83wz+DPh2/bUY4raaBFmvZbQxahMZLV5lt5oP0vjvGYitx9jPaZViMJz5tgb+0lhXyf7Xhvi9l\ +iat/+3OY+b8IuFMhwOMr4nC+JuR5zWw/DnFcoYfDYfiSNau1wtnPuUpYzh7C4dSd7p1q9GOjvJOyf7p\ +UUUV+jHwYV+LnwT/5BHxV/wCzs/24P/Wy/jxX7R1+LnwT/wCQR8Vf+zs/24P/AFsv48V8Fxl/vmT/AP\ +XrF/8ApWEPrZ/8ml4v/wCyj4Z/9VnFx+Ff/Bzz/wAmEfCP/s73wD/6pn4/V/RPX87H/Bzz/wAmEfCP/\ +s73wD/6pn4/V/RPXbmn/JEcG/8AYTm//pWBPwqj/wAjXM/8GH/Kqfl9pH/Jtn/BLP6/Cv8A9YS+ONfR\ +Nea/Dn4SeJvit+yF+wtP4P8AGmheB/Efw1+HfwX8f6dqHiXwVqHj3RNR+0/s3a98OLvSb3Q9L8c+Hp0\ +zY/EK6uY549RHlzabGrQypI23s/8AhRn7S3/RePgZ/wCIyePv/osK/kfirgziXO8dgcfleW/WsJLBYS\ +Kn7bDw96NGKkuWpVhLTvaz6H9f8WcT8OZfxv4hYPMM4hgsXR4j4g5oSo4ubSlm+MnF81HD1INOMl9q6\ +6pHknh7/k0zRP8As/zTv/XrcNfSvjb/AJOp+Cf/AGb9+05/6sb9kivLPFnwy1P4Rfs3eDvBWteJbHxf\ +rP8Aw1p8DPGGra/pfh248J6Zean8S/2//AXxKv4NO8PXfiPV5dMsba68Wy2sKy6ldyPHZLI8u5yq+2/\ +FH4XeP/E/j/wD8R/hx4+8H+DNc8GeD/iT4JurXxt8Nta+IulavpXxF1r4Xa7PcW8GhfFHwvNpWoWt38\ +L7FUdp7qOWPVZQYkZEc/qGEwGNoZRg8A8M547B4HJo1KUZU7qVCtJ1UpOapvlUJaqdpW91u6v8fi8yy\ +urkOT5jUzGGGyzMOJPEH2eJnTxDhbF5Jw9Tw8pU6dGpiEqk6tNW9i5Q5rzjFKTXiP7V/wC0h8VP2fP+\ +EB/4Vn+zD8Qf2j/+Eu/4Sn+2/wDhBZPEcf8Awhv9gf8ACOf2b/av/CP/AA/13P8AaP8AbV/5HnfZf+Q\ +FN5fn/P5Pyn+zf+0H/wALAsv+Cbfwp/4Uh+0N4I/4Qh9B/wCLk/EL4a/8I18J/F3/AAjX7FHxv8N/8U\ +P4x/tqb+3/AO0Ptv2/TP8ARovtWm2k91+78vyz+gH/AAhP7VP/AEWz9n7/AMRj+I3/ANFvXEX/AIC/4\ +VXZf8E8vhh/av8Ab3/CuPiNYeAv7c+w/wBl/wBs/wDCH/sUftH+Hv7V/sz7Zcf2d9o/s7zvI+0T+T53\ +l+dLt3tz1cBnTzSnjqterhsAqmGiqNSGElGN8Xg7whOlUnVftHB1JSm3ytKMLJ2PoOBM74LoZRmeQ4f\ +LsJmfEM8m4rnLHYbEZvCdTl4S4ncK1ahi8PRwi+rQrww9Onh4w9qpSqVlKcVI634Tf8lP/a4/7OB8Mf\ +8ArKX7MtfG/wC2z+1B438CeNvCHwu0j9mj4xfELwDYfET9mvxl4p+LfhDwz4vuNP0/XtA+PPgfxnb+A\ +PDGn3XglNM8beItQg0Lw5YWTW3iGGGTVfGMWlsy39pPbn7HuvhD8adG8e/FTxV8OPiz8LtD0P4o+MNG\ +8bXWheNvgf4s8barpGq6Z8Mfh78M57e38Q6F8fvD0N1p8tp8PLG6RG01JIpNQljMsqqjDM1/4NfH7xs\ +vhzSvG3xm+D1z4Y0j4h/C3x7qdl4W/Z88aeHte1L/AIVf8SfCnxKstKsNc1b9pXVrfSfteoeE7S2lnk\ +0288uG6kZIWcKRrmOAzrEYTGYTB0K2EqVa+Ikqq+qTjOnUrVZKNqle8Y1IzjzPkVSMbpKMrW+Q4ezvg\ +vAZ9k2d5xjcHnGFwuCyym8NN5xQqUMRh8Hg6U6ilhsDyVauHqUavs4e2eHqzUXOU6WkuF/Zp+Mf/C7v\ +2h/j54r/AOFV/GX4Rf2f8F/2afD3/CN/HDwP/wAID4svvsnjj9qjUv7c0/R/7Uu/tPh2X+1vs8Vz5i7\ +7nTLuLYPJ3N6T+zd/yIHir/s4b9rf/wBar+M9bfhn/k7P42f9m7fsvf8Aqyv2vq5XQPg18fvBK+I9K8\ +E/Gb4PW3hjV/iH8UvHumWXin9nzxp4h17Tf+FofEnxX8Sr3Sr/AFzSf2ldJt9W+yah4su7aKePTbPzI\ +bWNnhVyxPZQw+PhSwc/ZzzKdGeYQqTh7Gm3KeMTjLknUhFJqEtIt2stNTt4/wAbkeKzvGYeOIo8NUcZ\ +lHAlfD0azxmIjGnR4OwUKkFVo4avUlKMq9Np1Ix5k3ZtxsfB/wAUP20vipY/tIfDbw74p/Yp/aEh8Ef\ +CX9oH4kf8I5408E+HvEfjLVPi3/Zfwg+O3w/0j/hBvDWo+DNHtL/7dpGv3HiA+Rrd15Ok6DeTxfa4om\ +mHqNv8Qv8Ahan7Ln/BT3x7/wAIP8Q/hx/bz/Fj/ii/it4a/wCEP8faN/Zf7DvwU0b/AIn3h37bcf2d9\ +o/s77Xa/vn86yvraf5fN2L9ZWvwh+NOs+PfhX4q+I/xZ+F2uaH8LvGGs+NrXQvBPwP8WeCdV1fVdT+G\ +PxC+GcFvceIdd+P3iGG10+K0+Id9dOi6a8ksmnxRiWJWdjydh4C/4WpZf8FDfhh/av8AYP8Awsf4jX/\ +gL+3PsP8Aan9jf8Jh+xR+zh4e/tX+zPtlv/aP2f8AtHzvI+0Qed5Pl+dFu3r5VDK87pxxKxuKqVvr1f\ +Eeyo1KeFjJueXThCXPQk4pRcZUlGTTdueT1Tf1+V8T8EVcuz15NlOHwDyLh7KXi8XhcRmlako0uO8ir\ +V6boZhSjVlOaqQxU50ouMXL2FJWTivpTVtTttF0rU9ZvItQmtNJ0+91O6h0nSdV1/VZbawtpbqeLTNC\ +0Kyub7WtQaKJhDaWdvPd3MhWG3hlmdEb8i/hD+3h4/b40/Fnxf8AEf8AYZ/a20DXNY+F3wP8N2vgv4e\ +fDjWviPqun6V4X8WfH7VIPFHiM67pPhibR9P1K78YX1ppwW0uI7iTwjqOLjdC8afov/whP7VP/RbP2f\ +v/ABGP4jf/AEW9bXwu+F3j/wAMeP8Ax98R/iP4+8H+M9c8Z+D/AIbeCbW18E/DbWvh1pWkaV8Ota+KO\ +uwXFxBrvxR8UTarqF1d/FC+V3We1jij0qICJ2d3HdiMDnmLzDK6mGdbKaOGnUlUcoYOrF81GpGMpfv5\ +1NG+SMaaSvUcp3UY8v5tk+b8EZJkPFdDNaeD4txmaUMNTw8adfOMLViqeNw1WpTpv6lQw6U4wdapUry\ +k7YaFOioSqT9p8oSf8o4/2U/+wT/wTm/9W9+znXuVcf8ADb4Zan8Xv2Bf2afBWi+JbHwhrP8AwqH9kj\ +xhpOv6p4duPFmmWep/DRvhV8SrCDUfD1p4j0iXU7G5uvCUVrMsWpWkiR3rSJLuQK2z/wAKM/aW/wCi8\ +fAz/wARk8ff/RYV+ccZ8IcRZ/iMixmUZf8AW8NSyzC0pS9rQp2nGVWbjarVhJ2jOLulbW17ppfofEPE\ +nD+V8b+KeCzTNoYHFf63cQ1VCVHFTvTni4wjJSo0KsNZUpqzkpLlu1Zpvw3V/wDk2z/gqZ9fip/6wl8\ +Dq/UGvz9+I3wk8TfCn9kL9uqfxh400Lxx4j+JXw7+NHj/AFHUPDXgrUPAWiad9m/Zu0H4cWmk2Wh6p4\ +58Qzvix+HtrcyTyaifMm1KRVhiSNd36BV+ncIYHFZbgcJgMbS9ji8LgsLGpDmjLlkquM05oOUXvum15\ +n5/4gY3CZjwTw3jMDXWJwlbiPiPkqKM4qXLk/BsG1GpGE0uaLtzRi+tj+dj/g2G/wCTCPi5/wBne+Pv\ +/VM/AGv38n/5OV/Ya/7OL8f/APrFf7XFfgH/AMGw3/JhHxc/7O98ff8AqmfgDX7+T/8AJyv7DX/Zxfj\ +/AP8AWK/2uK/WPEP/AJL/ADD/ALG+B/8AUvCny3gh/wAjeH/ZO8V/+stnR+vdFFFfbmQV/Pp8P/gJ4H\ +8aXPxl8Taxrvxos9R1L9rP9tb7TbeEv2kf2iPAPh+P7H+198b9Ph/s/wAJeBfilpulaTmC1iaX7LZQ+\ +fO8lzP5lzNNLJ/QXX4ufBP/AJBHxV/7Oz/bg/8AWy/jxX55xxh6GJxOTwxFCFeCp4tpTjGST5sKr2km\ +r2bV97N9z9GybiPiHhjww4zx/DWe43h7HVs+4aozrYHFV8JVlSll/Fc5UpVMPOnOVOU6dObg5OLlCEm\ +rxi1/PP8A8HFXwv8ADXwi/Yn+F3iTwpqfxE1bUb79qXwToc1t8T/i/wDFn43aAllc/CX43X8k9n4U+M\ +/jbX9L0/WBPplsseoW9nFfxQyXFtFcpb3d1FN+8X/DL3w1/wChm/aJ/wDEvv2s/wD59lfjD/wc8/8AJ\ +hHwj/7O98A/+qZ+P1f0T0ZlkuTx4M4QqxynDRq1MRmqlJUKSlJRlguVSfJdqN3y3el3bc/NaXi94svM\ +8yi/FDiLljDD2X9t5lZXVS9l9Z0ufln8J/B/wE+HX7KH7Kni/wCI/i79pWwl8f8Awq+D2j6Tp3gL44/\ +tqa/JqPinUvhAnjK40vw98PfhB48uzpGnR6J4d8Q3KwWWm2+m2NrpZijW3hSGKui/4SH9kz/oN/t+f+\ +DH/gq3/wDHqyNI/wCTbP8Agln9fhX/AOsJfHGvomv5g4h4vr8O4nA5dg8ky6vRWDwtTmrYaUqjlOlFy\ +vKFWCeu3u37tn9U8W8QcaZhxtx/icR4m8V0JPiHPYRp4bP8XRo06dLNcXSpwhTkqvKoxgkkpcqWiikj\ +wD4k/Db4I+Pvgj4Q+Ifw88X/ALQ2raFq37Q37PPheOTxR+0N+1/Y3UF1Y/tf/Db4ceL7O88IfEf4kw3\ +eheILDV7PXYIZp7G3v9Nv9Pi1DT5be8t7S7j9P+JvhP8AZu+EOp+GtF8a+Mf2tP7Z8X2PiLVNA0nwf8\ +c/2/8A4l6neaZ4TuPDtp4h1Gew+Gvj3V5dMsba68W+G4mmukgjeTV4kjZ23BfPfD3/ACaZon/Z/mnf+\ +vW4a9b+Of8Ayct8B/8Ashn7Tf8A6n37J9fXZjmFLA8MVuJaWUYKWNll+VV+SWHToqeJrSjUtFSU0kqj\ +5f3l1yx5nK2vz3+ufiBico4ayGr4m8TRwdLifjbDurDPMbHFTpYDKuHKmHjOs5yi7Si2/wB1yr2lVwj\ +BzbXkn/CQ/smf9Bv9vz/wY/8ABVv/AOPVP4u+D3we8Xap+xh4v8F+MfjxrPhD4ofFWbWNG1e+/ac/aq\ +kubzwtrv7KH7QfjLQ9U0ceJPiqL/wlqM8VnpZae3Ww1IWl1dabcMtpe39pP7XXknwr/wCSK/8ABJ/6f\ +Dj/ANYB+PdeHwjxHPiipjKGPybAYeOFngpRdDDuEm5YyjCSk51KicXHSyS821oejlXFPHOT5jiMRg/E\ +3imvKeTcVJxxWfYytC8OEs8rU5xUHR5Z06tKE4SblyySlG0opj/FEv7KfhDxb4m8D6n4u/bR1HxF4Nv\ +tP0vxNB4P+I//AAUp+IGmaTqeqeHdE8W2WnT+IvAfiPUtOkvm8OeJNCu2hju3kij1OISqjkqMu0139k\ +a61PQ9Kk8W/tv6TP4i8R+G/CelXfiXxl/wU+8KaI/iDxfr2neGPDen3viLxNq1pp+k/a/EGrabaRy3d\ +zBAJr2NXkUHNdP4f/5LT+1p/wBlz8I/+sr/ALNlZHxn/wCRf8Cf9nFfsm/+tR/B6vKxnHOLw/EmKyeG\ +Q5W8NQx08MpPCy9p7ONd0k21WUeflSbaio82vKloeNgs44zxGV5biqnipxgsTjMHhq8nHiLFqCqV8PT\ +qy5YODkoKc2oxdRy5Uk5t6mn4e/Zy+H037Tvxe0V/EPx4Fnp/wH/Zy1SCaL9qb9p2DVpLnWPiD+1NaX\ +cV9r8PxeW/1PTki0OyNrZ3NzLaWMs95NZQW82o6hJc85d67+yNa6nrmlR+Lf239Wn8O+I/EnhPVbvw1\ +4y/4KfeK9ETxB4Q17UfDHiTT7LxF4Z1a70/VvsniDSdStJJbS5ngM1lIqSMBmvpvwz/AMnZ/Gz/ALN2\ +/Ze/9WV+19Xzp8GP+Rf8d/8AZxX7WX/rUfxhr6ji/NocLZZg8RgMowNepisXjKcvb4dSSjCvVceXklT\ +atotW1ZJJKx1Zlxnx/nfErp43xN4nw9HC8PcHTjHC57jaN6mI4XyqpVnPnlWTc5qU5NRUpTnKcpNtkn\ +heX9lPxf4t8M+B9M8Xfto6d4i8ZX2oaX4Zg8YfEf8A4KU/D/TNW1PS/Dut+Lb3ToPEXjzxHpunR3y+H\ +PDeu3awyXaSSx6ZKIldwFOZ4R+D3we8I6p+2f4v8aeMfjxo3hD4X/FWHWNZ1ex/ac/aqjubPwtoX7KH\ +7PnjLXNU1geG/iqb/wAW6jBFeaoVnuFv9SNpa2um27NaWVhaQdN4g/5LT+yX/wBlz8Xf+sr/ALSdZPx\ +U/wCSK/8ABWD6fEf/ANYB+AlHDObQ4gyNZvjMowNHE4TGYinGNLDqNOUaWXzrR5lKU5N88tbSSso2Sa\ +ubYPi7j7LnxxlmF8TuJ6mHx3DmX1eavnuNq1aVSrxrkODnKjOMqcYP2CcU+Ry9+om5Qk4mR/wkP7Jn/\ +Qb/AG/P/Bj/AMFW/wD49XoXwy8J/s3fF7U/Eui+CvGP7Wn9s+ELHw7qmv6T4w+Of7f/AMNNTs9M8WXH\ +iO08PajBYfErx7pEup2NzdeEvEkSzWqTxpJpEqSMjbQ3YVkfAz/k5b48f9kM/Zk/9T79rCvA4Q4zxGf\ +8RZflOMyLLKWGxfteaVLCyjNezoVKseVzqzivehFO8Xpe1nZrweJOIeNsr4fzbNMF4pcXfWsDClKCq8\ +Q4udN8+KoUZKUYRpSfuVZNWnG0km7q6fi/wd+G3wR8C/sa/AD4pfEXxf8AtDaRpM/wV+AP9pf8In+0N\ ++1/cx/25460DwR4d0TSfDXw++GfxJleJLnxR4i0yzs9N0fS1gtxdxw29tDbRgR3f+Eh/ZM/6Df7fn/g\ +x/4Kt/8Ax6iT/lHH+yn/ANgn/gnN/wCre/Zzr3Kr4o4pq8MVMlwOByXL8RTxGXYavKVfDOc+ebqQesK\ +lNWtTi9U3dttvRL7DiTiTjbNuNvE3FYrxN4qw7w/FWf4WnTwuf4ujRhRo4vmpxjTl7W1vayilGUYqMY\ +xUVZt/NfxY8H/AT4i/softV+L/AIceLv2lb+XwB8KvjDo+rad49+OP7amgSad4p034QP4yt9L8Q/D34\ +v8Ajy0Or6dJoniLw9ctBe6bcabfWuqCKRbiF5oq+w/+GXvhr/0M37RP/iX37Wf/AM+yvkfV/wDk2z/g\ +qZ9fip/6wl8Dq/UGv0DhiODzjC4fMcTleFhWxmDw1SUYUIKCk6uLT5VLmaVoreTei10R8Rxv4i+JOTc\ +E8OYXBeJnEbjT4g4igqlTOsfKtKmsp4QqwhUqQrU+dU5VqjguVRjzyainKTf8yn/Bur8L/DXxd/Yn+K\ +PiTxXqfxE0nUbH9qXxtocNt8MPi/8AFn4I6A9lbfCX4I38c954U+DHjbQNL1DWDPqdysmoXFnLfywx2\ +9tLcvb2lrFD+9Pgz4M+EPh3+1Z+xHrfh/WPivqF5dfHr4iaXLD46+PPxy+KOkLbT/saftWXby2/h/4m\ +fETV7Cz1ES2MIS8htku44nmgjnWG4uI5fxa/4Nhv+TCPi5/2d74+/wDVM/AGv38n/wCTlf2Gv+zi/H/\ +/AKxX+1xX6nx3lWV4Tj7GLC5bh8MqObYHk9nRpw5f9rw3w8sVy/Kx8p4ReJviRnOMr5fm/iDnma4DG8\ +OcVwrUMTm2Pr0a0XwtnLcatKriJQqRbSbjOLTstND9e6KKK/Rj4MK/n0+H/wC0j+zv4BufjL4S8dfHv\ +4L+C/FWk/tZ/trf2r4Z8W/FLwP4c8Qab9v/AGvvjfqdj/aGjaxrsNzZ+dp15Z3EXmRr5kF1HKmY5FY/\ +0F1+LnwT/wCQR8Vf+zs/24P/AFsv48V+eccRryxOTrD1IUp+zxd3OEqitzYXS0alNp3trzNWTVtbr9G\ +yavw9h/DDjOfEuV43NsC8+4aUKeBx9DL6sav9n8VuM5VsRl2ZwlTUFUi6Sw8JSlKE1WioShU/nn/4OK\ +vi/wDCb43fsT/C7wp8GPih8O/i74o0/wDal8E+Ib/w38MPG3hrx9r9joFp8Jfjdpt1rl5o/hTU7u4tt\ +Hi1HVtKt5Ll41hSbU7eJnDzRq37xf8ADX37Jn/R0P7O3/h7Phr/APNNX4w/8HPP/JhHwj/7O98A/wDq\ +mfj9X9E9GZUs4/1M4QcsfhnSeIzXlSwlVST5sFzc0vrrUk9OVKEeWzu5X0/NaWZ+E39p5lbgriLm5MP\ +d/wCtGW2elS1l/qhp97v5H5OfDz4h/sqfEL9lT9j/AMM+Jv2wPh38JvGPwm+Hfwh8RW1z4d+L3wMsPF\ +ugeLbD4Gah8N9a0LXdF+JGn6zaxbNL8Z+I7e6tbjTluYLmJCHhkhZT0X9r/s2f9JTD/wCHT/YS/wDnH\ +V9cfsg/8mmfsvf9m7fBP/1Wvhmvomvyalwpgs2wmXYzH4XB4qvLDUI808NVcuWNOPKm1i4p2Wl7L06H\ +7d4kcdcF5T4k+I+BocPcQRjS4gzrm5OIcpUHN5liXUlCNXhCtOEJTvJQdWfKnZyk7yf5Z+MPix+yh8O\ +vgJ4R+HHhD9qv4VeP5bD9pX4HePdR1bWPjD8INS8U6jJr/wC2p4D+L/xB8Q6pb+DX06yttOtG1XxLez\ +tbada2tjpunNJKEit5Zq9K+LfxG/ZB+K3ibwX4wg/bq+Hfw18R+B9C8a+GtP1HwB8aP2brn+0dE8e6h\ +4H1TXLLVrT4j6D4hgfbffD3w7JBJbRW00eyZWkkSXavvP7UP/JNfDP/AGcT+yD/AOtZ/BOvomu6WSyx\ +DxOUV/qtTLo4XBw9i8NV5OSlUrulFL63e0HBNavaPZ34sXxVwBhuAeEc7p8McQxxlXiLiqfOuJMs9p7\ +WtlvCyxM5ylwlKnONWFVRUFRjyP2jcpqcY0/y+/tf9mz/AKSmH/w6f7CX/wA46rmr/G39kzwCn7DngD\ +wd+0r8GNc8K/Br4iW/h2XVrv4yfDXUr3TfCXhj9kb4/wDgHR9d8WX+l6tDbWfnajeeHrSS6MNrbSahr\ +VvBEkclzBCf01r52+Nn/JSv2Qf+zifE3/rJn7UNc0eG6GTUnVy2jhMHOtWwkZOnhqqcksVRcU28XLRS\ +1atrtdPU34I4z4GzrPcbh8Xw3xBVhSyLiyaU+Isq5bLhXOVU0pcI0Xzypc8Kc3KSpzkpuFRKVOfyx4k\ +1z9krWfHXj3x3oH/BRTw78Pp/iNruk+JfEPh/wn8Yv2Rr/wAPjW9I8EeEfh/Fe6efHvw71vULbzfD/g\ +nQvNja/eHz45JYo4hIVGQ0/wCydfX/AIcn8S/8FKtP8W6X4c8aeBfHSeHNY+L/AOxjY6Rq2r/DvxloX\ +jzw7b6pc+FvhRp2oDTh4h8OaW86Wt9ayyxRtF5yq7V+o9FaVODMuq4ueOqYPAzxdSo6sqjwtbmdRy53\ +P/fN3K8vVnxtPxF4NpYalhKfD3EcaFCnClBf6yZPeNOEFThFSfBvP7sIqKfNdJb3Pz+8PftTfsxQftO\ +/F7X5v2jfgPDoWp/Af9nLR9N1qX4vfD6PSdQ1bQ/iD+1Ne61pdjqT+IRDd6jZ2fiHQJbqCN2lt4tcs5\ +JVRLmEv5ys/wCydY3/AIjn8Nf8FKtP8JaX4j8aeOvHT+HNH+L/AOxjfaRpOr/ETxlrvjzxFb6Xc+Kfh\ +RqOoHTj4h8R6o8CXV9dSxRSLF5zKi19feGf+Ts/jZ/2bt+y9/6sr9r6vomqlkSznCKlmccJjKdDEYqU\ +VUw1V8sniaqk1bFrfXTorLW139bxtxZwDknEmDlg+GOIKNTEcP8ACXM4cR5XyuC4Wyd0ouNXhGt78IS\ +UZTTXPLnnGNOM/Zx/M/w3rn7JWjeOvAXjvX/+Cinh34gz/DnXdW8S+HvD/iz4xfsjWHh863q/gjxd8P\ +5b3UD4C+Heiahc+V4f8ba75Ua36Q+fJHLLHKIwpi0j42/smePk/bj8AeMf2lfgxofhX4y/ES48Oxata\ +fGT4a6be6l4S8T/ALI3wA8A6xrvhO/1TVpra88nUbPxDaR3QhuraPUNFuIJUkktp4R+mtfO3wT/AOSl\ +ftff9nE+Gf8A1kz9l6inkSyuGBwOBjhcLhcRiKkpQhhqqjKUsJXhJyTxbb5oRUXZro76NN8N8XcBZnl\ +PidmGJ4a4hqYnA8PYRKUuI8r5lThxZw5UhGl7PhGnGnKNeaq88oVE0pw5LzVSn8j/ANr/ALNn/SUw/w\ +Dh0/2Ev/nHV3/wk+I37IPwp8TeNPGE/wC3V8O/iV4j8caF4K8NahqPj/40fs3W39naJ4C1Dxzqmh2Wk\ +2nw40Hw9Am6++IXiKSeS5iuZpN8KrJGkW1v0Cop4HhDA5ZiqWNwGFwWFxdDm5KkcLV5o80XCVr4x7xl\ +JPyZ8bjeP+CMxwlfA4zhziOthMSoqcP9ZMnipKM41IpuHBsZWU4RlvvFXPyz+GvxY/ZQ+IH7FH7P/wA\ +JfGn7Vfwq+HmraZ8JP2a72/m0r4w/CDSvG3hHxj8LbX4eeM9Ogl0zxo+o2tpqNp4s8I2UV5aahpk42x\ +T28sKucpb/ALX/AGbP+kph/wDDp/sJf/OOr64/ZB/5NM/Ze/7N2+Cf/qtfDNfRNcsOF8LnGDyvFZjh8\ +HjK0MLQhGVTDVXJU1BSUbrFxTs5Sey1b06H3PiLxvwTk3iT4l4LDcOcQU4viPOqlRQ4iylU5VpY+tCp\ +UhCrwhWlTU/ZxtB1ZuMUk5Sacn+TnxD+If7Knw9/ZU/bA8M+Gf2wPh38WfGPxZ+Hfxe8RXNz4i+L3wM\ +v/Fuv+Lb/AOBmn/DfRdC0LRfhvp+jWsu/S/Bnhy3tbW305rme5lcl5pJlUfbX/DX37Jn/AEdD+zt/4e\ +z4a/8AzTUftff8mmftQ/8AZu3xs/8AVa+Jq+ia9TAYDF4HFVcHhK2GoYfD4bDRhCOGqcsY+0xVkl9bu\ +rO+rbvdaK2vmZ9n3htmHhtwnjsdwnxBiJYjiDiT/mpMtU+eOW8JKUpSXCfI4OHsowhGlD2fJJuU1OMa\ +f8yn/Bur8X/hN8Ef2J/ij4U+M/xQ+Hfwi8Uah+1L428Q2Hhv4n+NvDXgHX77QLv4S/BHTbXXLPR/Fep\ +2lxc6PLqOk6rbx3KRtC82mXESuXhkVf3p8GfHn4G/FH9qz9iPw/8ADP4zfCj4ia9Z/Hr4iaxd6J4F+I\ +nhDxdq9rpFv+xp+1ZZT6pc6b4f1i4mg05LzULCF52QRLLfQxsweVA34tf8Gw3/ACYR8XP+zvfH3/qmf\ +gDX7+T/APJyv7DX/Zxfj/8A9Yr/AGuK/QOO6eaR4+xn1rGYes1m2B5/Z4apS5v9rw3w82Lq8vz5zx/C\ +LH+G9XGV4ZRwpnmBx8+HOK1Rq4niHAYqjTl/qtnNpVaFLhnBzrRSveMMRQbunzq1n+vdFFFfox8GFfi\ +58E/+QR8Vf+zs/wBuD/1sv48V+0dfh/o+sax8GdY+Kngfxx8K/wBoaTXJP2hv2m/HNtc+Bv2ZP2h/ix\ +4Wv/C3xY/aH+J/xV8Cappfjv4VfDDWtD1b7X4H8aeHbmeC21GW5025uptL1SGz1WzvbK3+C40ap18pr\ +1HyUIwxMHN6QU5vDOMXJ6KUlCbjG95KEmk1F2+/yfJs44m8OuLch4cynE8QZ5POuH8WsFgaFXF4t4TD\ +4HiWjiMUsNQhUrPD0K2MwlKtXUPZ0quKw9Ocozr0lLmf2sv2TfBv7Xvg3wR4Q8X+N/iP8Opvh18R7b4\ +qeEPF/wAK7nwPZeMdD8Y2Xgfx34C0/VtJ1Dx74E8Q2+iavZad8QdWv9K1WwtLXXND1zS9L1zQ9U03VN\ +NtrlPxu/4hhv2CP+iufte/+F98Gf8A5wNfup/wuzSP+iVftZ/+IP8A7Zf/AM4ej/hdmkf9Eq/az/8AE\ +H/2y/8A5w9eblfHGcZLQ+q5VxA8DQbvy06lNX1b1bu2rybSvZOTa3d/ia/gd4nYqftMR4S8Q1Z93keZ\ ++X/UN5L8D+ef4Qf8G6v7E/xu+E3wv+M/iv4o/tS6f4o+Lvw78E/E/wASWHh7xt8JbTQLHX/H3hrTPFe\ +sWeh2upfBG7uLbR4tR1a5S2juLq5mSFEWW4mcNI3on/EMN+wR/wBFc/a9/wDC++DP/wA4Gv1s/Zu8f3\ +PgH9nf4CeBfFvwa/az0nxV4L+C/wALfCXibS/+GKf2vr/+zfEHhzwPoWj6zp/27TPghNbXnk6jZ3Mfm\ +280sEnl74pJIyrH2j/hdmkf9Eq/az/8Qf8A2y//AJw9VlHiTxVhcqyvDR4qq0Vh8PQgoOpBOHJThFRs\ +1dctkrPVWPtPFLwS49zLxN8RcxwXhVnmPweYZ9m9ejXpZNmNWlWpVcwxFSnVpVIYeUKlOpCUZwnBuM4\ +yUotp3f8APP8AFD/g3V/Yn+EXhrTPFfhv4o/tS32o6t8RPhB8MLmHXPG3wlubJNA+N3xZ8E/BjxXeQR\ +2HwRtnXWLfwv4+1i40+RpGhiv7a2lube7t0ltZvRP+IYb9gj/orn7Xv/hffBn/AOcDX62fHvx/c+NPA\ ++haP4Z+DX7WepajZ/Gj9m7xbc23/DFP7X1n5fh/wD+0R8LfHXi3UPO1D4IRRv8AZPCvhzWbrylYzz/Y\ +/Ito5rmSKGT2j/hdmkf9Eq/az/8AEH/2y/8A5w9FLxJ4qjmuNxK4pqp1cPhYc/tKfvKnUxclG9rPk9r\ +ey1XOm90PMPBLj2p4Y8IZdDwqzyeNwufcR16lBZNmLq06WIy/hWnRqzprD88KdaeGrQpTlFRqSoVowb\ +dOaX4V/wDEMN+wR/0Vz9r3/wAL74M//OBrzvxt/wAG6v7E/gHxL8IPCmj/ABR/aludO+N3xE1P4YeK5\ +tT8bfCWa90/QNJ+E3xQ+M9teeHpLX4Iwpaaw3ij4ReG7d5LmO7hNhfX0S263EtvdW39DH/C7NI/6JV+\ +1n/4g/8Atl//ADh68X+KXj+58R+Of2btY0b4NftZ3mneAfjRrvi3xbc/8MU/tfW/9k+H7z9nf49+Bbb\ +UPJu/ghHJf7vFXjTwza+VbLNOP7S89oxbQ3E0RmfiTxViMNSpviqrVUcRg52VSDt7LF0KqlovsOCnfZ\ +KN3oheHPglx7l/EGYV8X4VZ5g6VTIeKaCnVybMacZVcTwxm+GoUlKeHSdSvWq06FKCfNVq1YU4KU5xT\ +/JP/iGG/YI/6K5+17/4X3wZ/wDnA0f8Qw37BH/RXP2vf/C++DP/AM4Gv3U/4XZpH/RKv2s//EH/ANsv\ +/wCcPR/wuzSP+iVftZ/+IP8A7Zf/AM4evQ/4ihxX/wBFdV/8G0/8vQ+E/wCIC+I3/RoOIP8Awx5p/wD\ +M39fM/nn0z/g3V/Yn1b4s+Nvgxc/FH9qVPC/gH4d/C/4n6PfweNvhKuv3Ov8Axd8S/F/wp4ks9TupPg\ +i1vNo8GnfBHwo9jHFawzRTahqDXFxcpLbR2non/EMN+wR/0Vz9r3/wvvgz/wDOBr9bNC8f3Nn+0R8Uv\ +HVz8Gv2s4/CviP4L/ATwlo2qf8ADFP7Xz/bPEHgvxz+0jrHibT/ALDH8EDc2/2bTvH3hKTzZYY4Jv7W\ +2W8kskFysPtH/C7NI/6JV+1n/wCIP/tl/wDzh68/K/EnirD4apTXFNWkpYjFzt7Smruri61Vys19tz5\ +09nzJrRo+88RvBLj3H8QZdXwfhVnmNpU8h4VoOdLJsxqRVXDcMZPhq9Jyhh2lUoVqVShWg3zUqtOdOa\ +jOMor8K/8AiGG/YI/6K5+17/4X3wZ/+cDXnfgn/g3V/Yn8feJfi/4U1j4o/tS22nfBH4iaZ8MPCk2me\ +NvhLDe6hoGrfCb4X/Ge5vPEMl18EZku9YXxR8XfElukltHaQiwsbGJrdriK4urn+hj/AIXZpH/RKv2s\ +/wDxB/8AbL/+cPXi/wALfH9z4c8c/tI6xrPwa/azs9O8ffGjQvFvhK5/4Yp/a+uP7W8P2f7O/wABPAt\ +zqHk2nwQkksNvirwX4mtfKuVhnP8AZvnrGbaa3mlMb4k8VVcTlFR8U1ajwuIlNP2lN8jeExNLmulpdV\ +OS7099LdoOEPBLj3C8P+KdDEeFWeYermWQ4ehQhPJsxhKvVjxPw3iXSpRlh06tRUcPVruEFKSpUatRr\ +kpzkvyT/wCIYb9gj/orn7Xv/hffBn/5wNH/ABDDfsEf9Fc/a9/8L74M/wDzga/dT/hdmkf9Eq/az/8A\ +EH/2y/8A5w9H/C7NI/6JV+1n/wCIP/tl/wDzh69D/iKHFf8A0V1X/wAG0/8AL0Pg/wDiAviN/wBGg4g\ +/8Meaf/M39fM/nn+EH/Bur+xP8bvhN8L/AIz+K/ij+1Lp/ij4u/DvwT8T/Elh4e8bfCW00Cx1/wAfeG\ +tM8V6xZ6Ha6l8Ebu4ttHi1HVrlLaO4urmZIURZbiZw0jeif8Qw37BH/RXP2vf/AAvvgz/84Gv1s/Zu8\ +f3PgH9nf4CeBfFvwa/az0nxV4L+C/wt8JeJtL/4Yp/a+v8A+zfEHhzwPoWj6zp/27TPghNbXnk6jZ3M\ +fm280sEnl74pJIyrH2j/AIXZpH/RKv2s/wDxB/8AbL/+cPXn5R4k8VYXKsrw0eKqtFYfD0IKDqQThyU\ +4RUbNXXLZKz1Vj7vxS8EuPcy8TfEXMcF4VZ5j8HmGfZvXo16WTZjVpVqVXMMRUp1aVSGHlCpTqQlGcJ\ +wbjOMlKLad3/PP8X/+DdX9if4I/Cb4ofGfwp8Uf2pdQ8UfCL4d+Nvif4bsPEPjb4S3egX2v+AfDWp+K\ +9Hs9ctdN+CNpcXOjy6jpNslzHb3VtM8LusVxC5WRfRP+IYb9gj/AKK5+17/AOF98Gf/AJwNfrZ+0j4/\ +ufH37O/x78C+Evg1+1nq3irxp8F/il4S8M6X/wAMU/tfWH9peIPEfgfXdH0bT/t2p/BCG2s/O1G8to/\ +NuJooI/M3yyRxhmHtH/C7NI/6JV+1n/4g/wDtl/8Azh6KXiTxVHNcbiVxTVTq4fCw5/aU/eVOpi5KN7\ +WfJ7W9lqudN7oeYeCXHtTwx4Qy6HhVnk8bhc+4jr1KCybMXVp0sRl/CtOjVnTWH54U608NWhSnKKjUl\ +QrRg26c0vPP2Tf2TfBv7IXg3xv4Q8IeN/iP8RZviL8R7n4qeL/F/wAVLnwPe+Mdc8Y3vgfwJ4C1DVtW\ +1DwF4E8PW+t6ve6d8PtJv9V1W/tLrXNc1zVNU1zXNU1LVNSubl/a5/8Ak5X9hr/s4vx//wCsV/tcVy/\ +/AAuzSP8AolX7Wf8A4g/+2X/84el8F+Jb/wCI37TP7H48PfC/9oaws/Bvxo8eeLfFWueOf2Yf2i/hf4\ +W0Dw/J+yf+0r4Pg1DVPF3xM+F2kaXaeb4o8XeG7GCJrwTz3OsQxwxuSceJWzL+0szy+tVxccViq+OwD\ +bUouT5cXh/sx0tGK6JJRXZHZ4d+GXiFw5nOY5lnPAGdZHk+CyDin2mJxeV4/D4ekp8M5vTh7SvWoQpw\ +56k4Qi5zXNOcYq8pJP8AaKiiiv2g/NQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA\ +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\ -HrUP9M/4SX4ReEPO/5l3/AIQjxl8Rv7O8v91/yOf/AAsHwt/bPnbPP/5ANh9n+0/ZP9K8j7Zceu0Uey\ -b+OrOa7XUfxgov5XtrttY9i38dac12uo69704wfyvbXba3zR8RLX4y+HdA0/xL/wALfs4PEB8dfC7wx\ -aaV4f8AhxoWn/Dy6sPF/wATPCPhK7m8SaF4j1LWde1C8+y+Ib/zW07xTo6PFBbJbx2lxHPd3Pdf8LIu\ -fBf+h/GKPSPC0Q4s/iBpr6s/w21O2h/0ZrvxBrOo2Kw/CrV5rwW+zTNYvZrR31yxsdI1/X74XsdofG3\ -/AJE3Rf8Asrv7P3/q+vhtXrtZqnKNWap1JK0YO0nKa1c09JSvsls1rvdaPONOUa1RU6so2jB2lKU46u\ -aekpX2S1i4u6V7rRlFeRf8IJr3gj/S/hXqHmafH+7/AOFW+LtevYvAQil/c7/DGu/2HquqfDr7JBHpy\ -WWnWEdz4agstNlsLXw9ZXF7/a9n0fhj4i+GvFF/NoMct5oXjCzs5L7UvA3ie0fRPF1jZ281vZXmpQ6X\ -csV1/wAORapcCzXW9Jl1DQrq5hkjsdTughatY1NVGovZzeyvdP8AwvS/o0peVrN7Rq6qFRezm9le6f8\ -Ahlpf0aUurjazfS67rel+GtD1nxHrd3Fp+i+H9K1HW9Xv52CQWWl6VaTX9/dzOxASKO0gldiTgBCTX8\ -evwC+NGkeEf2hP2dv+Cleq6Z8X9N8U/tQ/tg/GDwb8ZtZ134K/GzQPhTp/7N/xrbTfh/8AAywtvjL4h\ -8CWvg/xEmi3/gjQ76GHTNavJGOszRhFeynA/sM1vRNG8S6Nq/hzxHpGma/4e1/TL/RNe0HW7C11XRtb\ -0bVbWWx1TSNX0u/ikg1LTLmxnnhuLeaN4popnjkRkYg8LqnwU+DWt/DzTvhFrPwk+GWr/CfR4NHttI+\ -GGqeAvCt/8PNLtvD08F1oFvp3gq70p9NsYLG5traSzSK2VbaS3R4QjIpGpqfgHpX7aX7Ytj4st/iLqH\ -x/v9a8Iwf8FgNa/Ylk+EF18NPg7aeE7z4L6nqrWVgl14j07wDF4iXxNpwYG0vYdXhMioFv471t0ja3h\ -D9sv9sN/wBsC4+GfxX+NWueGfhn8Y/jn8c/gd8AfHfwb8Efs0ftA/s36tfxaTqOm/DnQY/FXhGJPF3w\ -a+MXhvWLeK81KHxdceMLW9nY2+reGtG0+3uLlv3Y/wCFAfAjyfs//ClPhJ9n/wCFkf8AC5PI/wCFb+D\ -vJ/4W95nnf8LU8r+xtv8Awsjzvn/tzH9p7vm+1Z5rPj/Z0+BWmfEHV/jP4a+CXwU0P456pDqLP8Y4/h\ -P4Ob4gz3+oWRspbrV/F9hYWmsatC8YiS5jOpxPcQxmEzoCGUA/Bf4Kf8FBv2zfjpF8QNG0r4i+Bvh54\ -s/Yz/Y6+K0P7Tup/FDS/hx4Q+HXiH9sq08aeLPhz4Dbxd4q1vS7W28C+H47PwVf+IgtneaRpHnarFFq\ -BbTFCH61/wCCX37Vnx5+KnxB+K3wT/ai8U/FSX4x+F/hz8MviQngf4k/Dr4Jf2bp+ia/bPp2qeMPhp8\ -e/wBnVNM8OfFT4c6xq8lrdaZBceHLK9sYLhYbfWfEUcF3eRfYH7JH7GOnfs4Wf7QuseNvF2jfGD4lft\ -S/FrxR8V/jL4og+H8Hgbwrq0viCKWzsvBujeBbzxPr8lj4PsdOub+KOC91fUpZm1S6kmmbzig+hvhb8\ -BfgZ8DYNYtfgp8GPhP8HrbxDcW93r9v8Lfh14P+H0GuXVokkdrc6xD4S0e0XU7iKOWVY3mDsgkYKQCc\ -gHrFFFFABRRRQAUUUUAFFFZGva9pPhnSbvW9bu/sen2fkI7pBc3lzcXN5cw2On6dp2n2MMlxq2r3eo3\ -Nra2VlaxTXd7d3kNrawzXE0UTptJNt2S3Ym0k23ZLVt7JHC+PtQv9Zv8ARvhz4bvry11TXLzTtQ8Zal\ -pFzNbX/hL4cQTXlzqV9LeWrxSaXea9caPN4c02W3u7PVYX1m/1zR2mbw3fmDHutPsNJ+NXwo0rSrGz0\ -zS9M+C3xk0/TdN0+2hsrDT7Cy8Wfs921nY2NnbIsdpZxW8UccUUaqkaRqqKFAFdH8N9B1ay0mTxN4ut\ -PI8f+MtmreKEmntr650G2kub6+8PfDyDULKZ7e50jw5p2pvpsUlmILS/u47/AF02yX+s6hLNka1/yXr\ -4bf8AZIvjb/6mX7P1cs03BVZK0pzpWT0cY+0jaL8+svN2u0kcc05U1VkmpVJ0rJ6OMfaQtFro+sv7za\ -u0keu0UUV1naFFFFABRRRQB5F8bf8AkTdF/wCyu/s/f+r6+G1eu15F8bf+RN0X/srv7P3/AKvr4bV67\ -WUf49T/AAQ/OoYx/wB4q/4Kf/pVQK5zxP4T0PxhYQ6drkF46Wt5HqFhe6Vq+seHdc0m/jhuLT7doniP\ -w7f2uoaJePYXl/ayy2lzC81nqV1Zys9rdXEMnR0Vo0pJqSUk+j1RrKMZJxklKL3T1R5F/aPxA8AfudY\ -s9X+KvhKL96/i3TU0RPiTpUcn7+8bxB4I0bRtNsfFGkWkUF9Ilz4eUa1Ol1Y6ZbeFdSu4bjVrz0bQfE\ -Gg+KdJtNe8Ma3pHiPQ7/z/ALDrOg6lZavpN59luZrO5+yajp80kNx5d5b3EUmxzskgeNsMrAa9fLmv6\ -v8AZP2hfAr+CNM0jS7PUfF+r/D/AONevw2X2LVvFuvP8FtZ+Ingjw7OIpQuvf2Voeh6ReS6jd2zTWMe\ -vWGm6JqPk3XimwTnnJ0OT3nOE5Rik9WnJpK0t2lu1K7td82lnzTk8NyNydSnUlGCT1knJpJqW7S3kpX\ -drvm05X9R0UUV0nUFFFFABRRRQAUUUUAFFFFABXi0+oWHxF+KF/4RW+s30b4M3nhTxF4h0uK5hmvNZ8\ -da7per6j4Z0zXdHuHDQ+HNI0uXRtdtLg208N9rtxps+n39peeFNStrn2mvnTQPAfhTxp4y+OUviDSvO\ -1HSPi7p/wDYmv6dfal4f8V+Hvt/wF+BK6l/wjfi/wAP3lrqnh37XBawQ3n2G7t/tdsGtbnzbd3ibCvz\ -P2UYpS5p6ptpNKMpWuk2tUns72s9GznxHO/YxglLnnqm2k0oyla6Ta1ins725Xo2fRdeRa1/yXr4bf8\ -AZIvjb/6mX7P1H9t+PfAX/I5Q/wDCe+EIv3MfjDwj4f1m48e6fu/cabH4n+HHhvTb3/hJt/2dPtuseH\ -/s+b3WYtnhHTNItrzUrbIj8QaD4p+Mnwr17wxrekeI9Dv/AIRfHT7DrOg6lZavpN59l8d/ASzufsmo6\ -fNJDceXeW9xFJsc7JIHjbDKwEVakZRjH4ZqdP3Xo7e0hr5rzTavpe5FarGcIx+Cop0m4vSVvaw16prW\ -3NFuN9L3PdKKKK6jrCiiigAooooA8i+Nv/Im6L/2V39n7/1fXw2r12vIvjb/AMibov8A2V39n7/1fXw\ -2r12so/x6n+CH51DGP+8Vf8FP/wBKqBRRRWpscL8QPE9/4d0e3tPD0Nnd+N/Fl5c+GPh/Y6nHM2j3Xi\ -6TQ9Z1u2m1+aC4ha28OWWl6Hq2o6iySrcvY6NcQadHdanLZWVz5zr3hiw8H6v+zvoenTXl0ifGnxjqt\ -7f6hJDJf6trniL4PfHzxF4j1u++yW8NvDeX3iDVdTu5YrWC2s4XvWis7W1tUht4+j8Bf8V1qw+L9z8+\ -lahpEum/CRR/o0kfw28R23hbWdQ8QapZrlhq+v65odjeRpcSs9poulaLE1jpGrS6/bznxJ/5HL9n7/s\ -rutf+qF+Ntcc/fiqz2c6ah/h9pC7/AO3mr+cVHZ3OGp+8iqz1TnSUP8Htabb/AO3mr76xUNE7nrtFFF\ -dh3BRRRQAUUUUAFFFFABRRRQAV5F8Nv+Ry/aB/7K7ov/qhfglXrteRfDb/AJHL9oH/ALK7ov8A6oX4J\ -VlU+Oh/jf8A6RMxq/Hh/wDG/wD03UPXa+aPGngyab9oDwVq3hDX7zwT4k1b4XfFnUtTv7KysNX0fxDe\ -aH4j+BFhp0Pijw7qkTR3dnLby6fBqFzpsuk67eWOhafYprltBY2f2f6XryLWv+S9fDb/ALJF8bf/AFM\ -v2fqjExUqcU19un5NfvIrRrVOzauiMVGM6UVJbVKXVpr95FXTVmnZtXT2bLmn/EebTb+x0L4m6LZ/Dz\ -WdVvLbTNB1FvElhrPgXxfrF7MiWugeEfFFxb2F1ceIylzZqNO1TSdIvr2Zbz+xrfVrPTry+j9RqnqGn\ -2GrWF9pWq2Nnqel6nZ3On6lpuoW0N7YahYXsL215Y31nco0d3Zy28skcsUiskiSMrqVJFeXf8Ir4r8B\ -f6R8Pr/+2fCFn+8/4VNqlrpqf2fpsX/MH+Ffij7RZf8ACM7PtF7Nb6brb6npJ+yWGh6bc+EdIj+0W1X\ -qU/ivVh3VuZeqVlJb/Ck9koyepV6tP4r1od0lzr1SspLf4UpbJQk7s9dorxax+M6a7C7+Efhl8UfFtx\ -p95qGleI7Wx0jw14eh8Oa5pN/c6PqmiPr3j3xZo+k+Lby21vTtZs7iXw3qGuWcFxo8olukjmspLq5/w\ -m/xN1T/AEfQfgnq+kXifvpLn4neOfA3hzQXtl+R4LS++G+qeMr6XVzLJC0cUumQWjQxXDyX8U0cFvdC\ -r02k480k+qhOS+9Ra9ddHdPVMFiKTScXKcX1jCck/Rxi0/PXR3T1TPXaK8i+2/HrUP8AQ/8AhGvhF4Q\ -87/mYv+E38ZfEb+zvL/e/8iZ/wr7wt/bPnbPI/wCQ9YfZ/tP2v/SvI+x3B/wj/wAcbj/R7z4ofDm1s5\ -/3N3c+H/g5rthr1vbS/JPPol9r3xj1Wxs9XSJna2lvdM1K0jmVHuLC8hD28h7Vv4KU5rvZR/Cbi/mlb\ -zvdB7Zv4KM5rvZR/Co4P5pW6Xumg+Nv/Im6L/2V39n7/wBX18Nq9dr5R+MHw/8AFlp4T0iWf44/FHU0\ -f4o/A62W2vtI+CscMU178avh/Z22oI2m/B+3kN5aXE8V3bq0jW7XFlEt3BdWpmtpfUf+FLeGZv32peJ\ -/i7qWoS/vb/Uf+F3fFvRPt97J891e/wBjeFfGWn6XpHmzmST7LpthZWFv5nlWdpbW6RwpnGdV1qnLRs\ -+WHxSS6z25ef8ATYyjOrKvV5aHK+Sn8ckvtVNuT2n42PXa8i8e/wDFdasfhBbfPpWoaRFqXxbY/wCjS\ -R/DbxHbeKdG0/w/pd42WGr6/rmh31nI9vEz2mi6VrUq32katLoFxOf8KD+C8373V/hn4Q8V6g3/AB8a\ -/wCPNIg+IPiu/wBvyxf2r4v8bjUNU1fyoBFDB9qu5vs9tbQ2sPl28MMSc58PvB/hHwT8avifpXgzwt4\ -c8I6XcfC74K6hPpvhjRNM0Cwnv5fFnx5tpb6az0q1ijlvGt7S1jaVlLsltGpYqigObqydOnOEYwqOzt\ -Jt2UXK1nBaO1nrs3bXZ1HWk6VOpTjGnVlaVptuyjKVrOEVZ8vK9fhbtrqvoCvIviT/AMjl+z9/2V3Wv\ -/VC/G2vXa8i+JP/ACOX7P3/AGV3Wv8A1Qvxtq6/wR/x0/8A05E0xH8OP/Xyl/6dgeu0UUVsbhRRRQAU\ -UUUAFFFFABRRRQAV5F8Nv+Ry/aB/7K7ov/qhfglXrteRfDb/AJHL9oH/ALK7ov8A6oX4JVlU+Oh/jf8\ -A6RMxq/Hh/wDG/wD03UPXa8i1r/kvXw2/7JF8bf8A1Mv2fq9dryLWv+S9fDb/ALJF8bf/AFMv2fqVf4\ -I/46f/AKciLEfw4/8AXyl/6dgeu0UUVsbnkXwS/wCRN1r/ALK7+0D/AOr6+JNeu15F8Ev+RN1r/srv7\ -QP/AKvr4k167WOH/wB3of4I/wDpKMML/u2H/wCvcP8A0lBRRRWxueRfG3/kTdF/7K7+z9/6vr4bV67X\ -kXxt/wCRN0X/ALK7+z9/6vr4bV67WUf49T/BD86hjH/eKv8Agp/+lVAryLRf+S9fEn/skXwS/wDUy/a\ -Br12vItF/5L18Sf8AskXwS/8AUy/aBoqfHQ/xv/0iYVfjw/8Ajf8A6bqHrteRfEn/AJHL9n7/ALK7rX\ -/qhfjbXrteRfEn/kcv2fv+yu61/wCqF+NtKv8ABH/HT/8ATkRYj+HH/r5S/wDTsD12iiitjcKKKKACi\ -iigAooooAKKKKACvIvht/yOX7QP/ZXdF/8AVC/BKvXa8i+G3/I5ftA/9ld0X/1QvwSrKp8dD/G//SJm\ -NX48P/jf/puoeu15FrX/ACXr4bf9ki+Nv/qZfs/V67XkWtf8l6+G3/ZIvjb/AOpl+z9Sr/BH/HT/APT\ -kRYj+HH/r5S/9OwPXaKKK2NzyL4Jf8ibrX/ZXf2gf/V9fEmvXa8i+CX/Im61/2V39oH/1fXxJr12scP\ -8A7vQ/wR/9JRhhf92w/wD17h/6SgooorY3PIvjb/yJui/9ld/Z+/8AV9fDavXa8i+Nv/Im6L/2V39n7\ -/1fXw2r12so/wAep/gh+dQxj/vFX/BT/wDSqgV5Fov/ACXr4k/9ki+CX/qZftA167XkWi/8l6+JP/ZI\ -vgl/6mX7QNFT46H+N/8ApEwq/Hh/8b/9N1D12vIviT/yOX7P3/ZXda/9UL8ba9dryL4k/wDI5fs/f9l\ -d1r/1QvxtpV/gj/jp/wDpyIsR/Dj/ANfKX/p2B67RRRWxuFFFFABRRRQAUUUUAFFFFABXkXw2/wCRy/\ -aB/wCyu6L/AOqF+CVeu15F8Nv+Ry/aB/7K7ov/AKoX4JVlU+Oh/jf/AKRMxq/Hh/8AG/8A03UPXa+P/\ -wBoD4+fC/4AfGD4Qa98TtX1+ws9d+G3xv0jSrTwr4A+IXxN1+7uY/FHwEvLi4Hhb4Y+FdY1OLR4YokW\ -41CS0Swt5r60tp7mO4vbOKf6q17XtD8K6HrXifxPrOk+HPDXhzSdR17xD4h17UbPR9D0HQ9Hs5tQ1bW\ -da1bUJo7fS9JtbC3uJ7m5nkjhghgeWV1RWYfgRrPjvVvjb8RfF/7QWv6Rq3huf4kaT4N0rwV4N8Q2iW\ -Hif4efCLwpp19e+DPBPi23t7eBD4xbxL4s+IPiLV45I7i40rUviLdeGU1bWdL0DS9Qm8zOswjgMNFpK\ -VepKLhF3t7klJt2torJbp3a8zx+IM0jlmEg4pTxNWcXCLvb3JRlJuzTsrJbp3a8z9B9b/4KU/AWO0jb\ -4f8Ag39oT4saybhBc+HdE+BnjX4WXdlpnlymbWpPEH7TVr4D0G8t47oWUBs7TWLnV5G1JJ4NNms7e/u\ -rPhtV/wCCkt/eWE9t4J/ZN+M8fieTyv7Mf4teNPgT4H+Hy7Jo5L3/AISDxR8NPif471vS86et2LT7F4\ -V1Xz7021vc/YbSa41Kz+NqK+YnxLmMr8qp07rpFu3n7zf43R8dU4vzWd+RUqV1bSDdvNc0nr63Xkew+\ -E/23/2htF8N6voHhv4EfBixk1XxP8SNYt/F+t/Hbxxr6eGdc8beOfE/ibUJ5vh7YfATTD430nRtd127\ -hhtl8T+H5vEFpo8cj3nhua/ZNPq/8Neftxf9Dr+yl/4jX8Xv/owa+ILX48+ErW3m0/wzoXxA+IuqXV9\ -qWp6LH4I8D65P4Y8R6brGpXWt2moaF8V/EMGneCrqxOh3qXQlfxJFHKYms7dptSaKyljl+K3xh1Rhce\ -GfgfpWk2CDyZrf4sfFjTvCniN7tSXkmstO+F/hLxzp82imGS3WOabVre8aeO5jk06GGO3ubv4nMPFHJ\ -8sl7DFcTUoToe44UV7aUXFuLjNYenUalFxalGXvR+0kmr/oWS+G/jTxDQw9bLOGcXRwtSCdKWJ+q5dC\ -pScIzhUpvHzwyq0pwlF06sXKFT3lCUnGSXqv/DWvxrHxlH7Px/bz+Nv/AAt1vhk3xjHhL/hUX7L2D8O\ -F8VL4JbxENf8A+GS/7LyPE7rbfY/tv2/5hN9l+z/va1LvSfF2q3d1qetfHf8Aal1LWdSuJr/VtRtP2p\ -/2gvCFpf6neSNcX97a+E/h/wDEbSNB8L28t1JK6adomlaZpFksgttN0+ys4obaL+fiX9h79qOT/gopb\ -/tg/wDC8vh+nxVt/FMnxSXwAnhyb/hFX+Er6gfhk/wnk8ft4eLf2ofg0U8OnXV8IrdnyE1Tb/aY+1H9\ -i/Bf7UHg57LWLf43az8OPgR4x0vxR4h0SHwh4r+I5sbnVtE0TUJNLsvGWkXPj7wr4Yk1rwzqdzaX0un\ -3un2t7p81tGg+3DUEv9O0/wDYvF7H+B/D+I8McH4T+OEvEyvxHwtl2Z56quBzfLI5Xn9X2n9oYDDTzP\ -LcuhicBT/c/Uq6lLE1bV3iKNFRpupyZ14SeM+TZdWzPOOHsU8FQrqj/s+NwuOqc078r9hgsViK/I+Vp\ -1VTdFPli6l5RT9ek+F/hO71u08Wa0fFfivx9pdrLY6B8U/HPxC+IHj34w+ErKSO7SKz8D/GLxn4nv8A\ -xR4GtbebUNSuLKPR9Wsksb3Vbu+shBeXVxPJ9UfCb9rX40/A+FND8XWHiv8AaY+HCeStjNc+JfCdj8e\ -fAtlZWDaZp3h/QtR8SWuk6X8a9Ed49DaW88XeI9J8U2a2ms6pqPifxvfajYaVp/xnqX7Qnwb0PV9S0n\ -xB4703w1HpV7d6Xc+JfFFpq3hn4fT63YTtaaj4c0v4m69p9v4d1zxRbXkF/Bc6XZapcahbz6LqMM1tH\ -LpmoJbey1+a5bnylWrVMuzKGKnRly1VCrGqlJNxcKqUpWkmmrStJNO1mj4SvhuKuGKmExWY5fjMpWZQ\ -VWi8XQrUoYmk4xkqlP20YqtTcJwkqkLrlnGUZLmiz9v/AIV/GH4YfG7wwfGHwp8b6D430KC+OkarLo9\ -0TqXhnxFFp+napfeEPGmgXSR6h4H8c2Vnq2nHUdC1i1sdY0yS7WHULK2mzGMvRf8AkvXxJ/7JF8Ev/U\ -y/aBr8OU0m90jxXa/EbwH4i1b4ZfFbT9Jfw9p/xS8F2XhdvGMXhi4muJ73wlqS+LPDmq6b4r8HTTXdx\ -OdI1rTtS02HUFttZtbW31zTtM1Ky+tfgz+26vhn4ieIr/8AaqbQfDd1r/hDwF4Yh+K/w68KeLYPhNBF\ -4f8AFHxE1W01H4gaLd6truofBSx+x+OdSS41XUtT1XwnZ2fw7vda1zxT4dfVdO0KP7nBZ9h8ZKhTrr6\ -tWUne79x+5JaSe127WflZtn0+X8TYTHzw9PEL6piIybd3+7fuSWkns22laXlZs/W6vIviT/yOX7P3/Z\ -Xda/8AVC/G2vXa8i+JP/I5fs/f9ld1r/1Qvxtr3q/wR/x0/wD05E+lxH8OP/Xyl/6dgeu0UUVsbhRRR\ -QAUUUUAFFFFABRRRQAV5F8Nv+Ry/aB/7K7ov/qhfglXrtfFfxE+Oulfs9aL+0X44utJ/wCEo8Q6j8eP\ -BHgzwB4Ih1a20e98a+OfFHwT+B9lpWlx3clvcT2+iWNiuqa54hvLKw1S80fwt4S1zXY9K1BNLktZOev\ -OFL2dSpLlhCTbb6JU5ts5sTUhRVKrVkoU6cpSk3skqdRt/cfOf7d/xZh+IPi3S/2Z/D7+ZoXgXW/h38\ -Vfjdq0c1headqOqadd6j4u+FHwet2s1kudH8V2XizQ/AXj3Wme6026s9LsPCNmbLW9F8cX7ab8r1zPh\ -DQ7/wAP6FFa61rP/CS+J9R1DXfFPjbxT/Z8Oj/8Jf8AEHxrr2peMfiF4x/sO0me30D+1/G2u6/qX9n2\ -hWysP7U+x2McVpBDEnTV+bZljp5hip15aQ2hH+WK2Xq9W/Ns/Is2zGeZ42piZXUPhhH+WCvZeru2/Ns\ -8/wDHnjyHwfDp+n6fp/8AwkfjXxH9si8JeEorz7C+pPY/ZhqWs6zqQtp/+Ec8Fad9usH1XVXgnFuL61\ -srK11HWtR0jSNS8SvPhkvjVmvvjJq5+JF9cBYLvw3EfEfh/wCDj2NsQdOsT8GbrxbqWk62YrpRf/a9e\ -bXNRXVJPtNte2trZ6PYaVd0qeTxH8Y/jJrepnzbnwHq3hv4U+GIcs9ppfh6f4feBPilrV/aR3Bkay1z\ -VfEHj6ODVZbd4YL6y8CeHI5bYz6WLib0iv5S8Q+L8xzXN8wyijXlh8qy6rOh7OLcfazpt06sqtn76c1\ -JQi/cUFF8vM5N/wChngX4X5JwnwtkPE1bCQxnFHEGFw+OeKmlOWGo4mEMThaWFuv3DjQnSlVnC1adeV\ -RSqOlGlCGdpf8Ax7S/9hHWP/Tte1o1naX/AMe0v/YR1j/07XtV/EGhWPibSLvRNRn1m2sr37P503h/x\ -H4h8J6un2a6hu4/sniDwrqllf6fmW3jEnkXMfmxM8Eu+GSSN/hM1/5GeZW/5/1v/Tkj9i4a5XkGQKbc\ -YvB4W7Su0vY07tJtJu2yur91uea/83Aj/sjh/wDU2WvY68I1fWbDQ/jXd67qL3Eej6d8LbXSdR1K3sL\ -/AFC007U7/wAWm8sbLUZdPtpRY3EtqvmRrLs3qykZ3rn1jTfFfhnV3t4tM1/SL24u4xLBaQahatfOnl\ -GdgbEyCaORYgzOjIHTY29VKnHp8TYnDVJ5BCniITnDLMJFpTi2pL2icWk7pp6NPVPQ9WUo0avsa0lSr\ -SUZKEnyycZpShJRdm4zi04u1pJpq6aJvD/hzw94T0i08P8AhXQtG8M6Dp/2j7Bonh/S7HRtIsvtV1Ne\ -3X2TTdOgjhtvMvbm4mk2Iu+W4eRsu7E8LYfDsfDtxqPwRj0bwCInF5qXw503TNH0P4XePLqIeWo8Q6d\ -pugTT+FdcexkuII9e0RYLwOmny61aeJtP0ax0WvU6jiminUvDLHMiyTQl4nWRRLbyvBPEWQkCRJ45Ed\ -eqvGysAQRXjYLHYvLcVRxmAxMsJi6DvCcHyyXRrzi1pKLTjKLcZJxbT5c1y/L89wGMynO8HTzXLsxVq\ -9DERVSnVs7qUoy19pCT56dWLVWjU5atKcKkYyW54D8eQ+MIdQ0/UNP/AOEc8a+HPscXi3wlLefbn017\ -77UNN1nRtSNtB/wkfgrUfsN++laqkEAuBY3Vle2una1p2r6RpvSW/wDyMurf9gPw9/6X+J6+e9Vnk8O\ -fGP4N63ph8q58eat4k+FPieHLJaap4eg+H3jv4paLf3cduY2vdc0rxB4Bkg0qW4eaCxsvHfiOOK2E+q\ -G4h+hLf/kZdW/7Afh7/wBL/E9f1bwHxHW4myCONxSSxuGqSw9ZxXLGc4KE1NJaLmp1IOSVoqfMopRsl\ -/mn42+H+C8O+NqmV5XKX9j5thaePwkJzc50aVWrWoToym/ekqeIw1eNJzcqjoeydWc6nPN9F8JvFnxE\ -/ZrmST9n+90TTfCR8mPVfgZ4um8ST/Bu906C/bV57f4daNpOrLB+z/4ru76bV1l1rQNNu9Lnm8W6jq3\ -iTwj4t1SLS5dP/QDwF+1d4E+PPjX4BeFJbS+8CfGPQ/H+saz4w+F+tw6q6QwW/wAE/jPpep638O/Gl7\ -ollp/xb8DRXl7okjanpANzpkHi/RLfxVpfhjXdRGhw/nzVH9hqx8b/ALQH7b6/EPQbBoPgZ+ye/wAUf\ -Cl74nlsbu+0fxF8YNa8Nad4H1Hw/GL7UbNdN8d2S+IPGEcE9taX8+iaJ4a1Br8PpvxS8MXtn+p5Nj8d\ -KvQwSk61ByjdPVwjGUZNxe6SS21Vr2Vz4rh/M8ylicPl6k8RhpThdS1cIxmpNxlukktndWvZJ2Z/QtR\ -RRX35+nBRRRQAUUUUAFFFFABRRRQAV/OX+1t8W/Dvhb9u74yQ/EnxBaaN4T8K6f4b0fwV4ivLvw7beC\ -fA+t+Ovhd8Hdc+Itp418SDVILzw94m8RWngn4Vi3ttZsn0a0tvA2lNpetx6t4uuNHm/o0r5J/aV/Yq+\ -Cv7UUthrnjKLxR4R+ImjaTHoOh/FT4ca3DoPjPT9DTVRqp0bUrLVtO1HQfHGko9xrkdlbeJdF1qHRz4\ -r1a80NNM1O+mvj5mbYKpj8I6FKahJSUtW0pJJq11e291dNXSvbdePnmX1sywLw1GooTUlLVtKSSa5W1\ -e291dNXSvbdflbRXy78V/gJ+1R+wFHc694ii0TxX8BdNuI9Lt/Ew8aSwfBC0i1O7udE8Lpqlzr+l6h4\ -p/Zm1toNH0j7NpEcGv/DPTk1Ox8K6brF14l1y1u4fSfhz8ZvB3xIkl0qze58NeNLS2uNQ1H4c+KrjQ7\ -bxvYaTBcWtumvjTtG1m+t9W8Nyvf2CpqWnXV7YLcXLafNcRapbXtlbfneJwlfCzdOtTcJLuvx9PNXXm\ -flWKwWJwdR08RSdOS7rp3815q67M4TxPYt8PfineeIWUweB/i8NJTWtRkBFjoHxg0mHRfB+gPqF27TS\ -RjxX4Sj8O6VabzY6VZ6j8MrKyiNxrni6CK47yvStT0zTdb03UNG1nT7HV9H1exu9M1XStTtLe/wBN1P\ -Tb+3ktb7T9QsbqN4r2xmtZZY5YpEaOSOVkdWViD4JffCnxn4LZpfhBrei3XhyMkWvwj8d+ZpnhfRbYl\ -Ug0z4feOvDmj3OoeBNFhlur65NhqGmeKbNIbOy0PQYPDGlwp5P4Dx34b47E4/F53kEFiFi5e0rYZNRm\ -qj1qVKTk1Gam71JQb9p7SUuRTUlCP9l+DHj/AJJhckyrg7jjEvLa+U044bC5hNTnh6mHhaGGw+I5Iyl\ -QnRhy4enW5FhvYU4SxE6MoTq1eg0v/j2l/wCwjrH/AKdr2qHiPxHYeHLGS4uJIpb6WKUaTpKykX+tXw\ -MUVvYafbxRySzyvdXFrGTHFIIvtAdwFBNedy+PPGEMUXh/QPhL41uvHmq6pbtpGi+JLK90vwX9i1LWk\ -PiG+8Q/FzwdpfiPw/4Y/sa3bxGt1aXF02pXlz4WeHSbK/i1PQ7nU/HfEOj+OZ/ijpt74/8AAHiz4fab\ -4g8Q6L4e0/xPo/iD4f8AijTr/wAUWumRAReFodJ8Yr4jvNKlXRtUurfUH8NQ3Njp1m+s65pekafZ6pL\ -p/wCT5/k/EFKvmuMo5JiZ0KeJrKdR0KihSXNKbnOThaMVFxbcmo2lFt2av/XHhXmnhxmqyHLOI+Pssy\ -qNPKsPiaWH+vYWWJzCcfq9CGEwlKFf21WpVnKaSw9OtVfsK0YU705yp/V+l6alo97qE9tZQ6vq80dzq\ -s1n5zrI0ES21lbfaLj554reyjiiDBIUkdZLhbeBp3jEuo6Lo+r+T/a2k6Zqn2fzPs/9o2Fre+R52zzf\ -J+0xN5W7yo923G7y1znArSrgfFXxX+FvgXUIdI8b/ErwB4O1W5so9Rt9M8VeMfDvh7UJ9PmnuLaK/hs\ -tX1GGSWya5s7uNZVUoz2siBiyMB4UlCzUkuVu7ulZtu7bW129fXU9Kp7fMKr5oSxM2opRSlPlhTjGFO\ -EU+ZqFKEYwhHaEIxirJInj+Hnhm0GoHSYdT0GbUjI882ha9relhJn80xzQ2ltfi3UxNM5ijMLQpnaI9\ -mUPBeFvhv488PanqN2njuKG3nvmuhC1pd6zBrBlnV7m51axvbqFbO+ljtrUSSwyyzkSSItyoUNJvQfF\ -e31zCfD/AMBfFH4kyMgu4bjw/wCDLnw14b1HRWwI/EPh/wCIfxSufD3hnxZo0zTWTWj6TrV9Lf298l9\ -YQ3Wnx3F3B0tj8KfGfjRll+L+t6La+HJCBdfCPwJ5mp+F9atgWSfTPiD468R6Pbah470WaW1sbkWGn6\ -Z4Ws3hvL3Q9eg8T6XM/nfQ5NwDnPENeh9Tyuph6EXf281KhQjGT1lz+77S27jSU563ceVtn5Xxn4heH\ -vBNB186zqjDH4fn9ngcHUVTG1J2vyPD0JXoc2rjVxcsPQbTj7bmfK6vhKwPxH+JEPio8eDfg5rPiPR9\ -BLB3TxR8UbzQbfQtY8UaTfWm2N9D8O+H9f8AGnhmSMz3SXWu69r1re2Gn3nhWwubz3e3/wCRl1b/ALA\ -fh7/0v8T1e0zTNN0TTdP0bRtPsdI0fSLG00zStK0y0t7DTdM02wt47Wx0/T7G1jSKysYbWKKOKKNFjj\ -jiVEVVUActr3iPRvB58beLfEd5/Z3h7wt4Is/Eeu6h9nurv7Do2iHxdqeqXn2SxglnuvKsbWd/Lhikl\ -fZtjR3IU/1Twtw9h+Gcno5Xh37WorzrVLW9rWlyqU7XdlaMYRV3aEYptu7f+eXiTx5j/EbirGcQYum8\ -Ph1COHweHclP6thKc5Sp0uZRjzSlUqVa1SVknWrVOVRhyxj5P+0P4t8bm08K/BP4QaLq3ib41fHuTxP\ -4T8CaF4d1C70jxOtlp+gSzeIdd8N6xEqQ6Rq9rNqOgwLqVxcRW3huLW5fGOppPoHhnWkX+gX9k39mjw\ -l+yZ8E/Dnwf8K3Ftq01jc6lrvizxVDoGmeG5fFvi3W7jzr/UTpenGQ2OiWVhFpeiaBZXN3qNzpHhjwp\ -omhvqd+mmR3Mn5kf8Esv2cvEfjnxPrP7e3xo0G90XxF4yspNH+BHgzU7fTNV0fQ/AmqeGPC8T/ETw3q\ -19Nc3fleW3irQ9AvbSPS7a/tPEfjfxZpjX/hz4mabb6Z+5Nfr+QZd9Vw/wBZqxtXrrS/SG6+/d+SW12\ -ehwxlX1PDfW60LYjErS/2YOzXzlv6JWtd3KKKK+hPqQooooAKKKKACiiigAooooAKKKKACvyB/ad/4J\ -J/DH4i+Z4m/Z5ufDfwW17TjZ6tpXwsHhqysPge3iLRdM1OOy1zwTD4OtLPWf2f/H93enRYz4k8N3F3p\ -2l+XqGtx+DNT8Salealcfr9RWGIw1DFQ9nXpqpHpfdeaa1T9Gc2KwmGxlP2WJpKrHpfdPumtU/Rn8nI\ -+IPx9/Z+8TDwH+018OviPHLJbPdWd7q3gzw5aeN7eztn0u/1vXY9Z8B6u/g/46+G7HT/ABNpAv2+HrX\ -GreHpLnSdG1DRtW1zU5zZ/T/hbxToHjTQNO8T+GNRj1XRdVjle1ukiuLaVJba4msr6wv7G9hjuNK1e0\ -1C2urW9srqKG7sruzntLuCG5hliT92vi18GPhX8dvCcngf4veA/Dvj7w39pfUbG016xWW88P67/Zupa\ -Ra+KvCGtwNHfeC/GtpYaxqa6frek3Nlq+nPePNYXttMRIPwr/aG/wCCYnxY+BWv+KfjV+yrrknirw3Z\ -SS+ILrwRCniy5+L2n6FpFvYW1j4f1fS7LUbm3/bE0iy0+81+G2tdXbRfGmmeH9K8jw9qPivx3fxajP8\ -AHZjw7VoqVXCN1qa+z9tfJWT9Yq/93dnwWa8K1qHPWwLdeiteXTnS9EkpLzir/wBzdjPD3/Hhcf8AYc\ -8T/wDqS6tVHxf4F8E/EHTYNG8e+DvCvjfR7a+i1O20rxf4e0jxLptvqUNvc2sOoQWOs2c0UV8lre3ka\ -yqgkWO7lQMFkcH4y+HXxp+P/wAQ9P1nSfB3hCGLxN4G8U+L9A+IOi+FP2fP2ivj9420fXbTxn4k0Zj8\ -RvhT8PrbTdR/ZuuLnUNB1qbTtJ8Q3+r3t9AZ4Vmhn0a+M/rWieD/ANuL4n3cmgeHfA/xua9s7d9YlHg\ -z9k7Vf2btU+y28kVk5n8cftxeKG8J6rYedqEG7SdPH/CRTyeVeWh/s2x1avnXl9bExdGWFdeFS6cXTc\ -4y11TXK0/NffqeBhKWa4fE0sTl/t8PiqUm6dSiqsZxkm1eFSmk4yWqvGSa2Ou/4Zl/Zu/6N8+CH/hqP\ -Af/AMoK9F8IeBfBPw+02fRvAXg7wr4I0e5vpdTudK8IeHtI8NabcalNb21rNqE9jo1nDFLfPa2VnG0r\ -IZGjtIkLFY0A87tv2Pf2/fEl1a6Br3gD9p19K1a6trG4k8U/Fv8AYn+HnheyknnjW01XxL4z/Z78UL4\ -10Lw9Z3n2e6vpPDkV9qMlrZywx6VrCSyaVedy/wDwSv8A2uJ1aDULX4S63YTK0V7o3iP9vn9snxL4e1\ -a0kBS50zXvDmv/AAJubDX9GuIS8V1ZXtvcWl3BLJBcwywyPGzw3DEqM/a4bJo4eotOaNGFOVna6Tag7\ -d7aafd7uKrcbZth5YXMcwzHH4W6bp4ivXnTcl8L5K9RJtdHyu3Rna14n/w0t+zl/wBF/wDgn/4dXwJ/\ -8vq96/4chf8AVQv2Rf8AxAT/APKhr6jsf+CVvh+Sys5Nf/ap/aMOuyWtu+tHwjpP7OugeFDqzxI2onw\ -xoXiX4Ea9qWi+Hvthm+xWmoa7rV7bW3lQ3erajOkl5N68OHcyk3zUlD1nH/21z/Q5IcKZtJtSoxhb+a\ -pBf+kuf42+Z+ar/tKfCne32SX4iaxa7m+zav4c+CPxt8T+HtUt8nydR0HxJ4e+Hl1p/iHRp49strfWN\ -zcWd3BKlxbTywSJI2Xofwe8V/t4fFfwH8NPClr8UPBvwWm1CTWvi74/HhHVvCOraP4a8K6L4gl0TV7O\ -PxXc2baRqtx4w1o6d4dsdX0tdZj8S6XY+PtN0nVPDngy9XVv2E0X/gl9+y7baZbQ+Lp/jj8RfEKed/a\ -HjLWv2hfjB4G1PWN1xK9p9p8LfBDxb4T8L6X9nsWtrVP7L8P6f58dilxe/atRmu725+p/gl+zz8Jf2d\ -9F1nQfhRoGr6RZeINUTV9YuvEnjnx98SNevrqG0isrW3k8U/EvxRq+px6RBFHK1tp6Xa2FtNf3lxBbR\ -3F9eSz+jg+G61OvSqYmcHSjrKMZNt6XUfgS30bT2211PWwHCNeniaFXGVKcqEdZRjKTk7aqPwRW9lJp\ -7XtrZnqmg6DofhXQ9G8MeGNG0nw54a8OaTp2g+HvD2g6dZ6Poeg6Ho9nDp+k6No2k6fDHb6XpNrYW9v\ -BbW0EccMEMCRRIqKqjWoor7HbY+9SSVkrJBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF\ -FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF\ -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\ +t8dKcF6KX/pDk187IXtmvjozgvRS/8ATbm187I9doryL/hbf9n/API3fDL4u+EPO/5B/wDxRf8Awsb+\ +0PL/AOPv/kiOpeKf7G8nfbf8hP7B9o+0/wChfavIu/s9zT/jZ8JtQv7HRW8feHNH8SajeW2n2vg7xZe\ +jwX46N/fTJBp1jP4E8XLY6xZ3l0ZrZ7OKaxje7hvLee2WWC4hkkft6OzqKMu0nyy+cZWa+a6ruCxFC6\ +TqqMn0k+WXzjK0lfS11rdPqj1Gimu6Ro0kjKiIrO7uwVERQWZmZjhVABJJ4AFfyY+O/wDg6b8O+HPHP\ +jLw94S/Yzfxt4T0LxX4h0bwz4zb9oxdBfxb4e0zV7ux0bxOdCX4E3o0Zr/TYLa6+yC9uhb/AGryftM+\ +zzW1Nj+tCiuK+G3j/wAOfFf4d+A/ih4Ou/t/hL4jeDfDPjrwze/Lm60DxZotlr2kTsEYhXawv4CwBOG\ +JGeK7WgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOF+IHie/wDDuj29p4ehs7vxv4svLn\ +wx8P7HU45m0e68XSaHrOt202vzQXELW3hyy0vQ9W1HUWSVbl7HRriDTo7rU5bKyufOdb8MWHgy+/Zm8\ +MabNeXdvpPxR1iCTUtTkhn1jW7+T4EfHC51XxDr95BbxLqXiPUdUnvL7Ubsxq93fahcXMg8yVyej8Bf\ +8V1qw+L9z8+lahpEum/CRR/o0kfw28R23hbWdQ8QapZrlhq+v65odjeRpcSs9poulaLE1jpGrS6/bzn\ +xJ/5HL9n7/srutf8AqhfjbXHP34qs9nOmof4faQu/+3mr+cVHZ3OGp+8iqz1TnSUP8Htabb/7eavvrF\ +Q0Tueu0UUV2HcFU9Q0+w1awvtK1Wxs9T0vU7O50/UtN1C2hvbDULC9he2vLG+s7lGju7OW3lkjlikVk\ +kSRldSpIq5RQ0mmmrpg0mmmrpn49f8ABXLxH8Jf2Rv2Bfjv8SfBfhLw/wDDr4g+JNDh+FPw/wBW+HMT\ +/DbX7vxP8SJW0DyZNV8DzadNrOn2Ohya1rb6beSXGn3EnhOKS4tJngh2/wAq3wL/AOCcN18RP+CMP7S\ +/7X5TUx410f4q6L468DaXHY6PJZ6p8Mvgot54W8b6x/aU+kPqFrbxx+PvifLPDbXkNpPJ4BtnvIJ5be\ +1ktf0B/wCDnz9oi78T/Er9nb9j/wALTXGoHwzpl38YPGGkacst5JfeLPGVxc+Dvh3pf2S3BY6xa6NYe\ +KpUiCtI8XjWAqPnUN438I/2yP8Agsv8Gf2WtC/Y/wDDX/BLPVNT+D2jfDjXPhhcW3iL9jP9r+71vxDo\ +Him21WHxVd6/d6b43tLW51jU59d1i4vJILO3hefUZGjt40IjERp04K0IKCdn7qtt3tb+tDONKnBNQgq\ +adn7q5b22va1/6R+sf/Bvv+0d8VfjH+w5beANK174fa9qv7Mni3UPhy3grxRp3iPRfEGpeDfEJl8VeC\ +NUufiRput6nFpGnwLq2vafZxjwndtJD4DFkzRGb+0Ifh/9tD/gsP8At9fssf8ABVH4kfBjSp9D8b/DL\ +wy3gzQPC/7MmkaV4N1rQtZ8YfEn9nXwrdeD7dPie3wq0zxfq1uvxT8ZaTrk9rHc2c1w0EuiQXEdk8co\ ++Ov+DfD4z+Kv2Yv+ChviL9m34n6T4g8ByfHXwvrPw48Q+D/F+l6j4Y1nw/8AFXwCt34v8IReIdF1i3h\ +uNM1ZbK28ZaVHbXEMcv2nxXGmAxCtp/t0QRXP/Byp4Qtp0WWC4/a6/wCCfUE0bgFZIpfCP7NUciMD1U\ +oxBHvQoWk5KTs+jd1fur3a7WTUfK+o1Dlk5KcrS+y3dX7q92u1k1H+7fU+g/2s/wBv7/gup+w7feA/i\ +38dPF3wsfwX4y8QTaRdfDXS/giw+H3hbxRbW82pN8PNd8Z6v8N9Ju9au5bGy1ZoLrw14y12zuINHuJ7\ +fWJY/Kml/eKw/wCCqfwzvP8AgmXqf/BQqHR9P1O98OfDHR/EHif4SaR4lsrrUtD+JGueKx8M9L8Iard\ +xJJcaPod18SBJBb39xaLK+mI16lrI6GGvhv8A4OgFU/sEfCFyBuX9r3wGobHIV/gz8fSwB9CUT/vkV1\ +H/AATM+BX7Pf7Qf/BDH4F+AP2k7Xwtb+Adb8N/tEaJc+MfEF1oOi6l4HXU/wBpL4rTLr3hnxbr8TR+G\ +dXt9Q0vSbqKXPlPNpEAuYp4UMTH7xJaqTvro1p971W/Z2tpe6LVElqpO+ujWnlq9Vv2dre7e6+F/wBl\ +n9rL/gvF/wAFJ/C3xJ+On7M/xj/Zu+FvgbwH4vufCp+HV74W8FWkura7Doum+Iv7A0D/AIS74eeKNQa\ +MaZrOlqLzVdY022mlndIromC5EH6rf8E/fj3/AMFQ/wBoL4WfHj4a/tb/AAJ1X9nH4qaJ4P8AEml/B7\ +9o5fCfh/QtNvPGskF/oVlNqnw58S3Wo2+s6jp+tyWep2moWWmz+G9VsbSWN4FxbvqX4eTf8ERf24v2f\ +XuPj7/wTK/bO8L/ABU8F39rcanoPiD4ZfE28+GHi3xXpOmXNzJHpZvdD1e88K+OtPint7m3m+065DaX\ +Esbq9jGryQx/Y/8AwQ7/AOCnH7Yv7a/xF+J/wN+MnxR0fxF4p8F/DS2+IXhXxfr/AMLfDNzo82gaZ4l\ +0Twt4i03xHp3gObwzcXXihr3xN4Yk069GorB9mg1Zb2wvrmW1vLFyk4q6g5+St+rSHOTirqDqPsuW/w\ +D5M4r8Tsv+CHH/AAUo/ax/aT/aI/aO/Zo/bP8AiEfGfj7wd4Vi8ReELS98EfDnwNfeF9R8AeL5/B3xO\ +8OyxfD7wnpUeq3j33iXw45S5W4kgHh+doCiNPnif2//APgov+3Bf/8ABWTwB+wb+xl8aP8AhWvh64vP\ +hD8OfGKWXw3+E/jpl8XeMseMvGfjKXUfHvgTV7iC30nwB4j0o3FvBKkEP/CL3DGDz2m3fLP7S2leJ/8\ +Agmf/AMF3/hR+0Bql94QfwV+0nqY8V67qyW2rfDj4db/i3Dq3wy+Jw12ea88R3OkW9h4wuIPFOoTBr8\ +x/2lb3Ah2kQrP/AMEU7e//AGl/+Cjn7WP/AAUZ8ceC/GmteFtC13x1f+HtT0XQX8TTeD/GXxx1rVotA\ +thoWkTz6xrEenfDW31jRzFo2nam9nH4htbi/a0sUe5pOaUeaScbJN36X7tXWnWzaS1btqJzSjzSThZJ\ +u62v3autOrTaS1btqfpX/wAFsv8Agrx8TP2BNa+HfwH+AWg+HLr4u+PvBDfEPXPHfjXTn1nTvCPg+41\ +zWPDGh/2F4fhngt9U8S3us+G/ELSS3e+zs4dMRfsV014r2nz54w8Xf8HKP7PXh/wV8XNQ1n4N/tXaD4\ +lvdDe++Ffw4+H/AIO8W6r4fi1tIpbW38Q2fgP4feGNQn0oGRY57/RdY1O1tQ32ia9S1H2ivsT/AIKpf\ +8E//wBlb/go9D8E/Ek37SXgr4F/H+98OWWj/BrVvEWo6GW+KfhTxXnxN4e8IXvw/wBe1rTNW1GZry+u\ +rjTpLHbeWja1eiawvS6Qw/gl8XPCH/BYr/gh3ong7xNH+0JYa78BtR8W2/gfwzY6Z4yk+Jvwrl1WXS9\ +V1608MyfDP4laTBeeEGutE0HV5JJtJs7ZIzYOiamspt2kpNNJp3T1TWzRSaklKLvF6prVNPqj+2/4Ee\ +NvH/xG+D3w88b/ABU+F+p/Bf4j+IvDdnfeNPhfq+q6Vrd54O8QAyW+oaaNW0a6mgvrFpYTPauWSf7Ld\ +wi7gtrsT20RXjP7An7Td9+2P+x98C/2ktW8P23hbXPiV4Xv5vEeh2K3KaZaeJ/C/iXXPBPiaXRY72aW\ +aLQbjX/Deo3Ngk0s0qWd3Ask8zhpXKYz7AooooAKKKKACvIvHv8AxXWrH4QW3z6VqGkRal8W2P8Ao0k\ +fw28R23inRtP8P6XeNlhq+v65od9ZyPbxM9poula1Kt9pGrS6BcT914s8T2Hg/Q59c1GG8ukS80jSrK\ +w0+OGS/wBW1zxFrFh4d8OaJY/a7iG3hvL7xBqumWkUt1PbWcL3qy3l1a2qTXEeR8P/AAxf+HdHuLvxD\ +NZ3fjfxZeW3if4gX2mSTNo914uk0PRtEuYdAhnt4WtvDllpeh6Tp2nK8S3L2OjW8+oyXWpy3t7c41Pf\ +kqS2esv8Pb/t56f4VLVOxjU/eSVFbPWf+Hov+3npt8KnqnY7qvIviT/yOX7P3/ZXda/9UL8ba9dryL4\ +k/wDI5fs/f9ld1r/1Qvxtor/BH/HT/wDTkRYj+HH/AK+Uv/TsD12iiitjcKKKKAPwO8f/APBD1/i3/w\ +AFF4v2+Pij+1D/AMJZZW3xg8I/E23+C4+Cn2K1XRfh2ukQ+AvAsvjab4t3CzWNpaeHNAju7j+xFS/Ft\ +cE2cH2phH++NFFAH4HftRf8EPn+OP7eNp+3f8L/ANqD/hRnjC18WfC/4gjwmvwU/wCE6tG8dfDOHQre\ +HWxrUPxa0PZbX8XhrSmu7b7Ed8rXMkk0puWVdT44f8ETv+Fzf8FLdF/4KI/8NMf8I3/Y/wAYP2eviv8\ +A8Kf/AOFM/wBsfaP+FD6V8NNM/sH/AIWB/wALWtfJ/tX/AIV3v+1f2I32H+2Nv2a8+z7p/wB3aKAPzh\ +/4Kgf8E+/+HkXwC8IfA7/hbf8Awpn/AIRX4waB8V/+Eo/4QL/hYn2/+w/BfxA8If2D/Yn/AAmmhfZfN\ +/4Tr7R9q+1ybP7L8n7M/n+bDyXw1/4JUfBrTf8AgnR4L/4J1fHTXrj41eC/B83i7Ubb4haZoX/CuPEV\ +n4i8Q/Erxt8RNI8VeFbD+3da/wCEZ1/TD40uLJHa7vYLyGKdLuB7O+uLA/Tn7Zfw3/aU+Lnwgtvh5+y\ +/8W9G+Bvi/wAS+OvCNl45+J179u/4STw18Ivtk0nj+b4bNZ6LfKnxHks0tItONwLSELNORqNhP5F1H/\ +Pl4+/al+PX7ED/APBSjw/8Cf2rPjR+1v8ABn9nr9nD4fKvxX+Peuab8VvEPwa/bD+Jvxk8LfCy38E6P\ +8Qxo8Nr4j/s/wAKeJ9Q1m50x45bWx1DREsLq1Etre/agD0Sw/4N1PiB4H0zxF4F+DP/AAU9/aE+F/wb\ +8VT3Z1/4YWHhTW/7M160vohbXcHiKPwr8adD0rXZ5bJVimkn0TbKq4aLZhK/Vn/gnj/wTD/Z/wD+Ccv\ +hTxJYfDCfX/GfxA8drp6eO/il4zNidf1i00tppdP0HRtP023jt/DXhiK5ubiYWsXmzzzSK97eXZgtfI\ ++GtB8LftZfsM/te/s3fALSv2vPi1+0xN+278CP2nLS0tv2pPE9x4y8N+AP2kPgZ8NdO+Iei+LvDV5Za\ +c974W+G9zf6lHaTaRbLdeXZyzs5vrhLM2/m0vhj9qr9kn9qP9gfwXcft8fHP9pr9q/4/fFLRT+1b+zz\ +rPiW28Y/AfR/gRc2mo3nxX+JPgXwQPDNlL8LPD2iy2/laLezRWT6pJaSyW1vZRWt3ptAHjf/AAdF618\ +F9R+CP7MljNrOmXvxytfiXr+peD9PsLyzur2H4T6r4UuI/HepX0UMjSW+mT+KNN+HC2sjbUnks5xDv8\ +mcx/bv/BG/9mdvhF+wt8F/hDqemNpms/GLR4P2q/j5JJCY76XR/iDrtjF8JPh7d2N6qLPpniDwH4Kjt\ +dbikW9ij07wtrWkXljbyeIbK+t/wB/bS/4JT/CH/gn1c/C/Rba/+PXxn+Nvir4lfD3VvC3xV8VfDHwf\ +4V/YF0LRtc+JdxpOlfDv4z6vr1zqlyniqfTNCvWubWTWVtJLS9juLpIbR2Lf18/tXWOt/B79gr9snXf\ +C3ifVNL8f6X+zX+0p8QE8e+G5rvwtr1j45i+Fni/VtK1vw3f6dfNe+H00d7LR7Lw8BfXF5o+l+GdKsY\ +7+Y2EU5yqJztTt7kvifl/L/wBvdf7t1o2mZVIubVO3uS1k/L+X/t7rv7qa0biz89P2jP8AgjB+zr+37\ +8N/gN8XrzxP4s+C3x0tPgh8JtIufiL4Jt9P1Sy8TWOj+CtEi0RvGPhbUGhGq6lY26xw2l7aXun3gt4o\ +ra4muILazjtvAX/4N2de+JeueFf+Gr/+CkH7Rv7R/gTwfODovg7VdK1fT7rTbE+Us+naJrvjr4reLYv\ +D8E0MEUcrWmnRMY0AQowRl/N3wf8AHn4An9mD4ey/s9f8FX/+CqHjb9vY/BnwRc+Gf2ZvD3iL41fEj4\ +ey/Ha28GaXe6x8L9M8Fal8HbTTdQ8B2niaHUbFSmvahDbaZYm4iOsJEsN1+0H7QHwj/as8UeCL39pP9\ +s79vf4gfsU/Br4bfsy/CLVrfwr+zJ42PgHxBb/H+48D2N78Yr34riTw2YfF1s3xJmfTdA8P6XqF4dUh\ +kt7a2bTbsuL+qUHTp04N3cIpfckh0oOnSpU27unGMb97JI/ar4Y/DPwN8Gvh54N+FXwz8O2PhPwD4A8\ +Pab4X8KeHdP8ANNtpej6Vbrb20JmuJHlvLlgrST3E8klxczzSXFxLJNJJIxXyx/wTY8ffHb4pfsM/s3\ +/EH9paG7j+M/irwJJqniqfUNLi0XUtV09/EGtQ+C/EOqaZDbwpaapqfgOHwzqFyEhiVp9TkdYowwRSr\ +ND7hooooAKKK858d69qyXOieB/Cl39i8Y+L/PvINQaC2kj8PeC9B1bw7bePfFcb6hDLbvq9rp3iGwtt\ +Jgktr9Zda13TXvNOn0aHVp7WZyUIuT1S7btvRJebdkvMmc1CLk9Uui3bbskvNtpLzZkaV/xcTxoPE7/\ +P4M+HWr6tpvgsD/RbnUviTpcnjDwF8QvEF3EMzS6RptndahoWmJK1qk13ca/eT2N7bL4a1RPXayPD+g\ +6T4W0HRPDGg2n2DQ/DmkaboOjWPn3N19j0nSLKHT9OtPtN5NJNceXZ28KeZLJJI+zdI7MSx16mnFxj7\ +2s5aya25rK9vJWsutkr6k0oOEfes6k9ZNbOTSvbrZWSjfXlSvqFeRfEn/kcv2fv+yu61/6oX42167Xk\ +XxJ/5HL9n7/srutf+qF+NtTX+CP+On/6ciRiP4cf+vlL/wBOwPXaKKK2NwooooAKKKKACiiigD4t/b+\ ++Gn7V3xj/AGafF3wu/Y48feA/hd8WPHF5YaDqPj/x3r/irw0vhzwFcx3j+KpfCmr+EPCGtXdn4vuUjs\ +bG3mFrEba21S8u7e8tr63tGP5w/B7/AIJyfteaz+yd8Vf2Cf2htG/YI+F37Mvi74PajpHhPV/2ULP4/\ +wCq/FSL45WfinwX4h8JfEP4gzfF2WK08Y6f9r0G/vdXlaePU7y6s7C2gntrQP5P74UUAfjB8Kf2OP8A\ +goFrPxt8HftI/tZfFn9mbx78Sf2Yvgh8VPh5+yd4c+GelfEPRPCusfET4keGrbw9ffEz44a1rujNdad\ +dXthpdha6lbaHZXUAju3uLKKF7Y2994r+xT+xZ/wVa/Zm+MOrfEPx3qX/AATn+J2rfGX4n6Hrv7Svx1\ +1/Vf2mvE/7Snif4dy6/p0niHwx4G1i48OaVoOgw6f4ZguIvD2kRadY6JBcWdit5FJDArJ/QTXl3xH1C\ +/1KbRfhloV9eaVrPxCs/Ei6jr2mXM1lrHhDwLo1hb2/ijxdoF0jxKPEceqa/wCFNL04rMZrK+8XW+s/\ +Y9Rs9JvrOSJzUIuTV9kl3bdkvm2lfZddCKk1Ti5NX2SXdtpRXzbSu9Fe70Pwa8Wf8E5v26/2nRrH7O/\ +xS/ax8EfEf9gnRfjz4u1KLxf47tfHHiX9rDxJ4c0T4jaH4k1LwSb7WVl0uCbRPF/hfX/C+m+IpbmDUr\ +e0XVjY20vhvUbXTZv2/wD2pvhfr/xv/Zj/AGjPgt4UvNH0/wAU/F74EfF74X+Gr/xDcXtpoFjr/j/4f\ +eIfCmjXmuXWm6fd3Fto8Wo6tbPcyW9rczJCjtFbzSBY29r0/T7DSbCx0rSrGz0zS9Ms7bT9N03T7aGy\ +sNPsLKFLazsbGztkWO0s4reKOOKKNVSNI1VFCgCrlEIuK96znLWTWzdktPLRJdbLW71CEXFe9ZzlrJr\ +RN2S08rJJdbJXbep+J3xB/wCCcf8Aw0p/wTo/Y48N+Ftc8P8Aw5/bA/Z0/Z7/AGd774C/HzS5dR0+Xw\ +n8Q/Avw48HQS6ddeJNN0k6m/gHUbvTZFlAtJpLaQ22ppp81xaC1l8c/aX/AGK/+Csf7R/xh+A3xN8XX\ +v8AwTu8a+Fvgb4Q8N3Nj8EPil4v/aP174Na58c4dKjj8VfGTWfCHhT4YaM2vaj/AGq9yuh2WpXV5Y6X\ +Y4i+yy3E13PP+2/7P3/JBfgl/wBki+G3/qG6LXrtKjJzpUpy+KcYt+rSZNCbqUaNSXxTjFv1aTZ4/wD\ +AQfHwfCbwoP2nx8Hx8cx/bg8cD4Cf8Jp/wqYD/hJNY/4RkeFP+Fhf8Tj/AJE//hH/ALd9s/5iX2z7P/\ +ovkUV7BRWhqFFFFAGR4g17SfC2g634n167+waH4c0jUte1m+8i5uvsek6RZT6hqN39ms4ZJrjy7O3mf\ +y4o5JH2bY0ZiFPnPwme28T2Wo/FaXUdI1bVfHv+hwXPh/WdJ1vRtK8F+F9e8UJ4L8KQX3h+8ubG71ex\ +i1nV5NanhvNRVte1bVYLXUZtJttKt7Q/aB/5IL8bf+yRfEn/ANQ3Wq19e+D3wk8U6td694n+Fvw58R6\ +5f+R9u1nXvBHhnV9WvPsttDZ232vUdQ0ySa48uzt7eKPe52RwJGuFVQOeftHWXKlJU4p2ba1k5K90pb\ +KLSVvtPU5p+0lXXIoyVKKdm2tZuS5rpS2UWkra8z10R6NRXkX/AApvRrP/AEjw/wCNPi74e1eP/j01j\ +/hbXj3xl9j3/u7j/im/idrmu6HqPmWrTRf6dpV15Pn+fbeReRW9zCf8In8X9L/0fQfi9pGr2b/vpLn4\ +nfDGx8R68ly3yPBaX3w38UeDbGLSBFHC0cUumT3azS3DyX8sMkFva1z1VpKi2/7sotf+TODv8mrdb6K\ +vaVVpLDuT/uSi1983Td/k1brfReu15F8Sf+Ry/Z+/7K7rX/qhfjbR/b/xo0f59X+HXhDxXp9l+5uLvw\ +H49ntPFeubf9Hi1LSvBHjfw1p+l6R5s5iuJ7G68YzfYbZpkh1DVriGFLzy74gfE6aHxZ8Dp/FPw1+KP\ +g5LL4o6vfQLc+G7DxzNqsP/AApX4wabcpp9t8Hdb8TSLeQ3Gp6czW9ytvcTW8093aRXFrp+qTWOVatD\ +kjdSj79O/NGSS/eR3k1y/jZ9DHEV6fJG/NC06V3KEopfvIbya5fxs+lz6uory7T/AI2fCbUL+x0VvH3\ +hzR/Emo3ltp9r4O8WXo8F+Ojf30yQadYz+BPFy2OsWd5dGa2ezimsY3u4by3ntllguIZJPUa6IVITu4\ +TU0uzT/I6oVKdRN05qaXZp/kFFFFWWFFFFABRRRQAUUUUAZHiDXtJ8LaDrfifXrv7BofhzSNS17Wb7y\ +Lm6+x6TpFlPqGo3f2azhkmuPLs7eZ/LijkkfZtjRmIU8h8PNB1a2ttR8YeK7T7F448ef2Tq3iHSjPbX\ +8fg+2tNJtrXSfh5peqQTTfbdI0ndfySSRzG0vda1zWtYs7awi1Y2UGRd/wDFwfiBNo7/APIpfCXV9B1\ +LVVH7yPxJ8SbvRJ9Z0vw/qlndYU6RoGh654R8QxuILhLnWtb0W5s76yu/Dd7b3frtYx/eTc38FNtR83\ +tJ/LWK2+09U0zGP7yo5/YpNqPnLaUvlrFbfaeqcWFFFFbGx5F+z9/yQX4Jf9ki+G3/AKhui167XkX7P\ +3/JBfgl/wBki+G3/qG6LXrtY4f/AHeh/gj/AOkowwv+7Yf/AK9w/wDSUFFFFbG4UUUUAeRftA/8kF+N\ +v/ZIviT/AOobrVeu15F+0D/yQX42/wDZIviT/wCobrVeu1lH+PU/wQ/OoYx/3ir/AIKf/pVQKKKK1Ng\ +ryL4k/wDI5fs/f9ld1r/1Qvxtr12vIviT/wAjl+z9/wBld1r/ANUL8baxr/BH/HT/APTkTDEfw4/9fK\ +X/AKdgeo6hp9hq1hfaVqtjZ6npep2dzp+pabqFtDe2GoWF7C9teWN9Z3KNHd2ctvLJHLFIrJIkjK6lS\ +RXl3/ChfhBb/PoPgTSPA14fkk1b4YvffCrXri2PL6dd+Ifhvd6VfXmkPKsMsllLcPaSTWlvPJC01vA8\ +frtFXKnTm0504za7pP8AMudKlUadSnGbW10n+aPIv+FW6zZ/6P4f+M/xd8PaRH/x6aP9t8BeMvse/wD\ +eXH/FSfE74f67rmo+ZdNNL/p2q3Xk+f5Ft5FnFb20J9i+PWn/AOmf8JL8IvF/k/8AMu/8IR4y+HP9o+\ +Z+6/5HP/hYPin+xvJ3+f8A8gG/+0fZvsn+i+f9st/XaKj2MF8LlC21pysu1o35bLorcvS1tCPq8F8Ll\ +C21pysu1o35bLpHl5elraHkX/Cb/E3S/wDR9e+Cer6veP8Avo7n4Y+OfA3iPQUtm+RILu++JGqeDb6L\ +VxLHM0kUWmT2iwy27x38s0k9van/AAuvwha/Jr2k/EbwtLb/AC6zL4g+FfxGt9B8OSQ8ajJrfjqz8Mz\ ++HYNIs2WY3OrRavNoqw273kepSWIF0fXaKOSqvhrc3+KKf3cvJ+LfoP2daPw1+Z/34xa+XJ7P8W/Q5H\ +wr8QfAXjr7f/whHjfwh4y/sr7L/af/AAiviXRvEP8AZ3277R9i+3/2RezfY/O+x3fleZt8z7LJszsbH\ +XVyPir4feAvHX2D/hN/BHhDxl/ZX2r+zP8AhKvDWjeIf7O+3fZ/tv2D+17Kb7H532O083y9vmfZY9+d\ +i45D/hSPgey58Ly+L/AX2f8Ae6RY+A/HfjDwz4U0G9X95Fe6V8N7LWv+EX/4/s3U9rcaLcWF/cyzSal\ +aXv2m6ExeuvsRnbqpON/+3eWVv/Ate6vor4haOEKluqk4t+kXGVv/AAN33ur6eu1wvj7xPf8Ah6w0ax\ +0GGzufFfjHxHp3hLwrBqEc0tgl/dw3mq6xrF9FFcQC7s9I8H6P4m1qWzN5YvqSeHG0y1vIL29tWrnP+\ +EI+Jul/6RoPxs1fV7x/3Mlt8TvA3gbxHoKWzfO89pY/DfS/Bt9Fq4ljhWOWXU57RYZbhJLCWaSC4tcj\ +4YQ69qvjj4n6x431LSNc8UeC9X0j4Y6Ze6Fol74f0G10GXwf4R+JV7d6Toer+INYuNH1fUNQ8c2ltq0\ +kepNDqMPgbQ2e3iexUmZVJy5YezlSdR25m46aNu3LJu9k7aWT1emjmVWpLlp+ylSdV25m4aaNu3LKTv\ +ZPldrJ6u60fqPhHwxYeDPDWj+GNNmvLu30mzWCTUtTkhn1jW7+V3udV8Q6/eQW8S6l4j1HVJry+1G7M\ +avd32oXFzIPMlcno6KK3jFRioxVoxVkvJHRGKjGMYq0YpJLslsFFFFMZ5F+z9/yQX4Jf9ki+G3/AKhu\ +i167XkX7P3/JBfgl/wBki+G3/qG6LXrtY4f/AHeh/gj/AOkowwv+7Yf/AK9w/wDSUFFFFbG4UUUUAeR\ +ftA/8kF+Nv/ZIviT/AOobrVeu15F+0D/yQX42/wDZIviT/wCobrVeu1lH+PU/wQ/OoYx/3ir/AIKf/p\ +VQKKKK1Ngr+Nn/AILhf8FJ/H3jv4/2H7Mf7MXxG+Ifw+0D9mLxLrZ+JHxF+E/xTufA+peNfjTqHhrTr\ +CWx8NeNPhlfw6tpmj+C9H1fxx4T1Wxk121TU/FXizxJpmtaDaz+BNO1C+/dv/grb+3tB+wr+zLe3nhO\ ++2ftAfGz/hI/hp8Bo7O58LXF/wCDfEcvhjUbnU/jlqnhnxHa3zeIvBvg95dElkt00jUbPUvEnibwr4Y\ +1NtMtfEv9q2f8FaS6lf3mq6/r2oarrPiXxNquoeIvEmta9qt94g1/WNf1u8n1XWtV17xFq11cXniLXb\ +vWL3UL3UNQu7ie61DUdTu7+4lee6kY/wA++OHiDUyLCUOGcmxUqOb43lq15wdpUcOneEVJaxnVmk1yt\ +NU4u9lNX/G/E7iSb5OF8uxNXD1pqFbGVaUnTlCndSo4eNVWlGpWkvaVHSanCjBKUoLEU3L6o+Hf/BTr\ +/gpr8G9DufDfgr9sf48rpGoatca5N/wsSPwB+0frh1Kez0+wn+zeM/2gPBPjPXNI0n7Lp1l5el2+pW2\ +lRTfaLu2sUvLzULi4/Q3wX/wcpftv6H4r029+J/wb/ZR8deD7X7Z/bngrwfoHxf8Agr4u1Tz9NuotM/\ +s74g+JPir44tvDXkapNp93N53hTVPtlrZy2Mf2KS7j1K0/FGiv5/y3xX46yxRjRzyrVpw5bRqydVe67\ +pWq+0STu1JRS5lbmvY/KsHmnEuW8v8AZ3FuYUYRcGqdWrDFUkoXajGOJp1JJSbvP37S2aaUUv6jPhh/\ +wc7fDW8/tz/he37G/wAV/Bvl/wBmf8It/wAKJ+Jvw/8Ajd/aW/8AtD+3P+Ep/wCFn23wv/4Rjyduj/Y\ +fsP8Abn237Vefaf7M+yW/9ofoL4D/AOC8/wDwS/8AG/8AwhlnffHrxB8OvEPi7/hHbW80L4l/BP42+G\ +rHwJrOv/Y4rjSfiB8Sofh/c+CvD9ppd9dvDquuL4nuPC9oljcX667LpMY1Bv4WJdC0eVQv9n20ODnda\ +IbKQ4BG1pbQozJzypJUkAkZAIoy+F9PdgYZr61XGDHFOkylsnLlr6GZwcEDAYL8uQoJJP3WXfSE4nw6\ +jHH4LD49LduHLN633pypQ291e5okm1J3v9DhPETj/BpQqYzL85St72Iw1TDSd5XeuGqOKaXuxtTask2\ +m7t/6aHwd/aX/AGcf2iP+Ej/4Z+/aA+CXx0/4Q/8Asj/hLf8AhTvxV8CfE3/hFv8AhIP7U/sH/hI/+E\ +K16+/sT7d/YmtfY/tPlfaf7IuvJ3/Z5dntlf5Tus/DnTdZEbajaaHrv2Uy/YYtb0a2uWgSdoxKFupRK\ +IXZIoi5jgAkMKgqowV9e8GfGP8Aaj+FPhfSvAvwr/aM/aT+GXgPRft39heAfhB+0r8Z/hv4D8Pf2lqN\ +1rGqf2N4K8KeOdJ0vRftes6jqN7cfY7RPtN5f3N3cbrieSWT7vL/AKROT1VFZjklXDzs7unVU03dWVp\ +wgkuVu7dRvmVkrO6+kw/jFmFNWzLg+c1GLbnhMZRqJy57KKpV40KluV3crys+lubk/wBQSiv4Bfh1/w\ +AF0f8AgqZ8N9cvta1/40eFvjXaS6Tc6WfC3xv+AXw9Twfpc73ljdnxJY3X7Pmi/D7VTrkEVjNbxPca5\ +d6T9l1W7abTZ7n7FeWX2j8M/wDg5u/aI0XRLuy+Lf7KPwO+LPieTVZ7qy8QfDP4r+OPgDolloL2lhDb\ +aNd+DPE3g74mXGparHqEWpTyammu2kM0OpW9oukwPZSXl/8Ad4Dxk4Dx9l/ac8JJ30q0pNq3d0farXo\ +r37pH0OH8YeDZq+OeNya3M39awVeKSXXmpRrQtL7LUn52P7Ka8i+G3/I5ftA/9ld0X/1QvwSr8PfhT/\ +wcnfsYeK7zwlpHxa+FP7RvwPutR0mN/G3jG78J+E/ij8LPB3iGDQ5b2/sdMvPhh4y1Dxr4x8PS6/B/Z\ +umX8PgG1u5xf2t9quk6Ha/bmsPsP4Hf8FUf+CeHijWPiz4im/a2+Efw/wBI8b+LNA8feDbr45axefs7\ +v4r8KSeBfDfwul1Lw7afHjT/AA5NrMtv44+EnjizvbW3jkvLCO0sL29t7ew1vQ7rUfsMJxPw9mkqDwG\ +dYbEvmfuxrQU1+7k7uDamkuZXutG7PXQ+pwPGHCucSw7yziHB4tqbfLGvTU0vZSbbpykppLmim3Gybs\ +9bo/VyisTwz4m8N+NPDnh/xj4O8QaJ4s8I+LNE0rxN4V8VeGdVsNe8OeJvDevWFvqmh+IPD+uaXcS2u\ +s6Je6ZdWtzaXdtLJBcQXMc0MjxurHbr6FNNJp3T2Z9SmpJSi7xeqa1TT6oKKKKYzyL9n7/kgvwS/wCy\ +RfDb/wBQ3Ra9dryL9n7/AJIL8Ev+yRfDb/1DdFr12scP/u9D/BH/ANJRhhf92w//AF7h/wCkoKKKK2N\ +wooooA8i/aB/5IL8bf+yRfEn/ANQ3Wq9dryL9oH/kgvxt/wCyRfEn/wBQ3Wq9drKP8ep/gh+dQxj/AL\ +xV/wAFP/0qoFYnibxN4b8F+HPEHjHxj4g0Twn4R8J6JqvibxV4q8TarYaD4c8M+G9BsLjVNc8QeINc1\ +S4itdG0Sy0y1urm7u7mWOC3gtpJppEjRmG3X8t3/BwD/wAFA77So7f9gD4O69qWn6z4gsdA8SftOeJN\ +B17RW0258A+KtJ8UxaT+zbrFvppl1Gx1LV7BNH8VeKrOe50R5vCR8P6NLB4h8PfELVIbHxOKOI8Bwpk\ +eOzzMJWo4SPuxXxVKstKdKP8AenKyvsleTsk2ePxLn+G4ayjE5piYupKHLTo0l8VavUfLRpRbslzza5\ +pyajTgpVJtQhJr8Kv27v21fF//AAUE/aP1z42aqvjDQfhPoyxaN+z/APCvxfc2b3fwx8DPp2jRapa6h\ +pemW8VnYeOde8RaKniLxOyf2hd2+oXemeFn8Qa1pfgnQ7kfJtQW1ulrBFbxlmWJQpeQgyyuSWkmmZVG\ ++d5Czu2Ms7sx5NT1/nXnec4/iDNcbnGZVnXxmPm5zb2V/hhFbRhCNowirKMUkkfy9OricRWr4vG13is\ +bjJyq1qj+3Ula7S+zCKShTgtKdOMKcfdigpkkscKNJLIkUa43SSOqIuSFG5mIAyxAHucV7J8Pvgz4g8\ +apb6pqLy+HPDE8Vvd2uoPDb3Go65bSz7WGj2bXGbGJraOZ4727jaMiW2lt7W+t5mkj+sfCnwx8E+Dha\ +zaTodpLqtruZfEGpRx6jr7TS2gs7qWPU7hC9gksXm77e0FvaKbmXyreNZHU/MYjM6NFuFNe2muzsl89\ +b/L7z+vPDX6InF3FeFwuccZZh/qVlWIUZwwzouvmdWF07ToSnSp4LnjdKVec69KTUp4KUdJfCmjeB/G\ +3iHyzonhHX72Ka0W+gu5rI6Rpt1ZSeUYrmy1fXXtbS+R1niaMQzyPLG5ljVold17rTfgL8TdRgeeWw0\ +HQ2WVohaa7rv8Apciqkbi4j/4R6w1GH7MS5Ubp0l3QvuiVNjv930V5s82xUvhUaa8lf87/AJH9S5L9E\ +rwXyqFOONyjG8SyinzSx2YYiDlJpa2y15eoxi78iSuk7TlUep8Uf8M6eNvsZlOteFzqpu/JGmCfVRpg\ +svLDfbDrX9kGY3vn5T7P9hEewh/tG4bD414l0a78JeI73wtq95os+q2MVnJcJpN7e3Mcct5bfbVtj/a\ +Ol2jySrYyWkxaJJIdt2FEvmxzRx/pz/y0+qHP5rVTUtM03WbKbTdX0+x1XTrny/tFhqVpb31lP5Msc8\ +XnWt1GyS7Z4onXcp2vGrDBAIqGa4hTi6tpwSV0ko303vZ6/dd7hnv0T/B/MckzXLsmySfDmb453w+Yx\ +xWY4ypgX7SE+Wnha+YLD4ilywlSlCunVlTqT5cRTqqnWp/l4SdyqqSyMyzybYYZZ2WK1tZ767nkEKN5\ +VtDZWtzNLI2I4ooHkkZUUkVnistQhTzI7W+ty29N6RXMJddyb03Bl3DLjI5GSPWv040jwf4S8P3L3ug\ ++F/DuiXksDWsl3pGiaZptzJbPJFK9u89laozwGWGFihO0tEpIyoIw/Ffwx8E+MRdTatodpFqt1tZvEG\ +mxx6dr6zRWjWdrLJqduge/SKLytlvdi4tGNtF5tvIsaKOiOcrn96haHk7td+iT/A/Ksd9CDK45PGGV+\ +IeInxDSc5OtiMBTp4Ktv7Ol7CliatfC2vHnxH1jGX5Xy4VcyUPzTk8O6PI5f7IY84+S3ubu1hXAA+SC\ +2nREzjJ2qMkknJJJ7n4geGlk8K/BZIL+ZHg+GuqRBrmGG4R42+MPxZnJZIRCRLvmwCG27UwULHdXe/E\ +X4P654FzqNlJd+I/Db/aZH1CDT3+3aJFB504XX4bQuv2RbCLe+pIkFrvilE0NkPs4uMfxy6L4a+Das6\ +q0nw71RIwzAGRx8WfirIUQE/M3lxu2BzhCegNfVZVjpTwuZzw+IkksPDRSatbE4daxv0V0rra9tD+Kf\ +EPwo4h8Os1xeS8aZFCnKvBuhilT9phMZBVKEpzwmJlTiqqi50/axXLVpTcY1qdOpaJ846b4Fbw34l0v\ +xl4Wj0zQvGOh61ZeKNC8b+HvtPhHxn4e8U6ZqEeq6X4l8PeJtCT+0NE8S2mqQW93aalaXcF7bXcKXEE\ +kU0SS19ifDz9v7/got8G9cvvE3gj9sj9p5tUutLn0K6k+IPxR1H9ozQW025vrC9lfT/A37RL+L9J0/U\ +zd6bZeXqlrpFvq8EBnto7yCzvNQguPA1cMXADAxsEbcjqCSiPlGZQJF2uPmXIyCudysA3dI0aOsW128\ +otFM6q0asy+aGaIOpkVC+ApKsyhd4U7x6mA4t4kyyUZYHOK+G5WnaFSUFdbN8ri3ppdt6ddj86oYOGC\ +bnlmMxeVTu5c2FxWIpapcqaiqjppx+yuTfo1dH6veDP+DhX/AIKWeBfC+leGtdvf2bPiXfWH27zPH3x\ +f+Bfi6x8eeIvtWo3V+n9sr8Jfi94K8OP9khvIbK3/ALM8N6dizsLb7b9rvzc393+ivw7/AODoPwZJqm\ +oXHx0/Yy8X+CvBNtol5d22ufBf44+EfjF4i/tq3urIx2+q+HviZ4M+GunaZ4ZGlDWJbjUY9eurmC4s7\ +WBdKngubi8sP5kK6r9n/wDZU8b/ALef7Tngb9l34b6ZK1vf3Wh+I/i74v0/w+utHwN4Ig8R6BBqHibU\ +7tNRs4rO10bSLh9VuLS71LR5tSmfQ9I029nvtZtdNvv0zhfxa8RMTmGEy+jjHmcqrhHknShVlJJqCSv\ +H2kpzclFJ1IupUcOapG7kff8ACOL8Q83zzLMiybi2darjZwhfMaVCvSp0qUJSrVcRWjTpVYUqVKM69e\ +spOSp05SkpyV3/AKOX7KfijQvG/wCy7+zb408L339p+GvF/wAA/g94o8O6l9mvLL+0NC1/4eeHdW0i+\ ++x6jbw3Fp52n3dvJ5U8UU0fmbJY0cMo98rifhp8OfBvwf8Ahx8P/hJ8OdH/AOEd+Hvwt8E+FPhz4E8P\ +/wBoarq/9heDfBGhWHhnwxo/9q67fXV9qf2XRNMsYPtF5c3F1N5HmXE8szPI3bV/alCE6dCjCpZzhCK\ +la9rpJO19bX2vrY/onDQnTw9CnVs6tOEVLlvy8yik+W+tr7X1tuFFFFamwUUUUAeRftA/8kF+Nv8A2S\ +L4k/8AqG61XrteRftA/wDJBfjb/wBki+JP/qG61XrtZR/j1P8ABD86hjH/AHir/gp/+lVD5B/bo/bD8\ +E/sMfs4+Lvj34v0v/hK9QsL3RPCnw8+HNt4h0nw5rHxL+I/iu+XT/DvhXSr7VPMeOyggGpa1r1zY2Wr\ +X+keFfCWva9Bo+qDSZLOX/O08ReOPiD8WfGHif4vfFzxnqvxG+KXxF1D+3/GvjvW1ij1HxNq0lvb2n9\ +qizg/c6Hp7adY6XbafpNklvpuh6PpGl6DpdnaabpNnbxfpX/wVy/b7u/26v2kLrwl4D1/VX/Zd+BOoa\ +n4c+Hujw6/omseEviR470HX/FvhvxN+0Zpj+Gt9lrejeI9JmfS/CN1Jf65HF4N0uXV9Mn0eT4g+INIh\ +/MWv4r8bOO/9ZM8/sPLcQ55LkcnGVtIVsUrqpU/vRpr93Tbur88o6Tu/wCcONOJP9ZM6l9VrSnk2UOd\ +LDraNWum4YjFWveSuvYUHJK1OFWpTcqeJTZXpnwj8GQeN/GUFpqCStoui2ya7qgW0S6tb17a/s00/Qb\ +9p0aKG2vXN00iSK5ubXS7uBEBZp4PM6+i/wBmrUoLfxN4s0h0lNzq2haVqVs6qhgSDw7qF7a3qTsZAy\ +ytJ4osDEFVgwhm3shVBJ+CY+c6eEqyho9Ffsm0n+Gh+s/RdyTJs88Z+GaOcxjXjl8MVjcNRlflrYzB4\ +edehezV3hnCWNUX7snhVGalCUov7FoopnmLkAZbIQ5UbgFfcEbI6qSp6Zx1OBzXyZ/rm2lu9x9YGvS+\ +IY/7I/4R46IP+J3YHXv7aXUWx4bxO2qf2SdPHGubUjNv5/7g7JN+cCtzEhI5VQAhwMtk/N5ikkD5cFd\ +pGDkZIxwYmgiJDEEunKyBmWQHI2EupBYjaMEkn5eueS9tdy6c+SalyKaXSWz6bel7edh+8GVR83zI4+\ +63BVgGD8fIwIIw2DkY61ICSSNpAGMMduGyOcYbPHuB7ZqNEwMhmAAwo+UhRxlRkH5dwOB26DjADsSAf\ +eVj7qR+oPH5UNr8ERr1Yo3lRkKrZGQCXXGeQCQuSV9uCe+OVwd2dxxjG35duc53Z25z2649qblweUyP\ +VWB/DDYpolBbaQRk4B69ex9D0pBbzH7VwwOSGJLBiWB3cEYYnC47Dj2r4w/aD8P23hjVvh/pOm2k9vo\ +48Cajdac7xRxWiy33xR+I+r6hpOnLBbRxJa2P9rWSRwxgm3trq1R/vI8n2jXyt+1XqUFxq3wt0hElFz\ +pPgbXdSuXZUEDweIvGmqWtkkDCQs0qyeF78yhlUKJodjOWcR/RcPSknmyWqlhlf/wrwv5H85/SnyvLM\ +y8I8zlmTVGOW16eJoVdU6eJp0sRGhFWaUliJ1FhHGXNH9+p8vtIQlH5Yooor1j/ACUOS8b+I38L+Hru\ +/tUin1e4aPTPD9lKplW91y/JhsI5LaOeOW5somL3N4IGMyWNjczIreURX9vn/BDL/gnRF+xl+zlL8Tv\ +in4Li0/8Aaf8AjrqGua/4v1jX9Bk0zxv4R+Hl/rKXvhvwDNHdahI2iRajdWQ8VanaLp3h+/S78T2eja\ +/pEV54YtIrX+en/giT+wYv7cf7U4/aB+LHgm18V/sp/s+3XiO0sbPxD4flvvBfxE+IUNv4dOgeFL24b\ +V7a38S2s2qXMXiadIP7d0xtH8FaVpniDSrG38WW76n/AHv1/WvgZwL9VoS4ozGl+9k5Qw8ZR+3ZKdVX\ +jdqknKjBqSXtZYlSg/ZUKh/S3AHDn+rHD0cxxNKKz3iujTqKW88Llknz0qNm/wB3Vx8owxVX3Ob6pDB\ +KnV5MTiaTKKKK/pM+qCiiigAooooA8i/aB/5IL8bf+yRfEn/1Ddar8d/+C53/AAUN1T9lz4P6b+zn8G\ +fEmt6B+0T+0Bok9+PGPg7xNpGk698G/hLpfijQdL17XZzD5+reHvFHjMS6/wCF/COo20WlSWpsPFXiX\ +SPEVlrfgu1sr/8AXn9pfUrfRv2cf2gNYvI9QmtNJ+CXxV1K6h0nSdU17VJbex8Ca9dTx6boeh2dxe6z\ +qDRRMIbSzt57q4kKw28Mszojf5wX7Q37Xmt/tdftE+Pvjp8YPGsMfjjxr4k1DT/CXgPxJ4gj/tL4beA\ +n1vUrn4dfCDw9pWraPo1xDonh7SNZfTrOSPQtHl129vdW8WXtk2r+KdSuJ/yLxd4xr8K5DWw+W+0Wc5\ +1D2VCVOLbpU4t+3rNpPlcIzjGD3U5qUfhbX5j4kcRVcpwccqwVWdDMc8hyqrDR0cNTlbE1IzuuSrKNW\ +FGi43qRnV9tCLVCbjwGl6bbaTZQWNpFBDDAqokdtBHbW8aIqxxQW9vHxBaRQJFDBGCRFBbxxAkIDWhU\ +LySiQRpbsy7UczvJGkABlVJIxhmkMwiLOB5exsBTIpOQyS3FxDHHcPJuXazvazXVlukClWKm3uA6xks\ +xCF2A4ySQDX8LO7fNKV3J3b3eu7339WfhEUoQVOlCyppKKd4xSWiSdnpbayasvQnDoXaMOpkVUdkDAu\ +qSF1R2XOQrNHIAehMbY6GrGkatq+ja3Y6xpyx2tzo2pWl7YXTXM2Z/Jj8yeOeC18tzYzbntLiETxtPb\ +XFwhdFYB66oil2VFVpGDyFVAMjhEjDuQPmby40XJ5wgHQCnVElGUZRlHmjJWd/Pfb+vmerk+bZpkGbZ\ +ZnuT42WXZtk+Ip4nD1qag3CrRnz0241IzjJKSTlGUXGdnGSlByi/0B+HvxQ0Dx+ptbUXFhr1lptpe6n\ +pV2wHlvJNcWlyNPm+QataRSpA7zxxhUj1WzE6w3MjW0PpwAAAAAAAAAGAAOAAB0GK/LBSySwTxvJFcW\ +s8V1aXMMjw3NpdQNvgu7S4iYPa3UbgNHJGyujAMrAgGvZvDPx48deH47e01E2PizTrfK7dWM1nrjQra\ +rb29sniC1Dq6RyRxytLdWV5dzs0oluSZFki8DE5VUi3LDv2kf5W7Nfo/wAD/Sjwy+lzwXn2EwuX8fyf\ +CWf6RliPZ1KuW15ylZck6UalbCXbS5cTCVGlCPPVxz95r7qqNjk7cen19Tj0r491z9o/xLPc2r+GdG0\ +fTrMadai/g8RWd1qdyNZMlwb4WF3pWv2yzaOIjaCCSWGG4kZZWkghBRK6rwd+0P8A2vrWl6N4l0jw74\ +et5rS4l1LxJdeL7fTbGNrO0y09tpur2EefO1B7WNLVL64niS7Mm6eO3mlHFPA4qFP2kqVorzV18r39O\ +/Q/f8h8WfDXifiSPCHDnGOEz7iSacoYbCqvVVRRoPEz9hiVR+qYl06MZ1KscNiK0qShUVVQlTmo/TlN\ +AYFskEZyp6MM5ypAGCB2PocEZGT53P8AFz4aWtnNe3XjfwvFHDLJG0MGv6Rqd46LdG2inhs9HvbiSaK\ +QbJVCqXSKUNMkTLIqE/xe+GMGnjUj448PXELRQTLbWF/HqWrMlwYwgXQtP829aVfNUyoLffCqu0qosb\ +ledQm9oN302e/l5n385Kn7R1b0HQo/WJqonTlToa/vakZqMqdNcsrzmopOMk2nFpejUf5/PrXzl4j/A\ +GkvC2nvFB4Z0jV/FU0qiQ3Lw3Hh3S4FG9JIp7jV7MXIuVkNudqWbxvFOzRyvJFLCvkXib48eOvEEdxa\ +acbHwnp1xhdukma81xYWtWt7i2fxBdBFRJJJJJVltbKzu4GWIRXIMbSS9VLL8VVs1ScIvrLT8Hr+B+U\ +cV+OfhRwbHFRznjPCVcbhdHhcHJ47FOo4uapeywqqKlNxT1xM6FKLcY1KsHOCl9R+P/if4d8AW5ivZG\ +vtfuLN7rS/D9r5v2i7Hm/Z4pb27SB49HsDMJf38+DItncC1iup4TAfkz4m6rqGu6b8LtZ1W4a5v9T8C\ +65e3Llp2jja4+MPxVkS1tVuZ5HhsII2SG2iaR/JggjiDMEBrylizyzzyPJLcXU8t1d3M0jzXN3dTtvn\ +u7u4lYvdXUjktJJIzO7EszEkmvRvG/8AyLPwe/7Jzqf/AKtz4pV9Zk+ChhMNm0r89WWHim+lvrWG0S/\ +zP88/HL6QGYeLvLk2X5e8m4NyypHEUaNXknisRiY/uoYnEzjzRp8lOrVjSw9GThD21R1auIfspUvOay\ +rb4f8AxI+Pnj3wd+zT8FvCOsePPil8YLr+x7Dw/oSWk1xHoLSr/bcmotdTJFpGnz6RFrAm1C8msbHTt\ +O0zVtXuNRtY9JkJbr+t2XhzRtS1zUPMNrptrJcNDB5RuruUYS20+xjnljWfUbm5eGC2iLqZp7iOJTuc\ +V/VV/wAG7X/BPe78B+C/Ff7d3x5+Hkdj8WfjDqP/ABYQeKdE2av4N+E9zoi2lx488LyS6tiCPxLpF9Y\ +6PZ3txoml6pLoXgx9Qs7mfRvGM/2n9B8N+D8TxdxDhMNFOGEoy56lRK6hGFpSnqpL3VZQ5oyhKvOhTq\ +R9nUlKP5h4ccK0eIs2rY3M6PteH8gjCviotuKxM5z5cPgYzTi1PEzUp1FGcakcHQxdanedKMX+8/7HX\ +7KXw1/Yu/Z7+H/wD+GWlaPbWnhfR7GXxh4l0zSJdHu/iT8RZ9MsLbxj8Stfgu9V1C4/tjVtRshIsM9/\ +erptlDZ6PZzLpunWUEP09RRX9/YTCYbAYXD4LB0VQwuFhGnThHaMIqyWt29Fq2229W222f0HicTWxde\ +ricRPnrVpOUmlGKu+kYxSjCKWkYQjGEIpRjFRSSKKKK6DAKKKKACiiigDjfiN4Mg+I/w98d/Dy51vW/\ +DNt488G+KPBlx4k8MjRD4k8PweKNEvtDl1vw+PEui6lpx1u0jvmntP7Q06/svPt4/tVldQeZBJ/P38T\ +f8Ag3S+Ems2OnaZ8J/2lPiF4Z02W11Wx8Waf8Y/h74H+MNjrNjdQ2dvp1no1p4Kk8BR6JapB/ayXsd4\ +urpepd26wixW3mF7/RtRXy3E3BXC/GEMPDiTKIZn9T5vZSc6tOdLmlCUvZ1KNSnUg5OnDmcZJtR5XeL\ +aeNXCZfiVOONynBZlzKKTxeCwmLlTUW5fuZYmjVlQ5m/3nsXD2qUVU5lCKX8VXjn/AINt/wBo7w+viy\ +88Bn9mfxBp+hnXbrw03gXxl4++DfxN8e6Vpou5dH0z7FpfgC007Qdd1SCGz/4lN/4wl0S11CaFLrXHg\ +tV1Rfg34lf8Elv25vhK2jLq3wB/ah0a018ag1lZ/DWPw5+0yrXGlmyF9c6zf+Co/H974RLR6hYJbw6h\ +dada3f2eZ9Ogmlg1KRP9EeivzLMvo/8ACmKjJ5fm+ZZZPpF4iGKoayTblSxVOq5NRvGLVSLi2pPms0/\ +nsVwFwBjU4S4YeVKfxVcvx2Oo1+a6k5U1jK+YYOnzNcsorBSpqnKUaUKUuSpT/wAujxp8PPjD8L/EOp\ +eFfiDcaB4Y8a6H9j/tf4cfETwD4x+Dfiyx/tOxtdSsP7Yg8T6/qF/4c83SdQsr+38/RJvtltcQNF5cN\ +1HdphSnx/YMIb/4eXOqTMBKtx4N8T+G9T0xI2JQQzz+MLzw/cpfhkdmSOzlgEckTLcvI0sUP+ppXwt8\ +QP8AgmV+wD8SdGttD1v9k34NeH7S01OHVo734V+F4/gj4hluILW9s0tbzxX8GZtB1TUNGaO/leTT57y\ +Swlnht7mW2e4tLWWH4bMvo65xBTnlXEuCzGbc+WOLwdXCcsbr2cHUwVaUZuzlzVPYRd0rRcWow+exfh\ +Lw3W5pZdxDmOU8jk1HEUMLmftE7cqdSlLKHQ9mk+aSp4j2zndRo8n7z/Olk8X2NpvGq6P4x0U224alN\ +qfgjxZHpWkmHIvJNQ8TW2jy6UmnwFZDLfR30mniOJrhbt7bEx0NG8TeHPEX2n/hH/EGia79j8n7X/Y2\ +q2Gp/ZftHm/Z/tP2K4fyN/kTbN2N3kttztOP7jPiB/wQY/Yd8Xazbal4S1L47/BzTYNMhsZ/DHw/+JW\ +n+ItGv76K6vbiTXrm9+NvhLxfqsWpywXNtbvFb6lBp6xaXC8VjFcvd3Fz+dHxO/4NsvE+r+HJ73Rv2h\ +/hB8VfF2leV/wjfhv4nfAPUPBfhyb7df6fFrHn+NrX4g+Mbrw5t0yKW4XyPD999sn063tJfsscpvbX4\ +TMvBPxAwDlyZDDM6cVNyq4PHUJpKCT92hio4StPn1jCMW56O6b5VP5zF+EOe03KWXZ/lmZxmpeypTli\ +8HiZNJclOr7bCywNGdST5VJ5hLDw+KriKcE5L+aWiv1z+JH/AAb3/tmeBH0j/hF/ht4L+Jlvqv2/ztM\ +/Z+/aI1jwXofhL7CLHy/7T0D4laj8PrKz+3veXEkP9i29/wCZNYXs2o/ZZZYHvfgnxz+wN+2h8L18WX\ +PiH4VftMaNbeBTrv8AwmfiLx1+zzrnij4ZaBpXhgXcniLxB/wnfw78JaPpFxoVrHp88/8Ab0HiC80B9\ +PimvI5bi1kgvYvhcx4T4hymTWZZDmOWxhvOvga6pP3VJ8lWgsRTnyp+/wC8uXbVqSj87ivDjj/CNxfC\ +eJzCUfi/s6eHzbkXKpc1T+y62LdOGtueajFyvG/MnFeBUVhQ6b8QCzxaXefDbxoqBJJr+HWNb8GtatK\ +XVLN9It9O8SCYYhZ1uTfQ+Z5rRC1TyPOnhk1fxFaIbjVfhx4502wjx597HF4X8RPDvISLGj+DfFOpal\ +ebpmjT/RrKbyxJ5s3lwJLNH89GNOp/CxNKrf4UqsIylfZRpzcark9lHk5m7JK7R8Zi41MvxVXA5jQqZ\ +bjqPLz0MRTnQrQ54qcOanVjCceaEozjdaxlGS0aZ0dR+dH53kFsS+X5wQhhujDbGZGIxJtYqHCklPMT\ +cBvTdyUvj7wpZ7f7Z1Kbwt5mfs3/AAm2lax4G+37Med/Zn/CYWFj/anlbovO+z+b5H2iLztnnRb+ot5\ +rO/t7S+tZra9tZ4oryxvLeSK5t5obiEmG6tLiMsskUlvMSsiEhkl4JVuanQrUkpVaM6cZbOUWk35NrU\ +hSU0nTkpK/rp12e5Zr0bxv/wAiz8Hv+yc6n/6tz4pV5zW/8WZ/E19oX7P/AIH8AaNrHiX4l/EbwheeD\ +vAHh7w7pr65r974h1b4ufFGzsbjTvD9tbTz63Ol/c2MNvbQ2832vUNSsLBvK+2CVPRyrD1cWsww1FXq\ +VqMUr6Jf7Vhm230SV230SbPRy/CYrH11gcDh54vG4106VGlTi5TqValalCEIRWspTk1GKW7aPon/AIJ\ +w/sY61/wUP/bR8C+Abzwtq2q/s3/A/wASW3jH9obxPHbTSeGpbW0s7iay8FXGt6Z4h0q506/1yS21jw\ +vbjT9Qk1WGXWta1ZNLkg8K3Mw/0WtA0DQvCuhaL4X8L6LpPhvwz4b0nTtA8O+HdA06z0fQtB0LR7OHT\ +tI0XRdI06GO30vSbXT7e3gtraCOOGCGBIokVFVR+cv/AASh/YL8L/sCfsi/D74eP4V0fSfjR4t0DRfF\ +Hx68QQW1s+val4zuILm7sPBep6zbeJNXi1LSvCWm6odBsjYX50m5l0++1y0tbe51y/ab9MK/urwx4Np\ +cJcO4eNWly5nj4xqVuZWnTi1zQoyT1Uo80p1Y3ly1pzhGcqVOly/1ZgMowvDOVYbhrA1IV6eAlKeJr0\ +2pQxeOkowr4iE03zUEoRoYT4Y/V6cK3s6davX5iiiiv0g2CiiigAooooAKKKKACiiigAooooAKKKKAC\ +iiigAooooA8n+KHwF+Bnxv/ALD/AOF0fBf4T/F7/hGP7T/4Rr/haHw68H+P/wDhHv7a/s/+2f7D/wCE\ +r0e7/sn7X/ZOlfafs/l+f/Zlv5u/yY9vxr4x/wCCRP8AwTp8ceI9R8Uar+zVoujX+qfZPP034f8Ajv4\ +r/CvwjbfYrC106L+yPAXwx8eaRoeg74bSOS4+w6db/arqWa9ufNvLi4nl/SKivFzHhvh3OG5ZtkOCzS\ +UpKTeJwtCu3KMeSMm6tOXvRh7qe6j7q00PQhm2a08NTwVPM8RDB0W3Ckq1RUoNuTbjTUuSLblJtpJty\ +k92z+eb4gf8G8nwXvdGtovhJ+0n8ZfCfiRdThkvdR+Knh/4e/FTw9Nogtb1bmys/D3grRPA11Z6y1++\ +myR3smrXFvHBbXED6dNJcRXNp8D/ABN/4NpfitB4iab4aeOf2XviDZajZnUtT8aeNvDHjD4HeN7XxRd\ +31+17/Z1v4P8ADPjaZpEiFhdw60mvWd+bu9lVbO3a0ivLv+xGivgsX4J+HGJcqmHyOWVV58qc8HisVQ\ +do9OSNZ0ter9nzPe99T5/FZFwrmDccw4OymvRdrwo4Gll2sfhftcpWAxCt1iqyjL7cZaH+fl8UP+CKv\ +7eXwmtfE2rQ/Bj4w3XhvwxqcunXviH4T/ETwZ8d38X2/wDbMWiaVrnhLwFrur+IfGV3o081ylxELbwx\ +pt/DY3zXevWFnHZTfYP0o/4Iif8ABNj4hXv7QHij9pX9rn4J+MNA079mrRvD3wv/AGaLL44/DPWPBPi\ +bxX4vvNW1L4t3/wAXH8Oa3NpQlvPCWp+Pdd0zSL5vCy6XcXPiC2u9NvF8R+Ebm7H9ctFcnD/gvkHDue\ +Us3w+a4zMKFOOuHxbw9XnmqkatOU68aFOtKFKUKcoU5Sl71OPNOUPcObKeGeGuH8zjneRZbUyzM4U6l\ +GCWKq18LTp1YyjOrTpYr2+IjjOWTpxrvGSpU6Tbp4WGJUcVEooor9iPZCiiigAooooAKKKKACiiigAo\ +oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q==' + $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 35/37] 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 36/37] 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 37/37] 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