From c78ec62ed703a60e237bb67b06795d468f2ad3d3 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Tue, 25 Jan 2022 15:55:20 +0100 Subject: [PATCH 1/6] Fixed symbol in example title (#776) --- examples/02-HFSS/Flex_CPWG.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/02-HFSS/Flex_CPWG.py b/examples/02-HFSS/Flex_CPWG.py index af76aedac23..93a7bc1d170 100644 --- a/examples/02-HFSS/Flex_CPWG.py +++ b/examples/02-HFSS/Flex_CPWG.py @@ -1,6 +1,6 @@ """ Flex Coplanar Waveguide Example ---------------------/---------- +------------------------------- This example shows how you can use PyAEDT to create a flex cable coplanar waveguide. """ From e188c45b0e777430b40c861887402084e42e3c24 Mon Sep 17 00:00:00 2001 From: svandenb-dev <74993647+svandenb-dev@users.noreply.github.com> Date: Wed, 26 Jan 2022 11:36:26 +0100 Subject: [PATCH 2/6] New edb lib dll added (#778) * old dll removed * new dll added --- pyaedt/dlls/EDBLib/EdbLib.dll | Bin 95232 -> 90112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pyaedt/dlls/EDBLib/EdbLib.dll b/pyaedt/dlls/EDBLib/EdbLib.dll index 4432de5fd79ab273726a147a3b10f11192c47331..e91f18c415d7aa8cd47c0cb339bfd5a45a261da4 100644 GIT binary patch literal 90112 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 z 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 YR)oKPhtZO+^IyG=)Em0?|J#56AGsS2F#rGn From c0329e48fefa06203bc08f5be9077bcb90f76ce5 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Wed, 26 Jan 2022 14:19:49 +0100 Subject: [PATCH 3/6] Now bounding box is computed using obj file. (#777) * Now bounding box is computed using obj file. * Fixed Black * Fixed minor issues on solution type between cpthon and ironpython * Black Fix * Black Fix * Ironpython fix --- _unittest/test_28_Maxwell3D.py | 16 +++++++--------- pyaedt/application/Analysis.py | 9 +++++++++ pyaedt/application/Design.py | 24 ++---------------------- pyaedt/application/design_solutions.py | 9 ++++++++- pyaedt/generic/filesystem.py | 2 +- pyaedt/modeler/Object3d.py | 23 +++++++++++++++++++++++ pyaedt/modules/PostProcessor.py | 2 +- pyaedt/modules/SetupTemplates.py | 2 +- 8 files changed, 52 insertions(+), 35 deletions(-) diff --git a/_unittest/test_28_Maxwell3D.py b/_unittest/test_28_Maxwell3D.py index 692ecacb832..eda5cca58b5 100644 --- a/_unittest/test_28_Maxwell3D.py +++ b/_unittest/test_28_Maxwell3D.py @@ -21,6 +21,9 @@ def setup_class(self): # set a scratch directory and the environment / test data with Scratch(scratch_path) as self.local_scratch: self.aedtapp = Maxwell3d(solution_type="EddyCurrent") + core_loss_file = "PlanarTransformer.aedt" + example_project = os.path.join(local_path, "example_models", core_loss_file) + self.file_path = self.local_scratch.copyfile(example_project) def teardown_class(self): self.aedtapp._desktop.ClearMessages("", "", 3) @@ -225,18 +228,13 @@ def test_30_assign_movement(self): assert bound.props["Velocity"] == "1m_per_sec" def test_31_core_losses(self): - core_loss_file = "PlanarTransformer.aedt" - example_project = os.path.join(local_path, "example_models", core_loss_file) - file_path = self.local_scratch.copyfile(example_project) - m3d1 = Maxwell3d(file_path) + + m3d1 = Maxwell3d(self.file_path) assert m3d1.set_core_losses(["PQ_Core_Bottom", "PQ_Core_Top"]) assert m3d1.set_core_losses(["PQ_Core_Bottom"], False) - self.aedtapp.close_project(m3d1.project_name) + self.aedtapp.close_project(m3d1.project_name, False) def test_32_matrix(self): - core_loss_file = "PlanarTransformer.aedt" - example_project = os.path.join(local_path, "example_models", core_loss_file) - file_path = self.local_scratch.copyfile(example_project) - m3d1 = Maxwell3d(file_path) + m3d1 = Maxwell3d(self.file_path) assert m3d1.assign_matrix("pri", "mymatrix") == "mymatrix" self.aedtapp.close_project(m3d1.project_name, False) diff --git a/pyaedt/application/Analysis.py b/pyaedt/application/Analysis.py index dcf5def9e63..9293d512b7d 100644 --- a/pyaedt/application/Analysis.py +++ b/pyaedt/application/Analysis.py @@ -1119,6 +1119,15 @@ def create_setup(self, setupname="MySetupAuto", setuptype=None, props={}): setuptype = self.design_solutions.default_setup name = self.generate_unique_setup_name(setupname) setup = Setup(self, setuptype, name) + if self.design_type == "HFSS" and not self.get_excitations_name() and "MaxDeltaS" in setup.props: + new_dict = OrderedDict() + for k, v in setup.props.items(): + if k == "MaxDeltaS": + new_dict["MaxDeltaE"] = 0.01 + else: + new_dict[k] = v + + setup.props = new_dict setup.create() if props: for el in props: diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index 431e0b295e0..7ccd995bb39 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -35,29 +35,12 @@ from pyaedt.generic.DataHandlers import variation_string_to_dict from pyaedt.modules.Boundary import BoundaryObject from pyaedt.generic.general_methods import generate_unique_name - +from pyaedt.application.design_solutions import model_names, solutions_defaults if sys.version_info.major > 2: import base64 -model_names = { - "Maxwell 2D": "Maxwell2DModel", - "Maxwell 3D": "Maxwell3DModel", - "Twin Builder": "SimplorerCircuit", - "Circuit Design": "NexximCircuit", - "2D Extractor": "2DExtractorModel", - "Q3D Extractor": "Q3DModel", - "HFSS": "HFSSModel", - "Mechanical": "MechanicalModel", - "Icepak": "IcepakModel", - "RMxprtSolution": "RMxprtDesign", - "ModelCreation": "RMxprtDesign", - "HFSS 3D Layout Design": "PlanarEMCircuit", - "EMIT Design": "EMIT Design", -} - - def list_difference(list1, list2): return list(set(list1) - set(list2)) @@ -898,10 +881,7 @@ def default_solution_type(self): Default for the solution type. """ - if self.design_solutions._solution_options[self.design_solutions.solution_types[0]]["name"]: - return self.design_solutions._solution_options[self.design_solutions.solution_types[0]]["name"] - else: - return self.design_solutions.solution_types[0] + return solutions_defaults[self._design_type] @property def odesign(self): diff --git a/pyaedt/application/design_solutions.py b/pyaedt/application/design_solutions.py index 664bf933b0b..7f800faf37d 100644 --- a/pyaedt/application/design_solutions.py +++ b/pyaedt/application/design_solutions.py @@ -285,13 +285,20 @@ "default_setup": 1, "default_adaptive": "LastAdaptive", }, - "Transient": { + "Transient Network": { "name": "Transient Network", "options": None, "report_type": "Terminal Solution Data", "default_setup": 3, "default_adaptive": "Transient", }, + "Transient": { + "name": "Transient", + "options": None, + "report_type": "Terminal Solution Data", + "default_setup": 3, + "default_adaptive": "Transient", + }, "Eigenmode": { "name": None, "options": None, diff --git a/pyaedt/generic/filesystem.py b/pyaedt/generic/filesystem.py index 94adde234a8..f3aa7875c9c 100644 --- a/pyaedt/generic/filesystem.py +++ b/pyaedt/generic/filesystem.py @@ -91,7 +91,7 @@ def copyfile(self, src_file, dst_filename=None): dst_file = os.path.join(self.path, dst_filename) else: dst_file = os.path.join(self.path, os.path.basename(src_file)) - shutil.copyfile(src_file, dst_file) + shutil.copy2(src_file, dst_file) return dst_file def copyfolder(self, src_folder, destfolder): diff --git a/pyaedt/modeler/Object3d.py b/pyaedt/modeler/Object3d.py index 448de733d98..8b5e3037b9d 100644 --- a/pyaedt/modeler/Object3d.py +++ b/pyaedt/modeler/Object3d.py @@ -746,6 +746,29 @@ def bounding_box(self): >>> oEditor.GetModelBoundingBox """ + if self._primitives._app._aedt_version >= "2021.2": + model_obj = self._primitives._app.post.export_model_obj( + obj_list=[self.name], export_path=None, export_as_single_objects=True, air_objects=True + ) + if model_obj: + x = [] + y = [] + z = [] + with open(model_obj[0][0], "r") as f: + lines = f.read().splitlines() + for line in lines: + l = line.split(" ") + if l[0] and l[0] == "v" and len(l) > 3: + x.append(float(l[1])) + y.append(float(l[2])) + z.append(float(l[3])) + bounds = [min(x), min(y), min(z), max(x), max(y), max(z)] + if os.path.exists(model_obj[0][0]): + try: + os.remove(model_obj[0][0]) + except: + pass + return bounds objs_to_unmodel = [ val.name for i, val in self._primitives.objects.items() if val.model and val.name != self.name ] diff --git a/pyaedt/modules/PostProcessor.py b/pyaedt/modules/PostProcessor.py index 95721909038..51f62b95dc5 100644 --- a/pyaedt/modules/PostProcessor.py +++ b/pyaedt/modules/PostProcessor.py @@ -2726,7 +2726,7 @@ def export_model_obj(self, obj_list=None, export_path=None, export_as_single_obj else: fname = os.path.join(export_path, "Model_AllObjs_AllMats.obj") self._app.modeler.oeditor.ExportModelMeshToFile(fname, obj_list) - return [fname, "grey", 0.6] + return [[fname, "grey", 0.6]] @aedt_exception_handler def export_mesh_obj(self, setup_name=None, intrinsic_dict={}): diff --git a/pyaedt/modules/SetupTemplates.py b/pyaedt/modules/SetupTemplates.py index 8e2e60ff484..79ee9e95751 100644 --- a/pyaedt/modules/SetupTemplates.py +++ b/pyaedt/modules/SetupTemplates.py @@ -12,7 +12,7 @@ transientelectrostatic = [("SaveField", True), ("Stop", "100s"), ("InitialStep", "0.01s"), ("MaxStep", "5s")] transienthfss = [ ("TimeProfile", "Broadband Pulse"), - ("HfssFrequency", "1GHz"), + ("HfssFrequency", "5GHz"), ("MinFreq", "100MHz"), ("MaxFreq", "1GHz"), ("NumFreqsExtracted", 401), From 53022add2c2fbeb0d95bfedd94e961d4b33718d8 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Wed, 26 Jan 2022 20:53:50 +0100 Subject: [PATCH 4/6] Now EdbLib is launched on demand. (#780) * Now EdbLib is launched on demand. * Now EdbLib is launched on demand. * Now EdbLib is launched on demand. * Added DataModel Load for Linux Support * Added DataModel Load for Linux Support * Update doc/source/Resources/User_Guide.rst Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> * Fixed Hfss Default Solution Type * Fixed Hfss Default Solution Type * Fixed Hfss Default Solution Type Co-authored-by: Maxime Rey <87315832+MaxJPRey@users.noreply.github.com> --- doc/source/API/ClientServer.rst | 2 +- doc/source/Resources/User_Guide.rst | 34 +++++++++++++++++++- pyaedt/application/Design.py | 7 +++- pyaedt/application/design_solutions.py | 6 ++-- pyaedt/edb.py | 44 ++++++++++++-------------- 5 files changed, 63 insertions(+), 30 deletions(-) diff --git a/doc/source/API/ClientServer.rst b/doc/source/API/ClientServer.rst index 36539ebae2c..636acbd1904 100644 --- a/doc/source/API/ClientServer.rst +++ b/doc/source/API/ClientServer.rst @@ -149,6 +149,6 @@ To bypass current IronPython limits, you can launch PyAEDT on a Linux machine: faces = client.convert_remote_object(box1.faces) -.. image:: Resources/IronPython2Cpython.png +.. image:: /Resources/IronPython2Cpython.png :width: 800 :alt: Electronics Desktop Launched \ No newline at end of file diff --git a/doc/source/Resources/User_Guide.rst b/doc/source/Resources/User_Guide.rst index 97673b6f018..99c7aecec86 100644 --- a/doc/source/Resources/User_Guide.rst +++ b/doc/source/Resources/User_Guide.rst @@ -283,4 +283,36 @@ As an alternative, the user can upload the script to run to the server and run i remote_script ="path/to/my/remote/pyaedt/script.py" upload(local_script, remote_script, "servername") ansysem = "/path/to/AnsysEMxxx/Linux64" - my_client.root.run_script(remote_script, ansysem_path=ansysem) \ No newline at end of file + my_client.root.run_script(remote_script, ansysem_path=ansysem) + + +CPython on Linux with Client-Server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To bypass current IronPython limits, you can launch PyAEDT on a Linux machine: + +1. Using pip, install PyAEDT 0.4.23 or later on a Linux machine. +2. Launche CPython and run PyAEDT. + +.. code:: python + + # Launch the latest installed version of PyAEDT in non-graphical mode. + + from pyaedt.common_rpc import launch_ironpython_server + client = launch_ironpython_server(ansysem_path="/path/to/ansys/executable/folder", non_graphical=True, port=18000) + hfss = client.root.hfss() + # put your code here + +3. If the method returns a list or dictionary, use the following method to work around an + issue with CPython handling: + +.. code:: python + + box1 = hfss.modeler.create_box([0,0,0],[1,1,1]) + # convert_remote_object method convert remote ironpython list to local cpython. + faces = client.convert_remote_object(box1.faces) + + +.. image:: ./IronPython2Cpython.png + :width: 800 + :alt: Electronics Desktop Launched \ No newline at end of file diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index 7ccd995bb39..3968d3014ae 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -2543,7 +2543,12 @@ def _insert_design(self, design_type, design_name=None, solution_type=None): "RMxprt", unique_design_name, "Model Creation Inner-Rotor Induction Machine", "" ) else: - new_design = self._oproject.InsertDesign(design_type, unique_design_name, self.default_solution_type, "") + if design_type == "HFSS" and self._aedt_version < "2021.2": + new_design = self._oproject.InsertDesign(design_type, unique_design_name, "DrivenModal", "") + else: + new_design = self._oproject.InsertDesign( + design_type, unique_design_name, self.default_solution_type, "" + ) logging.getLogger().info("Added design '%s' of type %s.", unique_design_name, design_type) name = new_design.GetName() if ";" in name: diff --git a/pyaedt/application/design_solutions.py b/pyaedt/application/design_solutions.py index 7f800faf37d..926b6a8d192 100644 --- a/pyaedt/application/design_solutions.py +++ b/pyaedt/application/design_solutions.py @@ -8,7 +8,7 @@ "Circuit Design": "NexximLNA", "2D Extractor": "Open", "Q3D Extractor": "Q3D Extractor", - "HFSS": "Modal", + "HFSS": "HFSS Modal Network", "Icepak": "SteadyState", "RMxprtSolution": "GRM", "ModelCreation": "GRM", @@ -258,14 +258,14 @@ }, "HFSS": { "Modal": { - "name": "DrivenModal", + "name": "HFSS Modal Network", "options": None, "report_type": "Modal Solution Data", "default_setup": 1, "default_adaptive": "LastAdaptive", }, "Terminal": { - "name": "DrivenTerminal", + "name": "HFSS Hybrid Terminal Network", "options": None, "report_type": "Terminal Solution Data", "default_setup": 1, diff --git a/pyaedt/edb.py b/pyaedt/edb.py index fb93fd65e0c..f25fded510b 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -190,10 +190,9 @@ def _clean_variables(self): self._db = None self._edb = None self.builder = None - self.edblib = None + self._edblib = None self.edbutils = None self.simSetup = None - self.layout_methods = None self.simsetupdata = None # time.sleep(2) # gc.collect() @@ -257,7 +256,6 @@ def _init_dlls(self): clr.AddReferenceToFile("Ansys.Ansoft.Edb.dll") clr.AddReferenceToFile("Ansys.Ansoft.EdbBuilderUtils.dll") clr.AddReferenceToFile("EdbLib.dll") - clr.AddReferenceToFile("DataModel.dll") clr.AddReferenceToFileAndPath(os.path.join(self.base_path, "Ansys.Ansoft.SimSetupData.dll")) else: if self.student_version: @@ -268,22 +266,37 @@ def _init_dlls(self): clr.AddReference("Ansys.Ansoft.Edb") clr.AddReference("Ansys.Ansoft.EdbBuilderUtils") clr.AddReference("EdbLib") - clr.AddReference("DataModel") clr.AddReference("Ansys.Ansoft.SimSetupData") os.environ["ECAD_TRANSLATORS_INSTALL_DIR"] = self.base_path oaDirectory = os.path.join(self.base_path, "common", "oa") os.environ["ANSYS_OADIR"] = oaDirectory os.environ["PATH"] = "{};{}".format(os.environ["PATH"], self.base_path) edb = __import__("Ansys.Ansoft.Edb") - self.edb = edb.Ansoft.Edb edbbuilder = __import__("Ansys.Ansoft.EdbBuilderUtils") - self.edblib = __import__("EdbLib") + self._edblib = None self.edbutils = edbbuilder.Ansoft.EdbBuilderUtils self.simSetup = __import__("Ansys.Ansoft.SimSetupData") - self.layout_methods = self.edblib.Layout.LayoutMethods self.simsetupdata = self.simSetup.Ansoft.SimSetupData.Data + @property + def edblib(self): + """EdbLib object containing advanced Edb methods not accessible directly from python.""" + if not self._edblib: + if os.name == "posix": + clr.AddReferenceToFile("EdbLib.dll") + clr.AddReferenceToFile("DataModel.dll") + else: + clr.AddReference("EdbLib") + clr.AddReference("DataModel") + self._edblib = __import__("EdbLib") + dllpath = os.path.join(os.path.abspath(os.path.dirname(__file__)), "dlls", "EDBLib") + try: + self._edblib.Layout.LayoutMethods.LoadDataModel(dllpath, self.edbversion) + except: + pass + return self._edblib + @aedt_exception_handler def open_edb(self, init_dlls=False): """Open EDB. @@ -329,10 +342,6 @@ def open_edb(self, init_dlls=False): if self._db and self._active_cell: dllpath = os.path.join(os.path.abspath(os.path.dirname(__file__)), "dlls", "EDBLib") self.logger.info(dllpath) - try: - self.layout_methods.LoadDataModel(dllpath, self.edbversion) - except: - pass self.builder = EdbBuilder(self.edbutils, self._db, self._active_cell) self._init_objects() self.logger.info("Builder Initialized") @@ -376,10 +385,6 @@ def open_edb_inside_aedt(self, init_dlls=False): self._active_cell = list(self._db.TopCircuitCells)[0] dllpath = os.path.join(os.path.abspath(os.path.dirname(__file__)), "dlls", "EDBLib") if self._db and self._active_cell: - try: - self.layout_methods.LoadDataModel(dllpath, self.edbversion) - except: - pass if not os.path.exists(self.edbpath): os.makedirs(self.edbpath) time.sleep(3) @@ -424,10 +429,6 @@ def create_edb(self, init_dlls=False): self._active_cell = self.edb.Cell.Cell.Create(self._db, self.edb.Cell.CellType.CircuitCell, self.cellname) dllpath = os.path.join(os.path.dirname(__file__), "dlls", "EDBLib") if self._db and self._active_cell: - try: - self.layout_methods.LoadDataModel(dllpath, self.edbversion) - except: - pass self.builder = EdbBuilder(self.edbutils, self._db, self._active_cell) self._init_objects() return self.builder @@ -521,7 +522,6 @@ def export_to_ipc2581(self, ipc_path=None, units="millimeter"): result = self.edblib.IPC8521.IPCExporter.ExportIPC2581FromLayout( self.active_layout, self.edbversion, ipc_path, units.lower() ) - # result = self.layout_methods.ExportIPC2581FromBuilder(self.builder, ipc_path, units.lower()) end = time.time() - start if result: self.logger.info("Export IPC 2581 completed in %s sec.", end) @@ -973,10 +973,6 @@ def create_cutout( self.edbpath = output_aedb_path self._active_cell = list(self._db.TopCircuitCells)[0] dllpath = os.path.join(os.path.dirname(__file__), "dlls", "EDBLib") - try: - self.layout_methods.LoadDataModel(dllpath, self.edbversion) - except: - pass self.builder = EdbBuilder(self.edbutils, self._db, self._active_cell) self._init_objects() else: From 85b4a58ab8d3c1e119a8ae000c70009bcd1ede3e Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Thu, 27 Jan 2022 13:06:24 +0100 Subject: [PATCH 5/6] Fixed Hfss Default Solution Type (#785) * Fixed Hfss Default Solution Type * Added bat file to Installation.rst --- doc/source/Resources/Installation.rst | 22 ++++++ doc/source/Resources/pyaedt_with_IDE.bat | 51 +++++++++++++ pyaedt/application/design_solutions.py | 89 ++++++++++++++++++++--- pyaedt/misc/aedtlib_personalib_install.py | 2 +- 4 files changed, 153 insertions(+), 11 deletions(-) create mode 100644 doc/source/Resources/pyaedt_with_IDE.bat diff --git a/doc/source/Resources/Installation.rst b/doc/source/Resources/Installation.rst index 754e2f80fa2..6d92cb81576 100644 --- a/doc/source/Resources/Installation.rst +++ b/doc/source/Resources/Installation.rst @@ -39,3 +39,25 @@ To use standalone IronPython, run this ``install`` command: .. code:: python ipy64 -X:Frames -m pip install pyaedt + + +Installing Pyaedt from Bat File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Ansys Electronics Desktop already includes a CPython 3.7 that could be used to run pyaedt. +User can download the following batch file and run in local machine. +The batch file works on Windows and executes the following steps: +1. Create a python virtual environment in your %APPDATA% folder. To do that it uses CPython in your latest version of AEDT installed in your machine. +2. Install Pyaedt. +3. Install Spyder. +4. Install Jupyter Lab. +5. Create a symbolic link from pyaedt installation to Ansys PersonalLib. In this way scripts can be run also within AEDT. +6. Update pyaedt +7. Run the tool you choose (Spyder, Jupyter or simple console). + +Steps from 1 to 5 are executed only first time. Step 6 is executed only running the command with +the following option: + pyaedt_with_IDE.bat -update + +With this approach users can have a complete IDE to write Pyaedt Scripts in Windows with a simple batch file. + +:download:`PyAEDT Environment with IDE ` diff --git a/doc/source/Resources/pyaedt_with_IDE.bat b/doc/source/Resources/pyaedt_with_IDE.bat new file mode 100644 index 00000000000..cf3a1e7815f --- /dev/null +++ b/doc/source/Resources/pyaedt_with_IDE.bat @@ -0,0 +1,51 @@ +@echo off +if "%ANSYSEM_ROOT221%" =="" ( + if "%ANSYSEM_ROOT212%" =="" ( + if "%ANSYSEM_ROOT211%" =="" ( + echo AEDT 21R1 or greater has to be installed + pause + EXIT /B + ) else ( + set aedt_path=%ANSYSEM_ROOT211% + set aedt_var=ANSYSEM_ROOT211 + echo Found AEDT Version 21R1 + ) + ) else ( + set aedt_path=%ANSYSEM_ROOT212% + set aedt_var=ANSYSEM_ROOT212 + echo Found AEDT Version 21R2 + ) +) else ( + set aedt_path=%ANSYSEM_ROOT221% + set aedt_var=ANSYSEM_ROOT221 + echo Found AEDT Version 22R1 +) + +set /p run=Python or Jupyter?(0=Spyder, 1=Jupyter, 2=Console) +setlocal enableDelayedExpansion +cd "%APPDATA%" +if not exist "%APPDATA%\pyaedt_env_ide\" ( + echo Installing Pyaedt + "%aedt_path%\commonfiles\CPython\3_7\winx64\Release\python\python.exe" -m venv "%APPDATA%\pyaedt_env_ide" + "%APPDATA%\pyaedt_env_ide\Scripts\python.exe" -m pip install --upgrade pip + "%APPDATA%\pyaedt_env_ide\Scripts\pip" install pyaedt + "%APPDATA%\pyaedt_env_ide\Scripts\pip" install jupyterlab + "%APPDATA%\pyaedt_env_ide\Scripts\pip" install spyder + "%APPDATA%\pyaedt_env_ide\Scripts\pip" install ipython -U + call "%APPDATA%\pyaedt_env_ide\Scripts\python" "%APPDATA%\pyaedt_env_ide\Lib\site-packages\pyaedt\misc\aedtlib_personalib_install.py" %aedt_var% +) +if [%1%]==[-update] ( + echo Updating Pyaedt + "%APPDATA%\pyaedt_env_ide\Scripts\pip" install pyaedt -U +) +if %run%==1 ( + echo Launching Jupyter Lab + "%APPDATA%\pyaedt_env_ide\Scripts\jupyter.exe" lab +) else ( if %run%==0 ( + echo Launching Spyder + "%APPDATA%\pyaedt_env_ide\Scripts\spyder.exe" + ) else ( + "%APPDATA%\pyaedt_env_ide\Scripts\ipython.exe" + ) +) + diff --git a/pyaedt/application/design_solutions.py b/pyaedt/application/design_solutions.py index 926b6a8d192..d65b004bb80 100644 --- a/pyaedt/application/design_solutions.py +++ b/pyaedt/application/design_solutions.py @@ -300,7 +300,7 @@ "default_adaptive": "Transient", }, "Eigenmode": { - "name": None, + "name": "Eigenmode", "options": None, "report_type": "EigenMode Parameters", "default_setup": 2, @@ -473,10 +473,6 @@ def solution_type(self): if self._odesign: try: self._solution_type = self._odesign.GetSolutionType() - if "Modal" in self._solution_type: - self._solution_type = "Modal" - elif "Terminal" in self._solution_type: - self._solution_type = "Terminal" except: self._solution_type = solutions_defaults[self._design_type] elif self._solution_type is None: @@ -490,10 +486,6 @@ def solution_type(self, value): if self._odesign: try: self._solution_type = self._odesign.GetSolutionType() - if "Modal" in self._solution_type: - self._solution_type = "Modal" - elif "Terminal" in self._solution_type: - self._solution_type = "Terminal" except: self._solution_type = solutions_defaults[self._design_type] else: @@ -542,10 +534,79 @@ def __init__(self, odesign, design_type, aedt_version): self._composite = None self._hybrid = None + @property + def solution_type(self): + """Get/Set the Solution Type of the active Design.""" + if self._odesign: + try: + self._solution_type = self._odesign.GetSolutionType() + if "Modal" in self._solution_type: + self._solution_type = "Modal" + elif "Terminal" in self._solution_type: + self._solution_type = "Terminal" + except: + self._solution_type = solutions_defaults[self._design_type] + elif self._solution_type is None: + self._solution_type = solutions_defaults[self._design_type] + return self._solution_type + + @solution_type.setter + @aedt_exception_handler + def solution_type(self, value): + if self._aedt_version < "2021.2": + if not value: + self._solution_type = "DrivenModal" + self._odesign.SetSolutionType(self._solution_type) + elif "Modal" in value: + self._solution_type = "DrivenModal" + self._odesign.SetSolutionType(self._solution_type) + elif "Terminal" in value: + self._solution_type = "DrivenTerminal" + self._odesign.SetSolutionType(self._solution_type) + else: + try: + self._odesign.SetSolutionType(self._solution_options[value]["name"]) + except: + self._odesign.SetSolutionType(self._solution_options[value]["name"], "") + elif value is None: + if self._odesign: + try: + self._solution_type = self._odesign.GetSolutionType() + if "Modal" in self._solution_type: + self._solution_type = "Modal" + elif "Terminal" in self._solution_type: + self._solution_type = "Terminal" + except: + self._solution_type = solutions_defaults[self._design_type] + else: + self._solution_type = solutions_defaults[self._design_type] + elif value and value in self._solution_options and self._solution_options[value]["name"]: + if value == "Transient": + value = "Transient Network" + self._solution_type = "Transient Network" + elif value == "DrivenModal": + value = "Modal" + self._solution_type = "Modal" + elif value == "DrivenTerminal": + value = "Terminal" + self._solution_type = "Terminal" + else: + self._solution_type = value + if self._solution_options[value]["options"]: + self._odesign.SetSolutionType( + self._solution_options[value]["name"], self._solution_options[value]["options"] + ) + else: + try: + self._odesign.SetSolutionType(self._solution_options[value]["name"]) + except: + self._odesign.SetSolutionType(self._solution_options[value]["name"], "") + @property def hybrid(self): """Get/Set Hfss hybrid mode for the active solution.""" - + if self._aedt_version < "2021.2": + return False if self._hybrid is None and self.solution_type is not None: self._hybrid = "Hybrid" in self._solution_options[self.solution_type]["name"] return self._hybrid @@ -553,6 +614,8 @@ def hybrid(self): @hybrid.setter @aedt_exception_handler def hybrid(self, value): + if self._aedt_version < "2021.2": + return if value and "Hybrid" not in self._solution_options[self.solution_type]["name"]: self._solution_options[self.solution_type]["name"] = self._solution_options[self.solution_type][ "name" @@ -567,6 +630,8 @@ def hybrid(self, value): @property def composite(self): """Get/Set Hfss composite mode for the active solution.""" + if self._aedt_version < "2021.2": + return False if self._composite is None and self.solution_type is not None: self._composite = "Composite" in self._solution_options[self.solution_type]["name"] return self._composite @@ -574,6 +639,8 @@ def composite(self): @composite.setter @aedt_exception_handler def composite(self, val): + if self._aedt_version < "2021.2": + return if val: self._solution_options[self.solution_type]["name"] = self._solution_options[self.solution_type][ "name" @@ -600,6 +667,8 @@ def set_auto_open(self, enable=True, boundary_type="Radiation"): ------- bool """ + if self._aedt_version < "2021.2": + return False options = ["NAME:Options", "EnableAutoOpen:=", enable] if enable: options.append("BoundaryType:=") diff --git a/pyaedt/misc/aedtlib_personalib_install.py b/pyaedt/misc/aedtlib_personalib_install.py index 2aaca2e82b2..1eda077df13 100644 --- a/pyaedt/misc/aedtlib_personalib_install.py +++ b/pyaedt/misc/aedtlib_personalib_install.py @@ -23,7 +23,7 @@ "..", ) -d = Desktop("2021.2", True) +d = Desktop(version, True) desktop = sys.modules["__main__"].oDesktop pers1 = os.path.join(desktop.GetPersonalLibDirectory(), "pyaedt") From 7c64c1c5d21d14028477f6a747de09b39fe660c2 Mon Sep 17 00:00:00 2001 From: Massimo Capodiferro <77293250+maxcapodi78@users.noreply.github.com> Date: Thu, 27 Jan 2022 13:06:33 +0100 Subject: [PATCH 6/6] Added check on MatAppearanceData before assigning it. (#786) * Added check on MatAppearanceData before assigning it. * Added check on MatAppearanceData before assigning it. --- pyaedt/modules/Material.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index 7bab0d54a14..5ab85ab8333 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -762,7 +762,7 @@ def __init__(self, materials, name, props=None): self.name = name self.coordinate_system = "" if props: - self._props = props + self._props = props.copy() else: self._props = OrderedDict() if "CoordinateSystemType" in self._props: @@ -891,7 +891,7 @@ def __init__(self, materiallib, name, props=None): else: self.physics_type = ["Electromagnetic", "Thermal", "Structural"] self._props["PhysicsTypes"] = OrderedDict({"set": ["Electromagnetic", "Thermal", "Structural"]}) - if "AttachedData" in self._props: + if "AttachedData" in self._props and "MatAppearanceData" in self._props["AttachedData"]: self._material_appearance = [] self._material_appearance.append(self._props["AttachedData"]["MatAppearanceData"]["Red"]) self._material_appearance.append(self._props["AttachedData"]["MatAppearanceData"]["Green"])