NaxToPy 2.2.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {naxtopy-2.2.0/src/NaxToPy.egg-info → naxtopy-2.2.1}/PKG-INFO +19 -4
- {naxtopy-2.2.0 → naxtopy-2.2.1}/README.md +18 -3
- {naxtopy-2.2.0 → naxtopy-2.2.1}/pyproject.toml +1 -1
- {naxtopy-2.2.0 → naxtopy-2.2.1}/setup.py +3 -1
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +9 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PComponent.py +27 -21
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PConnector.py +18 -13
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PCoord.py +6 -1
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PElement.py +22 -17
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PFreeBody.py +14 -3
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PIncrement.py +11 -7
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PLoadCase.py +80 -51
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PMaterial.py +23 -18
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +4 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PNode.py +27 -22
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PProperty.py +15 -10
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PReport.py +13 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PResult.py +26 -17
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PSection.py +11 -6
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PSet.py +11 -7
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/Constants.py +3 -3
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PLog.py +21 -6
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/N2PModelContent.py +69 -27
- naxtopy-2.2.0/src/NaxToPy/Core/Reference_Finder/__New_Reference_finder.py → naxtopy-2.2.1/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +73 -61
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PGetFasteners.py +6 -4
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PGetLoadFasteners.py +2 -1
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PtoEXE/N2PtoEXE.py +2 -2
- {naxtopy-2.2.0 → naxtopy-2.2.1/src/NaxToPy.egg-info}/PKG-INFO +19 -4
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/SOURCES.txt +0 -1
- naxtopy-2.2.0/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -281
- {naxtopy-2.2.0 → naxtopy-2.2.1}/LICENSE +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/setup.cfg +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/librerias.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PAttachment.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PBolt.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PJoint.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PPlate.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PFastenerAnalysis.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PUpdateFastener.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PEnvelope/N2PEnvelope.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PEnvelope/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PtoEXE/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/material.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/property.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/NaxToPy.ico +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/__init__.py +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/user_functions.txt +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/requires.txt +0 -0
- {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: NaxToPy
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: Package for postprocessing FEM results in Python
|
|
5
5
|
Home-page: https://www.idaerosolutions.com/Home/NaxToPy
|
|
6
6
|
Download-URL: https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US
|
|
@@ -145,9 +145,14 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
145
145
|
|
|
146
146
|
**NaxToPy** is a powerful tool for FEM analysis post-processing!
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
---------------
|
|
149
|
+
|
|
150
|
+
⚠️**Warning:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
|
|
151
|
+
This version is compatible with **NaxTo 2024.3**. It is compatible with all the steps of this version (2024.3.0, 2024.3.1).
|
|
152
|
+
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
153
|
+
|
|
154
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/2.2.0/#history) to find which newer version is compatible with it.
|
|
155
|
+
|
|
151
156
|
|
|
152
157
|
## Installation
|
|
153
158
|
|
|
@@ -298,6 +303,16 @@ but the execution doesn't crash.
|
|
|
298
303
|
6. Refactor: The dictionary and list for Cards have been replaced with a lazy dictionary and a lazy list, improving execution efficiency.
|
|
299
304
|
7. Refactor: Reading the mesh from binary files is now executed in parallel by default, as this approach is more memory-safe.
|
|
300
305
|
|
|
306
|
+
### v.2.2.1
|
|
307
|
+
1. BugFix: The method set_increment() is fixed.
|
|
308
|
+
2. BugFix: Several bugfix (not in the result accuracy) are fixed in modules N2PGetFastener and N2PGetLoadsFastener. Several optimizations are included.
|
|
309
|
+
3. Feat: Now the method get_load_case() admits a list of int and a list of string and return a list of N2PLoadCase.
|
|
310
|
+
4. Refactor: N2P classes use __slots__ for security and optimization.
|
|
311
|
+
5. Refactor: Complete refactor of the module that loads the NaxTo libraries.
|
|
312
|
+
6. BugFix: in parallel mesh load with a small mesh and lot of results.
|
|
313
|
+
7. BugFix: in sequential mesh load in op2.
|
|
314
|
+
|
|
315
|
+
|
|
301
316
|
# Documentation
|
|
302
317
|
|
|
303
318
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -21,9 +21,14 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
21
21
|
|
|
22
22
|
**NaxToPy** is a powerful tool for FEM analysis post-processing!
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
---------------
|
|
25
|
+
|
|
26
|
+
⚠️**Warning:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
|
|
27
|
+
This version is compatible with **NaxTo 2024.3**. It is compatible with all the steps of this version (2024.3.0, 2024.3.1).
|
|
28
|
+
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
29
|
+
|
|
30
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/2.2.0/#history) to find which newer version is compatible with it.
|
|
31
|
+
|
|
27
32
|
|
|
28
33
|
## Installation
|
|
29
34
|
|
|
@@ -174,6 +179,16 @@ but the execution doesn't crash.
|
|
|
174
179
|
6. Refactor: The dictionary and list for Cards have been replaced with a lazy dictionary and a lazy list, improving execution efficiency.
|
|
175
180
|
7. Refactor: Reading the mesh from binary files is now executed in parallel by default, as this approach is more memory-safe.
|
|
176
181
|
|
|
182
|
+
### v.2.2.1
|
|
183
|
+
1. BugFix: The method set_increment() is fixed.
|
|
184
|
+
2. BugFix: Several bugfix (not in the result accuracy) are fixed in modules N2PGetFastener and N2PGetLoadsFastener. Several optimizations are included.
|
|
185
|
+
3. Feat: Now the method get_load_case() admits a list of int and a list of string and return a list of N2PLoadCase.
|
|
186
|
+
4. Refactor: N2P classes use __slots__ for security and optimization.
|
|
187
|
+
5. Refactor: Complete refactor of the module that loads the NaxTo libraries.
|
|
188
|
+
6. BugFix: in parallel mesh load with a small mesh and lot of results.
|
|
189
|
+
7. BugFix: in sequential mesh load in op2.
|
|
190
|
+
|
|
191
|
+
|
|
177
192
|
# Documentation
|
|
178
193
|
|
|
179
194
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -7,7 +7,9 @@ setup(
|
|
|
7
7
|
packages = find_packages(where="src"),
|
|
8
8
|
package_dir = {"": "src"},
|
|
9
9
|
include_package_data=True,
|
|
10
|
-
|
|
10
|
+
package_data={
|
|
11
|
+
"NaxToPy": ["NaxToPy.ico", "user_functions.txt"]
|
|
12
|
+
},
|
|
11
13
|
url="https://www.idaerosolutions.com/Home/NaxToPy",
|
|
12
14
|
download_url="https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US"
|
|
13
15
|
)
|
|
@@ -13,6 +13,15 @@ class N2PAbaqusInputData:
|
|
|
13
13
|
"""Class with the complete data of an Abaqus MEF input file (text file usually with the extension .inp).
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
__slots__ = (
|
|
17
|
+
"__inputfiledata",
|
|
18
|
+
"__listcomments",
|
|
19
|
+
"__dictionary_files_ids",
|
|
20
|
+
"__listbulkdatakeywords",
|
|
21
|
+
"__dictKeywordToN2P",
|
|
22
|
+
"__dictEntityToN2P",
|
|
23
|
+
)
|
|
24
|
+
|
|
16
25
|
def __init__(self, inputfiledata):
|
|
17
26
|
self.__inputfiledata = inputfiledata
|
|
18
27
|
self.__listcomments = []
|
|
@@ -21,6 +21,12 @@ class N2PComponent:
|
|
|
21
21
|
IsTransformable: bool.
|
|
22
22
|
'''
|
|
23
23
|
|
|
24
|
+
__slots__ = (
|
|
25
|
+
"_name",
|
|
26
|
+
"_sections",
|
|
27
|
+
"_result_father",
|
|
28
|
+
)
|
|
29
|
+
|
|
24
30
|
# Constructor de N2PComponent
|
|
25
31
|
# -----------------------------------------------------------------
|
|
26
32
|
def __init__(self, name, sections, result_father):
|
|
@@ -31,17 +37,17 @@ class N2PComponent:
|
|
|
31
37
|
sections: list[N2Sections] -> list with instances of N2Sections
|
|
32
38
|
result_father: N2PResult
|
|
33
39
|
"""
|
|
34
|
-
self.
|
|
35
|
-
self.
|
|
40
|
+
self._name = name
|
|
41
|
+
self._sections = [N2PSection(sections[i].Name,
|
|
36
42
|
sections[i].Number) for i in range(0, len(sections))]
|
|
37
|
-
self.
|
|
43
|
+
self._result_father = result_father
|
|
38
44
|
# ---------------------------------------------------------------------------------------------
|
|
39
45
|
|
|
40
46
|
# Metodo para Obtener el Nombre de la Componente
|
|
41
47
|
# ----------------------------------------------
|
|
42
48
|
@property
|
|
43
49
|
def Name(self) -> str:
|
|
44
|
-
return(str(self.
|
|
50
|
+
return(str(self._name))
|
|
45
51
|
# ---------------------------------------------------------------------------------------------
|
|
46
52
|
|
|
47
53
|
# Metodo para Obtener una lista con las secciones de la componente ----------------------------
|
|
@@ -49,7 +55,7 @@ class N2PComponent:
|
|
|
49
55
|
def Sections(self) -> list[N2PSection, ...]:
|
|
50
56
|
""" Returns a list of N2PSection objects with all the sections contained in the component
|
|
51
57
|
"""
|
|
52
|
-
return(self.
|
|
58
|
+
return(self._sections)
|
|
53
59
|
# ---------------------------------------------------------------------------------------------
|
|
54
60
|
|
|
55
61
|
@property
|
|
@@ -59,8 +65,8 @@ class N2PComponent:
|
|
|
59
65
|
# No se guarda como atributo privado durante la instanciacion de un objeto porque algunas variables
|
|
60
66
|
# aun no se han construido. Por eso el metodo de la propiedad es la que busca los argumentos y llama
|
|
61
67
|
# al metodo dentro de Vizzer classes.
|
|
62
|
-
solver = self.
|
|
63
|
-
result = self.
|
|
68
|
+
solver = self._result_father._loadCase_father._N2PLoadCase__solver
|
|
69
|
+
result = self._result_father.Name
|
|
64
70
|
component = self.Name
|
|
65
71
|
return bool(N2TensorTransformation.IsResultSupported(solver, result, component))
|
|
66
72
|
|
|
@@ -153,7 +159,7 @@ class N2PComponent:
|
|
|
153
159
|
resultsParameters = self._create_n2paraminputresult(sections, aveSections, cornerData, aveNodes, variation,
|
|
154
160
|
realPolar, coordsys, v1, v2)
|
|
155
161
|
results = list(
|
|
156
|
-
self.
|
|
162
|
+
self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
157
163
|
resultsParameters, 0))
|
|
158
164
|
|
|
159
165
|
if results[1] == 1:
|
|
@@ -241,7 +247,7 @@ class N2PComponent:
|
|
|
241
247
|
realPolar, coordsys, v1, v2)
|
|
242
248
|
|
|
243
249
|
results = \
|
|
244
|
-
self.
|
|
250
|
+
self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
245
251
|
resultsParameters, 0)
|
|
246
252
|
|
|
247
253
|
if results[1] == 1:
|
|
@@ -324,13 +330,13 @@ class N2PComponent:
|
|
|
324
330
|
# if resultlist[0] == -1:
|
|
325
331
|
# N2PLog.Error.E208()
|
|
326
332
|
# return DataFrame()
|
|
327
|
-
# if len(self.__result_father__.
|
|
333
|
+
# if len(self.__result_father__._loadCase_father._modelFather._N2PModelContent__StrPartToID) == 1:
|
|
328
334
|
# noparts = True
|
|
329
335
|
# else:
|
|
330
336
|
# noparts = False
|
|
331
337
|
#
|
|
332
338
|
# if resultlist[1] == "NODES":
|
|
333
|
-
# nodos = self.__result_father__.
|
|
339
|
+
# nodos = self.__result_father__._loadCase_father._modelFather.get_nodes()
|
|
334
340
|
# if noparts:
|
|
335
341
|
# ids = [nodo.ID for nodo in nodos]
|
|
336
342
|
# indexname = ["Grid"]
|
|
@@ -339,8 +345,8 @@ class N2PComponent:
|
|
|
339
345
|
# indexname = ["Part", "Grid"]
|
|
340
346
|
# del nodos
|
|
341
347
|
# elif resultlist[1] == "ELEMENTS":
|
|
342
|
-
# elements = self.__result_father__.
|
|
343
|
-
# connectors = self.__result_father__.
|
|
348
|
+
# elements = self.__result_father__._loadCase_father._modelFather.get_elements()
|
|
349
|
+
# connectors = self.__result_father__._loadCase_father._modelFather.get_connectors()
|
|
344
350
|
# if noparts:
|
|
345
351
|
# # La lista de connectores puede contener N2PConnector o lista de N2PConector. Esto es porque
|
|
346
352
|
# # los MPC puden tener ids iguales en Nastran. Por eso en la comprension de la lista de conectores
|
|
@@ -355,7 +361,7 @@ class N2PComponent:
|
|
|
355
361
|
# indexname = ["Part", "Element"]
|
|
356
362
|
# del elements, connectors
|
|
357
363
|
# elif resultlist[1] == "ELEMENT NODAL":
|
|
358
|
-
# ids = list(self.__result_father__.
|
|
364
|
+
# ids = list(self.__result_father__._loadCase_father._modelFather._elementnodal().values())
|
|
359
365
|
# indexname = ["Part", "Grid", "Element"]
|
|
360
366
|
#
|
|
361
367
|
# # Se revisa que la lista de malla y la lista de resultados sean del mismo tamaño
|
|
@@ -393,7 +399,7 @@ class N2PComponent:
|
|
|
393
399
|
resultsParameters = self._create_n2paraminputresult(sections, aveSections, cornerData, aveNodes, variation,
|
|
394
400
|
realPolar, coordsys, v1, v2)
|
|
395
401
|
|
|
396
|
-
cs_dict = self.
|
|
402
|
+
cs_dict = self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
397
403
|
formula, resultsParameters, 0)
|
|
398
404
|
|
|
399
405
|
py_dict = {(int(key.split(":")[0].replace("DoF_LCD", "-").replace("DoF_LC", "")),
|
|
@@ -412,8 +418,8 @@ class N2PComponent:
|
|
|
412
418
|
if isinstance(list_lc_incr, tuple):
|
|
413
419
|
list_lc_incr = [list_lc_incr]
|
|
414
420
|
|
|
415
|
-
N2PLoadCase = type(self.
|
|
416
|
-
N2PIncrement = type(self.
|
|
421
|
+
N2PLoadCase = type(self._result_father._loadCase_father)
|
|
422
|
+
N2PIncrement = type(self._result_father._loadCase_father.Increments[0])
|
|
417
423
|
|
|
418
424
|
if isinstance(list_lc_incr[0][0], N2PLoadCase) and isinstance(list_lc_incr[0][1], N2PIncrement):
|
|
419
425
|
return ",".join(f"<LC{lc[0].ID}:FR{lc[1].ID}>" for lc in list_lc_incr)
|
|
@@ -479,16 +485,16 @@ class N2PComponent:
|
|
|
479
485
|
resultsParameters.IdsEntities = ''
|
|
480
486
|
|
|
481
487
|
# Active Increment
|
|
482
|
-
resultsParameters.IncrementID = str(self.
|
|
488
|
+
resultsParameters.IncrementID = str(self._result_father._loadCase_father._activeIncrement)
|
|
483
489
|
|
|
484
490
|
# Load Case Selected
|
|
485
|
-
resultsParameters.LoadCaseID = str(self.
|
|
491
|
+
resultsParameters.LoadCaseID = str(self._result_father._loadCase_father.ID)
|
|
486
492
|
|
|
487
493
|
# Parts Selected (So Far 'ALL')
|
|
488
494
|
resultsParameters.Part = 'all'
|
|
489
495
|
|
|
490
496
|
# Results Selected
|
|
491
|
-
resultsParameters.Result = str(self.
|
|
497
|
+
resultsParameters.Result = str(self._result_father.Name)
|
|
492
498
|
|
|
493
499
|
resultsParameters.Sets = ''
|
|
494
500
|
resultsParameters.TypeElement = ''
|
|
@@ -497,7 +503,7 @@ class N2PComponent:
|
|
|
497
503
|
sectionParam = ''
|
|
498
504
|
|
|
499
505
|
if sections is None:
|
|
500
|
-
for section in self.
|
|
506
|
+
for section in self._sections:
|
|
501
507
|
sectionParam += str(section.Name) + '#'
|
|
502
508
|
else:
|
|
503
509
|
if not isinstance(sections, list):
|
|
@@ -15,29 +15,34 @@ class N2PConnector:
|
|
|
15
15
|
RefGrid: N2PNode.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
__slots__ = (
|
|
19
|
+
"__info",
|
|
20
|
+
"__model"
|
|
21
|
+
)
|
|
22
|
+
|
|
18
23
|
def __init__(self, info, model_father):
|
|
19
24
|
"""Python Connector constructor"""
|
|
20
|
-
self.
|
|
21
|
-
self.
|
|
25
|
+
self.__info = info
|
|
26
|
+
self.__model = model_father
|
|
22
27
|
|
|
23
28
|
# ------------------------------------------------------------------------------------------------------------------
|
|
24
29
|
|
|
25
30
|
# Metodo para obtener el ID conector -------------------------------------------------------------------------------
|
|
26
31
|
@property
|
|
27
32
|
def ID(self) -> int:
|
|
28
|
-
return(int(self.
|
|
33
|
+
return(int(self.__info.ID))
|
|
29
34
|
# ------------------------------------------------------------------------------------------------------------------
|
|
30
35
|
|
|
31
36
|
# Metodo para obtener el ID de la parte del conector ---------------------------------------------------------------
|
|
32
37
|
@property
|
|
33
38
|
def PartID(self) -> str:
|
|
34
|
-
return(self.
|
|
39
|
+
return(self.__model._N2PModelContent__partIDtoStr.get(self.__info.Part, -1))
|
|
35
40
|
# ------------------------------------------------------------------------------------------------------------------
|
|
36
41
|
|
|
37
42
|
# Metodo para obtener el tipo de conector conector -----------------------------------------------------------------
|
|
38
43
|
@property
|
|
39
44
|
def TypeConnector(self) -> str:
|
|
40
|
-
return str(self.
|
|
45
|
+
return str(self.__info.tipo)
|
|
41
46
|
# ------------------------------------------------------------------------------------------------------------------
|
|
42
47
|
|
|
43
48
|
# Metodo para obtener los nodos (N2PNode) libres/independientes conector -------------------------------------------
|
|
@@ -46,37 +51,37 @@ class N2PConnector:
|
|
|
46
51
|
# Devuelve el ID interno (el de VTK) de los nodos, no el solver. Entro con ese id en el diccionario de VTK a
|
|
47
52
|
# Solver(ID, partID). Con la tupla entro en el diccionario de nodos para sacar el objeto N2PNode.
|
|
48
53
|
# Todo dentro de una comprension de lista.
|
|
49
|
-
listaobjetos = [ list(self.
|
|
50
|
-
for node in list(self.
|
|
54
|
+
listaobjetos = [ list(self.__model._N2PModelContent__node_dict)[node]
|
|
55
|
+
for node in list(self.__info.pointsIndep) ]
|
|
51
56
|
return listaobjetos
|
|
52
57
|
# ------------------------------------------------------------------------------------------------------------------
|
|
53
58
|
|
|
54
59
|
# Metodo para obtener los nodos (N2PNode) esclavos/dependientes del conector ---------------------------------------
|
|
55
60
|
@property
|
|
56
61
|
def SlaveNodes(self) -> list[N2PNode]:
|
|
57
|
-
listaobjetos = [list(self.
|
|
58
|
-
for node in list(self.
|
|
62
|
+
listaobjetos = [list(self.__model._N2PModelContent__node_dict)[node]
|
|
63
|
+
for node in list(self.__info.pointsDep)]
|
|
59
64
|
return listaobjetos
|
|
60
65
|
# ------------------------------------------------------------------------------------------------------------------
|
|
61
66
|
|
|
62
67
|
# Metodo para obtener los nodos (N2PNode) del conector en caso de ser del tipo MPC o RSPLINE -----------------------
|
|
63
68
|
@property
|
|
64
69
|
def GridIDs(self) -> list[N2PNode]:
|
|
65
|
-
listaobjetos = [ list(self.
|
|
66
|
-
for node in list(self.
|
|
70
|
+
listaobjetos = [ list(self.__model._N2PModelContent__node_dict)[node]
|
|
71
|
+
for node in list(self.__info.gridIDs) ]
|
|
67
72
|
return listaobjetos
|
|
68
73
|
# ------------------------------------------------------------------------------------------------------------------
|
|
69
74
|
|
|
70
75
|
# Metodo para obtener el id interno (o VTK) del conector -----------------------------------------------------------
|
|
71
76
|
@property
|
|
72
77
|
def InternalID(self) -> int:
|
|
73
|
-
return (int(self.
|
|
78
|
+
return (int(self.__info.VTKindice))
|
|
74
79
|
# ------------------------------------------------------------------------------------------------------------------
|
|
75
80
|
|
|
76
81
|
# Metodo para obtener el id del nodo de referencia en caso de que el conector sea RBE3 o COUPLING
|
|
77
82
|
@property
|
|
78
83
|
def RefGrid(self) -> N2PNode:
|
|
79
|
-
return list(self.
|
|
84
|
+
return list(self.__model._N2PModelContent__node_dict)[int(self.__info.refGrid)]
|
|
80
85
|
# ------------------------------------------------------------------------------------------------------------------
|
|
81
86
|
|
|
82
87
|
# Special Method for Object Representation -------------------------------------------------------------------------
|
|
@@ -15,11 +15,16 @@ class N2PCoord(object):
|
|
|
15
15
|
Zaxis: tuple.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
__slots__ = (
|
|
19
|
+
"__info",
|
|
20
|
+
"__model"
|
|
21
|
+
)
|
|
22
|
+
|
|
18
23
|
def __init__(self, info, model_father):
|
|
19
24
|
"""Constructor of the class N2PCoord"""
|
|
20
25
|
|
|
21
26
|
self.__info = info
|
|
22
|
-
self.
|
|
27
|
+
self.__model = model_father
|
|
23
28
|
|
|
24
29
|
# Metodos para obtener los atributos de la clase N2PCoord
|
|
25
30
|
|
|
@@ -21,74 +21,79 @@ class N2PElement:
|
|
|
21
21
|
ElemSystem: list[float].
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
+
__slots__ = (
|
|
25
|
+
"__info",
|
|
26
|
+
"__model"
|
|
27
|
+
)
|
|
28
|
+
|
|
24
29
|
def __init__(self, info, model_father):
|
|
25
30
|
"""Python Element constructor"""
|
|
26
31
|
|
|
27
|
-
self.
|
|
28
|
-
self.
|
|
32
|
+
self.__info = info
|
|
33
|
+
self.__model = model_father
|
|
29
34
|
|
|
30
35
|
# Metodo para obtener del elemento --------------------------------------------------------------------------------
|
|
31
36
|
@property
|
|
32
37
|
def InternalID(self) -> int:
|
|
33
|
-
return(int(self.
|
|
38
|
+
return(int(self.__info.VTKindice))
|
|
34
39
|
# ------------------------------------------------------------------------------------------------------------------
|
|
35
40
|
|
|
36
41
|
# Metodo para obtener el id del elemento ---------------------------------------------------------------------------
|
|
37
42
|
@property
|
|
38
43
|
def ID(self) -> int:
|
|
39
|
-
return(int(self.
|
|
44
|
+
return(int(self.__info.ID))
|
|
40
45
|
# ------------------------------------------------------------------------------------------------------------------
|
|
41
46
|
|
|
42
47
|
# Metodo para obtener del elemento --------------------------------------------------------------------------------
|
|
43
48
|
@property
|
|
44
49
|
def PartID(self) -> str:
|
|
45
|
-
return(self.
|
|
50
|
+
return(self.__model._N2PModelContent__partIDtoStr.get(self.__info.partID, -1))
|
|
46
51
|
# ------------------------------------------------------------------------------------------------------------------
|
|
47
52
|
|
|
48
53
|
# Metodo para obtener del elemento --------------------------------------------------------------------------------
|
|
49
54
|
@property
|
|
50
55
|
def TypeElement(self) -> str:
|
|
51
|
-
return(self.
|
|
56
|
+
return(self.__model._N2PModelContent__elementTypeIDtoStr.get(self.__info.typeElementSolver, -1))
|
|
52
57
|
# ------------------------------------------------------------------------------------------------------------------
|
|
53
58
|
|
|
54
59
|
# Metodo para obtener del elemento --------------------------------------------------------------------------------
|
|
55
60
|
@property
|
|
56
61
|
def Prop(self) -> int:
|
|
57
|
-
return(int(self.
|
|
62
|
+
return(int(self.__info.prop))
|
|
58
63
|
# ------------------------------------------------------------------------------------------------------------------
|
|
59
64
|
|
|
60
65
|
# Metodo para obtener el material del elemento ---------------------------------------------------------------------
|
|
61
66
|
@property
|
|
62
67
|
def InternalElemType(self) -> int:
|
|
63
|
-
return(int(self.
|
|
68
|
+
return(int(self.__info.typeElementVTK))
|
|
64
69
|
# ------------------------------------------------------------------------------------------------------------------
|
|
65
70
|
|
|
66
71
|
# Metodo para obtener nNodes del elemento --------------------------------------------------------------------------
|
|
67
72
|
@property
|
|
68
73
|
def NumNodes(self) -> int:
|
|
69
|
-
return(int(self.
|
|
74
|
+
return(int(self.__info.nNodes))
|
|
70
75
|
# ------------------------------------------------------------------------------------------------------------------
|
|
71
76
|
|
|
72
77
|
# Metodo para obtener los nodos del elemento como N2PNode ----------------------------------------------------------
|
|
73
78
|
@property
|
|
74
79
|
def Nodes(self) -> tuple[N2PNode]:
|
|
75
|
-
aux = list(self.
|
|
80
|
+
aux = list(self.__info.nodeList)
|
|
76
81
|
retornar = tuple()
|
|
77
82
|
for nodo in aux:
|
|
78
|
-
retornar += (self.
|
|
83
|
+
retornar += (self.__model._N2PModelContent__node_dict.get((nodo, self.__info.partID), -1) ,)
|
|
79
84
|
return(retornar)
|
|
80
85
|
# ------------------------------------------------------------------------------------------------------------------
|
|
81
86
|
|
|
82
87
|
# Metodo para obtener los ids de los nodos del elemento ------------------------------------------------------------
|
|
83
88
|
@property
|
|
84
89
|
def NodesIds(self) -> tuple:
|
|
85
|
-
return(tuple(self.
|
|
90
|
+
return(tuple(self.__info.nodeList))
|
|
86
91
|
# ------------------------------------------------------------------------------------------------------------------
|
|
87
92
|
|
|
88
93
|
# Metodo para obtener el angulo material del elemento --------------------------------------------------------------
|
|
89
94
|
@property
|
|
90
95
|
def AngleMat(self) -> float:
|
|
91
|
-
return(float(self.
|
|
96
|
+
return(float(self.__info.angleMaterial))
|
|
92
97
|
# ------------------------------------------------------------------------------------------------------------------
|
|
93
98
|
|
|
94
99
|
# Metodo para el sistema de coordenadas elemento -------------------------------------------------------------------
|
|
@@ -98,7 +103,7 @@ class N2PElement:
|
|
|
98
103
|
Returns an array with the position of the three vectors that define the element system of the element:
|
|
99
104
|
[x1, x2, x3, y1, y2, y3, z1, z2, z3]
|
|
100
105
|
"""
|
|
101
|
-
systems = self.
|
|
106
|
+
systems = self.__model._elements_coord_sys()
|
|
102
107
|
return [systems[self.InternalID, i] for i in range(9)]
|
|
103
108
|
# ------------------------------------------------------------------------------------------------------------------
|
|
104
109
|
|
|
@@ -109,7 +114,7 @@ class N2PElement:
|
|
|
109
114
|
Returns list with the position of the three vectors that define the material system of the element:
|
|
110
115
|
[x1, x2, x3, y1, y2, y3, z1, z2, z3]
|
|
111
116
|
"""
|
|
112
|
-
mastsys = N2ElementsCoordinateSystems.GetElementMaterialSystem(self.
|
|
117
|
+
mastsys = N2ElementsCoordinateSystems.GetElementMaterialSystem(self.__model._N2PModelContent__vzmodel,
|
|
113
118
|
self.InternalID)
|
|
114
119
|
if mastsys is not None:
|
|
115
120
|
return list(mastsys)
|
|
@@ -123,7 +128,7 @@ class N2PElement:
|
|
|
123
128
|
"""
|
|
124
129
|
Returns list with the centroid of the element: [x, y, z]
|
|
125
130
|
"""
|
|
126
|
-
all_centroids = self.
|
|
131
|
+
all_centroids = self.__model._N2PModelContent__vzmodel.ElementCentroids
|
|
127
132
|
iid = self.InternalID
|
|
128
133
|
return [all_centroids[iid, i] for i in range(3)]
|
|
129
134
|
# ------------------------------------------------------------------------------------------------------------------
|
|
@@ -137,7 +142,7 @@ class N2PElement:
|
|
|
137
142
|
|
|
138
143
|
If no user systems for elements are defined yet, it returns None.
|
|
139
144
|
"""
|
|
140
|
-
user_system_array = self.
|
|
145
|
+
user_system_array = self.__model._N2PModelContent__vzmodel.ElementUserCoordinateSystems
|
|
141
146
|
if not user_system_array:
|
|
142
147
|
return None
|
|
143
148
|
return [user_system_array[self.InternalID, i] for i in range(9)]
|
|
@@ -28,9 +28,19 @@ class N2PFreeBody(object):
|
|
|
28
28
|
Moment: tuple[float].
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
__slots__ = (
|
|
32
|
+
"__name",
|
|
33
|
+
"__loadcase",
|
|
34
|
+
"__increment",
|
|
35
|
+
"__nodelist",
|
|
36
|
+
"__elementlist",
|
|
37
|
+
"__coordsys",
|
|
38
|
+
"__model",
|
|
39
|
+
"__outpoint",
|
|
40
|
+
"__fbdresult",
|
|
41
|
+
"__centroid"
|
|
42
|
+
)
|
|
43
|
+
|
|
34
44
|
|
|
35
45
|
def __init__(self, name: str, loadcase: N2PLoadCase, increment: N2PIncrement, nodelist: list[N2PNode], elementlist: list[N2PElement],
|
|
36
46
|
modelfather, coordsys: N2PCoord = None, outpoint: tuple[float] = None):
|
|
@@ -54,6 +64,7 @@ class N2PFreeBody(object):
|
|
|
54
64
|
self.__coordsys = coordsys
|
|
55
65
|
self.__model = modelfather
|
|
56
66
|
self.__outpoint = outpoint
|
|
67
|
+
self.__fbdresult = None
|
|
57
68
|
|
|
58
69
|
|
|
59
70
|
if outpoint is not None:
|
|
@@ -2,51 +2,55 @@
|
|
|
2
2
|
class N2PIncrement:
|
|
3
3
|
"""Class which contains the information associated to an increment/frame of a N2PLoadCase instance."""
|
|
4
4
|
|
|
5
|
+
__slots__ = (
|
|
6
|
+
"__info"
|
|
7
|
+
)
|
|
8
|
+
|
|
5
9
|
# Constructor de N2PIncrement --------------------------------------------------------------------------------------
|
|
6
10
|
def __init__(self, info):
|
|
7
|
-
self.
|
|
11
|
+
self.__info = info
|
|
8
12
|
# ------------------------------------------------------------------------------------------------------------------
|
|
9
13
|
|
|
10
14
|
# Metodo para obtener el nombre del incremento ---------------------------------------------------------------------
|
|
11
15
|
@property
|
|
12
16
|
def Name(self) -> str:
|
|
13
17
|
"""Name of the Increment"""
|
|
14
|
-
return(str(self.
|
|
18
|
+
return(str(self.__info.Name))
|
|
15
19
|
# ------------------------------------------------------------------------------------------------------------------
|
|
16
20
|
|
|
17
21
|
# Metodo para obtener el valor del autovalor real ------------------------------------------------------------------
|
|
18
22
|
@property
|
|
19
23
|
def RealEigenvalue(self) -> float:
|
|
20
24
|
"""Real Eigenvalue of the increment"""
|
|
21
|
-
return(float(self.
|
|
25
|
+
return(float(self.__info.EigReal))
|
|
22
26
|
# ------------------------------------------------------------------------------------------------------------------
|
|
23
27
|
|
|
24
28
|
# Metodo para obtener el valor del autovalor imaginario ------------------------------------------------------------
|
|
25
29
|
@property
|
|
26
30
|
def ImaginaryEigenvalue(self) -> float:
|
|
27
31
|
"""Imaginary Eigenvalue of the increment"""
|
|
28
|
-
return(float(self.
|
|
32
|
+
return(float(self.__info.EigImg))
|
|
29
33
|
# ------------------------------------------------------------------------------------------------------------------
|
|
30
34
|
|
|
31
35
|
# Metodo para obtener el ID del incremento en el caso de carga -----------------------------------------------------
|
|
32
36
|
@property
|
|
33
37
|
def ID(self) -> int:
|
|
34
38
|
"""Solver ID of the Increment"""
|
|
35
|
-
return(int(self.
|
|
39
|
+
return(int(self.__info.ID))
|
|
36
40
|
# ------------------------------------------------------------------------------------------------------------------
|
|
37
41
|
|
|
38
42
|
# Metodo para obtener el valor del incremento ----------------------------------------------------------------------
|
|
39
43
|
@property
|
|
40
44
|
def Time(self) -> float:
|
|
41
45
|
''' Returns the value of the increment/frame'''
|
|
42
|
-
return(float(self.
|
|
46
|
+
return(float(self.__info.Time))
|
|
43
47
|
# ------------------------------------------------------------------------------------------------------------------
|
|
44
48
|
|
|
45
49
|
# Metodo para obtener el tipo de Solucion --- ----------------------------------------------------------------------
|
|
46
50
|
@property
|
|
47
51
|
def Solution(self) -> str:
|
|
48
52
|
"""Returns the value of the Solution name of the Increment"""
|
|
49
|
-
return(str(self.
|
|
53
|
+
return(str(self.__info.Solution))
|
|
50
54
|
# ------------------------------------------------------------------------------------------------------------------
|
|
51
55
|
|
|
52
56
|
# Special Method for Object Representation -------------------------------------------------------------------------
|