NaxToPy 2.2.2__tar.gz → 3.0.0__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.2/src/NaxToPy.egg-info → naxtopy-3.0.0}/PKG-INFO +27 -6
- {naxtopy-2.2.2 → naxtopy-3.0.0}/README.md +25 -5
- {naxtopy-2.2.2 → naxtopy-3.0.0}/pyproject.toml +2 -2
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PComponent.py +128 -38
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PElement.py +5 -2
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PFreeBody.py +3 -2
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PLoadCase.py +14 -13
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +200 -26
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PProperty.py +185 -26
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PResult.py +1 -10
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Constants/Constants.py +11 -7
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Errors/N2PLog.py +502 -17
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/N2PModelContent.py +462 -106
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +12 -2
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/Joints/N2PAttachment.py +24 -19
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/Joints/N2PBolt.py +26 -12
- naxtopy-3.0.0/src/NaxToPy/Modules/Fasteners/Joints/N2PFastenerSystem.py +357 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/Joints/N2PJoint.py +567 -189
- naxtopy-3.0.0/src/NaxToPy/Modules/Fasteners/Joints/N2PPlate.py +925 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/N2PGetFasteners.py +94 -119
- naxtopy-3.0.0/src/NaxToPy/Modules/Fasteners/N2PGetLoadFasteners.py +1215 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +8 -9
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +9 -21
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +4 -7
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +2 -2
- naxtopy-3.0.0/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +406 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0/src/NaxToPy.egg-info}/PKG-INFO +27 -6
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy.egg-info/SOURCES.txt +2 -10
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy.egg-info/requires.txt +1 -0
- naxtopy-2.2.2/src/NaxToPy/Modules/Fasteners/Joints/N2PPlate.py +0 -454
- naxtopy-2.2.2/src/NaxToPy/Modules/Fasteners/N2PGetLoadFasteners.py +0 -582
- naxtopy-2.2.2/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -182
- naxtopy-2.2.2/src/NaxToPy/Modules/common/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/common/material.py +0 -9
- naxtopy-2.2.2/src/NaxToPy/Modules/common/property.py +0 -9
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -2
- naxtopy-2.2.2/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -2
- {naxtopy-2.2.2 → naxtopy-3.0.0}/LICENSE +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/setup.cfg +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/setup.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PMaterial.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Classes/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Constants/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Constants/librerias.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Errors/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Core/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/Joints/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/N2PFastenerAnalysis.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/N2PUpdateFastener.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/Fasteners/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/N2PEnvelope/N2PEnvelope.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/N2PEnvelope/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/N2PtoEXE/N2PtoEXE.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/N2PtoEXE/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/Modules/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/NaxToPy.ico +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/__init__.py +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy/user_functions.txt +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
- {naxtopy-2.2.2 → naxtopy-3.0.0}/src/NaxToPy.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: NaxToPy
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
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
|
|
@@ -121,12 +121,13 @@ License-File: LICENSE
|
|
|
121
121
|
Requires-Dist: pythonnet>=3.0.3
|
|
122
122
|
Requires-Dist: numpy>=1.22.0
|
|
123
123
|
Requires-Dist: setuptools>=67.8.0
|
|
124
|
+
Requires-Dist: h5py>=3.12.1
|
|
124
125
|
Dynamic: download-url
|
|
125
126
|
Dynamic: home-page
|
|
126
127
|
|
|
127
128
|
[](https://idaerosolutions.com)
|
|
128
129
|
[](https://pypi.org/project/NaxToPy/)
|
|
129
|
-
[](https://www.python.org/downloads/)
|
|
130
|
+
[](https://www.python.org/downloads/)
|
|
130
131
|

|
|
131
132
|
[](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US)
|
|
132
133
|
[](https://pypi.org/project/NaxToPy/#files)
|
|
@@ -150,10 +151,10 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
150
151
|
---------------
|
|
151
152
|
|
|
152
153
|
⚠️**Warning:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
|
|
153
|
-
This version is compatible with **NaxTo
|
|
154
|
+
This version is compatible with **NaxTo 2025.0**.
|
|
154
155
|
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
155
156
|
|
|
156
|
-
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/
|
|
157
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/3.0.0/#history) to find which newer version is compatible with it.
|
|
157
158
|
|
|
158
159
|
|
|
159
160
|
## Installation
|
|
@@ -325,6 +326,22 @@ is redundant. The coordinate system will prevail.
|
|
|
325
326
|
7. Feat: New properties supported: PBUSH, PFAST, PMASS, PELAS, PGAP, PWELD
|
|
326
327
|
8. BugFix: The method get_elements_attached() is fixed so when there are MPC connectors with the same ID.
|
|
327
328
|
|
|
329
|
+
### v.2.2.3
|
|
330
|
+
1. Requirement: Now NaxToPy require the package [**h5py**](https://pypi.org/project/h5py/).
|
|
331
|
+
2. Feat: N2PGetLoadFastener now can use PAG method and display format.
|
|
332
|
+
3. BugFix: Some bugs are solved in N2PGetFastener and N2PGetLoadFastener.
|
|
333
|
+
4. Feat: N2PGetLoadFastener can export results in HDF5 format.
|
|
334
|
+
5. BugFix: The filtering in the method get_result_by_LCs_Incr() in elements when results are in Corner Data is fixed.
|
|
335
|
+
|
|
336
|
+
### v.3.0.0
|
|
337
|
+
1. Feat: Now it is supported more properties from Nastran: PBAR, PBARL, PBEAM, PBEAML, PBUSH, PWELD, PELAS, PFAST, PMASS, PGAP. They are kept as N2PBeam, N2PBeamL, N2PBush, N2PWeld, N2PElas, N2PFast, N2PMass, N2PGap.
|
|
338
|
+
2. Feat: Now it is supported more properties from Abaqus: *BEAM SECTION and *BEAM GENERAL SECTION as N2PBeamL and N2PBeam.
|
|
339
|
+
3. Feat: Overloaded `get_result_by_LCs_Incr()` to accept a list of components. It load multiple components and load cases of the same result in parallel, improving efficiency.
|
|
340
|
+
4. Feat: New property N2PComp.EqQBenMatrix that returns the equivalent stifness matrix for bending.
|
|
341
|
+
5. Feat: Added `N2PComp.EqMemProps` and `N2PComp.EqBenProps` properties to return equivalent engineering values (Ex, Ey, G, and ν) for membrane and bending behavior, respectively.
|
|
342
|
+
6. Feat: Added two new methods in `N2PModelContent`: `get_material()` and `get_property()` to search easelly for materials and properties.
|
|
343
|
+
7. Feat: new method in `N2PModelContent`: `get_elements_filtered()`. It returns a list of `N2PElement` that matches a material, property, part or type-element.
|
|
344
|
+
8. Feat: New checks in the results methods to avoid invalid parameters.
|
|
328
345
|
|
|
329
346
|
# Documentation
|
|
330
347
|
|
|
@@ -334,6 +351,7 @@ NaxToPy only use three dependeces:
|
|
|
334
351
|
- NumPy: https://numpy.org/
|
|
335
352
|
- PythonNET: https://pythonnet.github.io/
|
|
336
353
|
- Setuptools: https://setuptools.pypa.io/en/latest/index.html
|
|
354
|
+
- HDF5: https://www.h5py.org/
|
|
337
355
|
|
|
338
356
|
## Supported Files
|
|
339
357
|
|
|
@@ -542,7 +560,10 @@ For more documentation visit https://idaerosolutions.com/Home/NaxToPy
|
|
|
542
560
|
|
|
543
561
|
Reference Guide at: https://www.idaerosolutions.com/NaxToPyDoc/NaxToPy.html
|
|
544
562
|
|
|
545
|
-
|
|
546
563
|
# License
|
|
547
564
|
|
|
548
|
-
|
|
565
|
+
See the license in Python\Lib\site-packages\NaxToPy-{version}.dist-info\LICENSE or executing the command `python -m pip show NaxToPy`
|
|
566
|
+
|
|
567
|
+
-------------
|
|
568
|
+
|
|
569
|
+
<p align="center"> <img src="https://www.idaerosolutions.com/images/web/Idaero.png" alt="Idaero Icon" width=200></p><div align="center">© 2025 Idaero Solutions S.L. All rights reserved.</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[](https://idaerosolutions.com)
|
|
2
2
|
[](https://pypi.org/project/NaxToPy/)
|
|
3
|
-
[](https://www.python.org/downloads/)
|
|
3
|
+
[](https://www.python.org/downloads/)
|
|
4
4
|

|
|
5
5
|
[](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US)
|
|
6
6
|
[](https://pypi.org/project/NaxToPy/#files)
|
|
@@ -24,10 +24,10 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
24
24
|
---------------
|
|
25
25
|
|
|
26
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
|
|
27
|
+
This version is compatible with **NaxTo 2025.0**.
|
|
28
28
|
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
29
29
|
|
|
30
|
-
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/
|
|
30
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/3.0.0/#history) to find which newer version is compatible with it.
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
## Installation
|
|
@@ -199,6 +199,22 @@ is redundant. The coordinate system will prevail.
|
|
|
199
199
|
7. Feat: New properties supported: PBUSH, PFAST, PMASS, PELAS, PGAP, PWELD
|
|
200
200
|
8. BugFix: The method get_elements_attached() is fixed so when there are MPC connectors with the same ID.
|
|
201
201
|
|
|
202
|
+
### v.2.2.3
|
|
203
|
+
1. Requirement: Now NaxToPy require the package [**h5py**](https://pypi.org/project/h5py/).
|
|
204
|
+
2. Feat: N2PGetLoadFastener now can use PAG method and display format.
|
|
205
|
+
3. BugFix: Some bugs are solved in N2PGetFastener and N2PGetLoadFastener.
|
|
206
|
+
4. Feat: N2PGetLoadFastener can export results in HDF5 format.
|
|
207
|
+
5. BugFix: The filtering in the method get_result_by_LCs_Incr() in elements when results are in Corner Data is fixed.
|
|
208
|
+
|
|
209
|
+
### v.3.0.0
|
|
210
|
+
1. Feat: Now it is supported more properties from Nastran: PBAR, PBARL, PBEAM, PBEAML, PBUSH, PWELD, PELAS, PFAST, PMASS, PGAP. They are kept as N2PBeam, N2PBeamL, N2PBush, N2PWeld, N2PElas, N2PFast, N2PMass, N2PGap.
|
|
211
|
+
2. Feat: Now it is supported more properties from Abaqus: *BEAM SECTION and *BEAM GENERAL SECTION as N2PBeamL and N2PBeam.
|
|
212
|
+
3. Feat: Overloaded `get_result_by_LCs_Incr()` to accept a list of components. It load multiple components and load cases of the same result in parallel, improving efficiency.
|
|
213
|
+
4. Feat: New property N2PComp.EqQBenMatrix that returns the equivalent stifness matrix for bending.
|
|
214
|
+
5. Feat: Added `N2PComp.EqMemProps` and `N2PComp.EqBenProps` properties to return equivalent engineering values (Ex, Ey, G, and ν) for membrane and bending behavior, respectively.
|
|
215
|
+
6. Feat: Added two new methods in `N2PModelContent`: `get_material()` and `get_property()` to search easelly for materials and properties.
|
|
216
|
+
7. Feat: new method in `N2PModelContent`: `get_elements_filtered()`. It returns a list of `N2PElement` that matches a material, property, part or type-element.
|
|
217
|
+
8. Feat: New checks in the results methods to avoid invalid parameters.
|
|
202
218
|
|
|
203
219
|
# Documentation
|
|
204
220
|
|
|
@@ -208,6 +224,7 @@ NaxToPy only use three dependeces:
|
|
|
208
224
|
- NumPy: https://numpy.org/
|
|
209
225
|
- PythonNET: https://pythonnet.github.io/
|
|
210
226
|
- Setuptools: https://setuptools.pypa.io/en/latest/index.html
|
|
227
|
+
- HDF5: https://www.h5py.org/
|
|
211
228
|
|
|
212
229
|
## Supported Files
|
|
213
230
|
|
|
@@ -416,7 +433,10 @@ For more documentation visit https://idaerosolutions.com/Home/NaxToPy
|
|
|
416
433
|
|
|
417
434
|
Reference Guide at: https://www.idaerosolutions.com/NaxToPyDoc/NaxToPy.html
|
|
418
435
|
|
|
419
|
-
|
|
420
436
|
# License
|
|
421
437
|
|
|
422
|
-
|
|
438
|
+
See the license in Python\Lib\site-packages\NaxToPy-{version}.dist-info\LICENSE or executing the command `python -m pip show NaxToPy`
|
|
439
|
+
|
|
440
|
+
-------------
|
|
441
|
+
|
|
442
|
+
<p align="center"> <img src="https://www.idaerosolutions.com/images/web/Idaero.png" alt="Idaero Icon" width=200></p><div align="center">© 2025 Idaero Solutions S.L. All rights reserved.</div>
|
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "NaxToPy"
|
|
7
|
-
version = "
|
|
7
|
+
version = "3.0.0"
|
|
8
8
|
license = {file = "LICENSE"}
|
|
9
9
|
authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
dependencies = ["pythonnet>=3.0.3",
|
|
12
12
|
"numpy>=1.22.0",
|
|
13
13
|
"setuptools>=67.8.0",
|
|
14
|
-
]
|
|
14
|
+
"h5py>=3.12.1"]
|
|
15
15
|
description = "Package for postprocessing FEM results in Python"
|
|
16
16
|
readme = "README.md"
|
|
17
17
|
classifiers = ["Intended Audience :: Science/Research",
|
|
@@ -4,6 +4,7 @@ import gc
|
|
|
4
4
|
from array import array
|
|
5
5
|
import numpy as np
|
|
6
6
|
from typing import Union
|
|
7
|
+
import ctypes
|
|
7
8
|
|
|
8
9
|
from NaxToModel import N2ParamInputResults
|
|
9
10
|
from NaxToModel import N2TensorTransformation
|
|
@@ -162,7 +163,7 @@ class N2PComponent:
|
|
|
162
163
|
#resultsParameters.coordSys = -10
|
|
163
164
|
#orientationcoordinatesystem = algo
|
|
164
165
|
|
|
165
|
-
resultsParameters = self._create_n2paraminputresult(sections, aveSections, cornerData, aveNodes, variation,
|
|
166
|
+
resultsParameters = self._create_n2paraminputresult(None, sections, aveSections, cornerData, aveNodes, variation,
|
|
166
167
|
realPolar, coordsys, v1, v2)
|
|
167
168
|
results = list(
|
|
168
169
|
self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
@@ -254,7 +255,7 @@ class N2PComponent:
|
|
|
254
255
|
>>> # N2PComponent is a N2PLoadCase.get_results("STRESSES").get_component("XX")
|
|
255
256
|
>>> stress_array, where = N2PComponent.get_result_ndarray(v1=(-1, 0, 0), v2=(0, -1, 0))
|
|
256
257
|
"""
|
|
257
|
-
resultsParameters = self._create_n2paraminputresult(sections, aveSections, cornerData, aveNodes, variation,
|
|
258
|
+
resultsParameters = self._create_n2paraminputresult(None, sections, aveSections, cornerData, aveNodes, variation,
|
|
258
259
|
realPolar, coordsys, v1, v2)
|
|
259
260
|
|
|
260
261
|
results = \
|
|
@@ -399,34 +400,83 @@ class N2PComponent:
|
|
|
399
400
|
# # ------------------------------------------------------------------------------------------------------------------
|
|
400
401
|
|
|
401
402
|
# Método que devuelve un diccionario con la tupla (LC, Incr) como clave y una lista de resultados como valor -------
|
|
402
|
-
def _get_result_by_LCs_Incr(self, list_lc_incr: list[tuple["N2PLoadCase", "N2PIncrement"],...],
|
|
403
|
+
def _get_result_by_LCs_Incr(self, list_lc_incr: list[tuple["N2PLoadCase", "N2PIncrement"],...], components = None,
|
|
403
404
|
sections=None, aveSections=-1, cornerData=False, aveNodes=-1, variation=100,
|
|
404
405
|
realPolar=0, coordsys: int = -1000,
|
|
405
406
|
v1: tuple = (1,0,0), v2: tuple = (0,1,0),
|
|
406
|
-
filter_list: list = None) -> dict[tuple: list[float
|
|
407
|
+
filter_list: list = None) -> dict[tuple: list[float]]:
|
|
407
408
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
resultsParameters = self._create_n2paraminputresult(sections, aveSections, cornerData, aveNodes, variation,
|
|
414
|
-
realPolar, coordsys, v1, v2)
|
|
415
|
-
|
|
416
|
-
cs_dict = self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
417
|
-
formula, resultsParameters, 0)
|
|
409
|
+
py_dict = {} # Dictionary that is going to be returned.
|
|
410
|
+
first_shoot = True
|
|
411
|
+
i = 0
|
|
412
|
+
n_opt = 0
|
|
413
|
+
n_lcs = len(list_lc_incr)
|
|
418
414
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
415
|
+
# A first shoot with a block of 5 load cases is made. The memory used in the process wil be measured
|
|
416
|
+
# using the function _get_memory_usage(). Acording to de memory used, the optimum number of load cases
|
|
417
|
+
# per block will be claculated and the remain load cases will be launched in blocks.
|
|
418
|
+
while i < n_lcs:
|
|
419
|
+
|
|
420
|
+
if first_shoot:
|
|
421
|
+
formula = self._create_formula(list_lc_incr[0:5])
|
|
422
|
+
else:
|
|
423
|
+
formula = self._create_formula(list_lc_incr[i : i + n_opt])
|
|
424
|
+
|
|
425
|
+
if not formula:
|
|
426
|
+
return None
|
|
427
|
+
|
|
428
|
+
if components is None: components = [None]
|
|
429
|
+
for component in components:
|
|
430
|
+
resultsParameters = self._create_n2paraminputresult(component, sections, aveSections, cornerData, aveNodes, variation,
|
|
431
|
+
realPolar, coordsys, v1, v2)
|
|
432
|
+
|
|
433
|
+
if first_shoot:
|
|
434
|
+
_, available_memory, initial_memory = _get_memory_usage()
|
|
435
|
+
|
|
436
|
+
cs_dict = self._result_father._loadCase_father._modelFather._N2PModelContent__vzmodel.CalculateArrayLastResult(
|
|
437
|
+
formula, resultsParameters, 0)
|
|
438
|
+
|
|
439
|
+
if filter_list and not cornerData:
|
|
440
|
+
ii_map = [item.InternalID for item in filter_list]
|
|
441
|
+
elif filter_list and cornerData:
|
|
442
|
+
if isinstance(filter_list[0], N2PElement):
|
|
443
|
+
ii_map = list(self._result_father._loadCase_father._modelFather.elementnodal(filter_list).keys())
|
|
444
|
+
else:
|
|
445
|
+
N2PLog.Error.E234()
|
|
446
|
+
else:
|
|
447
|
+
ii_map = None
|
|
448
|
+
|
|
449
|
+
if not components[0]:
|
|
450
|
+
py_dict_aux = {
|
|
451
|
+
(int(key.split(":")[0].replace("DoF_LCD", "-").replace("DoF_LC", "")), int(key.split(":")[1][2:])) :
|
|
452
|
+
self._filter_array(np.array(value, np.float64), filter_list, None, ii_map, cornerData)
|
|
453
|
+
for key, value in dict(cs_dict[0]).items()
|
|
454
|
+
}
|
|
455
|
+
else:
|
|
456
|
+
py_dict_aux = {
|
|
457
|
+
(int(key.split(":")[0].replace("DoF_LCD", "-").replace("DoF_LC", "")), int(key.split(":")[1][2:]), component) :
|
|
458
|
+
self._filter_array(np.array(value, np.float64), filter_list, None, ii_map, cornerData)
|
|
459
|
+
for key, value in dict(cs_dict[0]).items()
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
del cs_dict
|
|
463
|
+
self._result_father._loadCase_father._modelFather.clear_results_memory()
|
|
464
|
+
py_dict.update(py_dict_aux)
|
|
465
|
+
|
|
466
|
+
# Clear memomry
|
|
467
|
+
py_dict_aux.clear()
|
|
468
|
+
gc.collect()
|
|
469
|
+
|
|
470
|
+
if first_shoot:
|
|
471
|
+
_, _, final_memory = _get_memory_usage()
|
|
472
|
+
used_memory = final_memory - initial_memory
|
|
473
|
+
# Minimum number is fixed to 100
|
|
474
|
+
used_memory = used_memory if used_memory > 100 else 100
|
|
475
|
+
n_opt = int(available_memory*0.9/used_memory*5)
|
|
476
|
+
i = 5
|
|
477
|
+
first_shoot = False
|
|
478
|
+
else:
|
|
479
|
+
i += n_opt
|
|
430
480
|
|
|
431
481
|
return py_dict
|
|
432
482
|
# ------------------------------------------------------------------------------------------------------------------
|
|
@@ -452,7 +502,7 @@ class N2PComponent:
|
|
|
452
502
|
# ------------------------------------------------------------------------------------------------------------------
|
|
453
503
|
|
|
454
504
|
# Metodo que crea el N2ParamInputResult ----------------------------------------------------------------------------
|
|
455
|
-
def _create_n2paraminputresult(self, sections, aveSections, cornerData, aveNodes, variation,
|
|
505
|
+
def _create_n2paraminputresult(self, component, sections, aveSections, cornerData, aveNodes, variation,
|
|
456
506
|
realPolar, coordsys, v1, v2) -> N2ParamInputResults:
|
|
457
507
|
|
|
458
508
|
# Aqui comprobamos que si queremos hacer una transformacion y si esta es posible:
|
|
@@ -478,19 +528,22 @@ class N2PComponent:
|
|
|
478
528
|
|
|
479
529
|
else:
|
|
480
530
|
# If coordsys doesn't match any known case, log an error and return failure
|
|
481
|
-
N2PLog.Error.E220()
|
|
482
|
-
|
|
531
|
+
msg = N2PLog.Error.E220()
|
|
532
|
+
raise Exception(msg)
|
|
483
533
|
|
|
484
534
|
elif not self.IsTransformable and (coordsys != -1000 or (v1 != (1, 0, 0) or v2 != (0, 1, 0))):
|
|
485
|
-
N2PLog.Error.E219()
|
|
486
|
-
|
|
535
|
+
msg = N2PLog.Error.E219()
|
|
536
|
+
raise Exception(msg)
|
|
487
537
|
|
|
488
538
|
else:
|
|
489
539
|
# Initializer if it is no transformable
|
|
490
540
|
resultsParameters = N2ParamInputResults.structResults(0)
|
|
491
541
|
|
|
492
542
|
# Component Selected
|
|
493
|
-
|
|
543
|
+
if component:
|
|
544
|
+
resultsParameters.Component = component
|
|
545
|
+
else:
|
|
546
|
+
resultsParameters.Component = str(self.Name)
|
|
494
547
|
|
|
495
548
|
# Entity Selection (So Far 'ALL')
|
|
496
549
|
resultsParameters.IdsEntities = ''
|
|
@@ -518,15 +571,25 @@ class N2PComponent:
|
|
|
518
571
|
sectionParam += str(section.Name) + '#'
|
|
519
572
|
else:
|
|
520
573
|
if not isinstance(sections, list):
|
|
521
|
-
N2PLog.Error.E218()
|
|
574
|
+
msg = N2PLog.Error.E218()
|
|
575
|
+
raise TypeError(msg)
|
|
576
|
+
actual_sections = {s.Name for s in self.Sections}
|
|
522
577
|
for section in sections:
|
|
523
578
|
if type(section) is N2PSection:
|
|
524
579
|
sectionParam += str(section.Name) + '#'
|
|
525
580
|
else:
|
|
526
|
-
|
|
581
|
+
if section in actual_sections:
|
|
582
|
+
sectionParam += str(section) + '#'
|
|
583
|
+
else:
|
|
584
|
+
msg = N2PLog.Error.E238(section, actual_sections)
|
|
585
|
+
raise Exception(msg)
|
|
527
586
|
|
|
528
587
|
resultsParameters.sectPoint = sectionParam
|
|
529
588
|
|
|
589
|
+
avasectionsupported = (-1, -2, -3, -4, -6)
|
|
590
|
+
if aveSections not in avasectionsupported:
|
|
591
|
+
msg = N2PLog.Error.E237(aveSections, avasectionsupported)
|
|
592
|
+
raise Exception(msg)
|
|
530
593
|
resultsParameters.aveSection = aveSections
|
|
531
594
|
|
|
532
595
|
# CornerData Selection, Average & Variation
|
|
@@ -534,8 +597,8 @@ class N2PComponent:
|
|
|
534
597
|
|
|
535
598
|
_aveIntraSupported = (0, -1, -2, -3, -6)
|
|
536
599
|
if (aveNodes not in _aveIntraSupported):
|
|
537
|
-
N2PLog.Error.E236(aveNodes, _aveIntraSupported)
|
|
538
|
-
|
|
600
|
+
msg = N2PLog.Error.E236(aveNodes, _aveIntraSupported)
|
|
601
|
+
raise Exception(msg)
|
|
539
602
|
else:
|
|
540
603
|
resultsParameters.aveIntra = aveNodes
|
|
541
604
|
|
|
@@ -549,9 +612,10 @@ class N2PComponent:
|
|
|
549
612
|
resultsParameters.variation = variation
|
|
550
613
|
|
|
551
614
|
# Real/Imaginary or Magnitude/Phase
|
|
552
|
-
|
|
553
|
-
if (realPolar not in
|
|
554
|
-
|
|
615
|
+
__complexSupported = (0, 1, 2)
|
|
616
|
+
if (realPolar not in __complexSupported):
|
|
617
|
+
msg = N2PLog.Error.E239(realPolar, __complexSupported)
|
|
618
|
+
raise Exception(msg)
|
|
555
619
|
else:
|
|
556
620
|
resultsParameters.real_cartesian_polar = realPolar
|
|
557
621
|
|
|
@@ -610,3 +674,29 @@ def _get_axis(v1: Union[tuple, np.ndarray], v2: Union[tuple, np.ndarray]) -> np.
|
|
|
610
674
|
y = np.cross(z, v1)
|
|
611
675
|
|
|
612
676
|
return np.vstack((v1, y, z))
|
|
677
|
+
|
|
678
|
+
def _get_memory_usage() -> tuple[float, float, float]:
|
|
679
|
+
"""Returns total_memory, available_memory, used_memory in MB"""
|
|
680
|
+
|
|
681
|
+
class MEMORYSTATUSEX(ctypes.Structure):
|
|
682
|
+
_fields_ = [
|
|
683
|
+
("dwLength", ctypes.c_ulong),
|
|
684
|
+
("dwMemoryLoad", ctypes.c_ulong),
|
|
685
|
+
("ullTotalPhys", ctypes.c_ulonglong),
|
|
686
|
+
("ullAvailPhys", ctypes.c_ulonglong),
|
|
687
|
+
("ullTotalPageFile", ctypes.c_ulonglong),
|
|
688
|
+
("ullAvailPageFile", ctypes.c_ulonglong),
|
|
689
|
+
("ullTotalVirtual", ctypes.c_ulonglong),
|
|
690
|
+
("ullAvailVirtual", ctypes.c_ulonglong),
|
|
691
|
+
("sullAvailExtendedVirtual", ctypes.c_ulonglong),
|
|
692
|
+
]
|
|
693
|
+
|
|
694
|
+
memory_status = MEMORYSTATUSEX()
|
|
695
|
+
memory_status.dwLength = ctypes.sizeof(MEMORYSTATUSEX)
|
|
696
|
+
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(memory_status))
|
|
697
|
+
|
|
698
|
+
total_memory = memory_status.ullTotalPhys / (1024 ** 2) # Convert to MB
|
|
699
|
+
available_memory = memory_status.ullAvailPhys / (1024 ** 2) # Convert to MB
|
|
700
|
+
used_memory = total_memory - available_memory
|
|
701
|
+
|
|
702
|
+
return total_memory, available_memory, used_memory
|
|
@@ -59,11 +59,14 @@ class N2PElement:
|
|
|
59
59
|
|
|
60
60
|
# Metodo para obtener la propiedad del elemento --------------------------------------------------------------------------------
|
|
61
61
|
@property
|
|
62
|
-
def Prop(self) -> Union[int, str]:
|
|
62
|
+
def Prop(self) -> Union[tuple[int, str], tuple[str, str]]:
|
|
63
63
|
id_prop = int(self.__info.prop)
|
|
64
64
|
if self.__model.Solver == "Abaqus":
|
|
65
65
|
id_prop = self.__model._N2PModelContent__propertyIDtoStr.get(id_prop)
|
|
66
|
-
|
|
66
|
+
part = "ASSEMBLY"
|
|
67
|
+
else:
|
|
68
|
+
part = self.PartID
|
|
69
|
+
return (id_prop, part)
|
|
67
70
|
# ------------------------------------------------------------------------------------------------------------------
|
|
68
71
|
|
|
69
72
|
# Metodo para obtener el material del elemento ---------------------------------------------------------------------
|
|
@@ -74,6 +74,7 @@ class N2PFreeBody(object):
|
|
|
74
74
|
|
|
75
75
|
# Llamada al constructor de NaxToModel
|
|
76
76
|
n2fbdsection = N2FBDSection(self.__name)
|
|
77
|
+
n2fbdsection.OpenFile = self.__model._N2PModelContent__vzmodel
|
|
77
78
|
|
|
78
79
|
# Se incluye la parte:
|
|
79
80
|
n2fbdsection.NodesPartID = self.__model._N2PModelContent__StrPartToID.get(self.__nodelist[0].PartID, 0)
|
|
@@ -101,14 +102,14 @@ class N2PFreeBody(object):
|
|
|
101
102
|
n2fbdsection.ElementsId.Add(element.ID)
|
|
102
103
|
|
|
103
104
|
# Instancio un objeto de la clase N2FBD
|
|
104
|
-
n2fbd = N2FBD(
|
|
105
|
+
n2fbd = N2FBD(n2fbdsection)
|
|
105
106
|
|
|
106
107
|
# Le añado los casos de carga y los incrementos:
|
|
107
108
|
listacasos = System.Collections.Generic.List[System.Int32]()
|
|
108
109
|
listaframes = System.Collections.Generic.List[System.Int32]()
|
|
109
110
|
listacasos.Add(self.__loadcase.ID)
|
|
110
111
|
listaframes.Add(self.__increment.ID)
|
|
111
|
-
n2fbd.
|
|
112
|
+
n2fbd.GetGpforcesLcInc(listacasos, listaframes)
|
|
112
113
|
|
|
113
114
|
# Ejecuto el métedo que calcula las resultantes (por fin)
|
|
114
115
|
# tuple_lc_inc = System.Tuple[System.Int32](self.__loadcase.ID, self.__increment.ID)
|
|
@@ -17,7 +17,6 @@ class N2PLoadCase:
|
|
|
17
17
|
NumIncrements: int.
|
|
18
18
|
ActiveN2PIncrement: N2PIncrement.
|
|
19
19
|
TypeLC: int.
|
|
20
|
-
IsComplex: bool.
|
|
21
20
|
InternalID: int.
|
|
22
21
|
"""
|
|
23
22
|
|
|
@@ -26,7 +25,6 @@ class N2PLoadCase:
|
|
|
26
25
|
"__idoriginal",
|
|
27
26
|
"__increments",
|
|
28
27
|
"__incrementsnumberlist",
|
|
29
|
-
"__iscomplex",
|
|
30
28
|
"__lctype",
|
|
31
29
|
"__namelc",
|
|
32
30
|
"__results",
|
|
@@ -37,11 +35,12 @@ class N2PLoadCase:
|
|
|
37
35
|
"__n2loadcase",
|
|
38
36
|
"__increments_by_name",
|
|
39
37
|
"__increments_by_id",
|
|
38
|
+
"__ref_temp"
|
|
40
39
|
)
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
# Constructor de N2PLoadCase ---------------------------------------------------------------------------------------
|
|
44
|
-
def __init__(self, id_lc, id_original, increments, increments_number_list,
|
|
43
|
+
def __init__(self, id_lc, id_original, increments, increments_number_list, lc_type, name, results,
|
|
45
44
|
solution_type, solver, model_father, n2loadcase):
|
|
46
45
|
'''Python Load Case Constructor
|
|
47
46
|
Input:
|
|
@@ -49,7 +48,6 @@ class N2PLoadCase:
|
|
|
49
48
|
IDOriginal: int -> Original Identification Number of the Load Case
|
|
50
49
|
Increments: list[N2Increment] -> list with instances of N2Increment
|
|
51
50
|
IncrementsNumberList: list[int] -> list with the number associated to each increment
|
|
52
|
-
IsComplex: bool -> boolean value. True if the LC is associated to a complex LC
|
|
53
51
|
LCType: str -> Type of solution applied in the load case
|
|
54
52
|
Name : str -> Name of the load case
|
|
55
53
|
Solver : str -> Solver of the load case
|
|
@@ -64,7 +62,6 @@ class N2PLoadCase:
|
|
|
64
62
|
self.__increments = [N2PIncrement(increments[i]) for i in range(0, len(increments))]
|
|
65
63
|
|
|
66
64
|
self.__incrementsnumberlist = increments_number_list
|
|
67
|
-
self.__iscomplex = is_complex
|
|
68
65
|
self.__lctype = lc_type
|
|
69
66
|
self.__namelc = name
|
|
70
67
|
self.__results = {results[i].Name: N2PResult(
|
|
@@ -73,7 +70,6 @@ class N2PLoadCase:
|
|
|
73
70
|
results[i].derivedComps,
|
|
74
71
|
results[i].Description,
|
|
75
72
|
results[i].elemTypes,
|
|
76
|
-
results[i].fcode,
|
|
77
73
|
results[i].Name,
|
|
78
74
|
self) for i in range(0, len(results))}
|
|
79
75
|
|
|
@@ -85,6 +81,7 @@ class N2PLoadCase:
|
|
|
85
81
|
|
|
86
82
|
self.__increments_by_name = dict()
|
|
87
83
|
self.__increments_by_id = dict()
|
|
84
|
+
self.__ref_temp: float = None
|
|
88
85
|
# ------------------------------------------------------------------------------------------------------------------
|
|
89
86
|
|
|
90
87
|
# Metodo para obtener el numero de identificacion interno del caso de carga ----------------------------------------
|
|
@@ -114,13 +111,6 @@ class N2PLoadCase:
|
|
|
114
111
|
return self.__increments
|
|
115
112
|
# ------------------------------------------------------------------------------------------------------------------
|
|
116
113
|
|
|
117
|
-
# Metodo para obtener si un caso de carga esta asociado a una solucion compleja ------------------------------------
|
|
118
|
-
@property
|
|
119
|
-
def IsComplex(self) -> bool:
|
|
120
|
-
"""Returns a boolean indicating whether the load case is associated to a complex solution"""
|
|
121
|
-
return bool(self.__iscomplex)
|
|
122
|
-
# ------------------------------------------------------------------------------------------------------------------
|
|
123
|
-
|
|
124
114
|
# Metodo para obtener el tipo de caso de Carga ---------------------------------------------------------------------
|
|
125
115
|
@property
|
|
126
116
|
def TypeLC(self) -> str:
|
|
@@ -206,6 +196,17 @@ class N2PLoadCase:
|
|
|
206
196
|
return str(self.__n2loadcase.PathFile)
|
|
207
197
|
# ------------------------------------------------------------------------------------------------------------------
|
|
208
198
|
|
|
199
|
+
# Propiedad que devulve la temperatura de referencia ---------------------------------------------------------------
|
|
200
|
+
@property
|
|
201
|
+
def RefTemp(self) -> float:
|
|
202
|
+
"""Returns the reference temperature of the load case"""
|
|
203
|
+
return self.__ref_temp
|
|
204
|
+
|
|
205
|
+
@RefTemp.setter
|
|
206
|
+
def RefTemp(self, value) -> None:
|
|
207
|
+
self.__ref_temp = value
|
|
208
|
+
# ------------------------------------------------------------------------------------------------------------------
|
|
209
|
+
|
|
209
210
|
# Metodo para obtener los incrementos disponibles en el caso de carga ----------------------------------------------
|
|
210
211
|
def get_increments(self, id: Union[int, str]) -> N2PIncrement:
|
|
211
212
|
''' Returns the N2PIncrement object with the id=ID or the id=Name of the Increment
|