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.
Files changed (129) hide show
  1. {naxtopy-2.2.0/src/NaxToPy.egg-info → naxtopy-2.2.1}/PKG-INFO +19 -4
  2. {naxtopy-2.2.0 → naxtopy-2.2.1}/README.md +18 -3
  3. {naxtopy-2.2.0 → naxtopy-2.2.1}/pyproject.toml +1 -1
  4. {naxtopy-2.2.0 → naxtopy-2.2.1}/setup.py +3 -1
  5. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +9 -0
  6. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PComponent.py +27 -21
  7. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PConnector.py +18 -13
  8. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PCoord.py +6 -1
  9. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PElement.py +22 -17
  10. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PFreeBody.py +14 -3
  11. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PIncrement.py +11 -7
  12. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PLoadCase.py +80 -51
  13. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PMaterial.py +23 -18
  14. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +4 -0
  15. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PNode.py +27 -22
  16. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PProperty.py +15 -10
  17. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PReport.py +13 -0
  18. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PResult.py +26 -17
  19. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PSection.py +11 -6
  20. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/N2PSet.py +11 -7
  21. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/Constants.py +3 -3
  22. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PLog.py +21 -6
  23. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/N2PModelContent.py +69 -27
  24. 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
  25. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PGetFasteners.py +6 -4
  26. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PGetLoadFasteners.py +2 -1
  27. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PtoEXE/N2PtoEXE.py +2 -2
  28. {naxtopy-2.2.0 → naxtopy-2.2.1/src/NaxToPy.egg-info}/PKG-INFO +19 -4
  29. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/SOURCES.txt +0 -1
  30. naxtopy-2.2.0/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -281
  31. {naxtopy-2.2.0 → naxtopy-2.2.1}/LICENSE +0 -0
  32. {naxtopy-2.2.0 → naxtopy-2.2.1}/setup.cfg +0 -0
  33. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
  34. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
  35. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
  36. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
  37. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
  38. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
  39. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
  40. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
  41. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
  42. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
  43. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
  44. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
  45. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
  46. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
  47. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
  48. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
  49. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
  50. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
  51. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
  52. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
  53. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
  54. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
  55. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
  56. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
  57. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
  58. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
  59. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
  60. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
  61. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
  62. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
  63. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
  64. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Classes/__init__.py +0 -0
  65. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/__init__.py +0 -0
  66. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Constants/librerias.py +0 -0
  67. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
  68. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
  69. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Errors/__init__.py +0 -0
  70. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
  71. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
  72. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
  73. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Core/__init__.py +0 -0
  74. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PAttachment.py +0 -0
  75. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PBolt.py +0 -0
  76. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PJoint.py +0 -0
  77. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/N2PPlate.py +0 -0
  78. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/Joints/__init__.py +0 -0
  79. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PFastenerAnalysis.py +0 -0
  80. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/N2PUpdateFastener.py +0 -0
  81. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
  82. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
  83. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
  84. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
  85. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
  86. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
  87. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
  88. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
  89. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
  90. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
  91. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
  92. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
  93. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
  94. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
  95. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
  96. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
  97. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
  98. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
  99. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
  100. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
  101. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
  102. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
  103. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
  104. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
  105. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
  106. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
  107. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
  108. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
  109. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
  110. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/Fasteners/__init__.py +0 -0
  111. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PEnvelope/N2PEnvelope.py +0 -0
  112. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PEnvelope/__init__.py +0 -0
  113. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/N2PtoEXE/__init__.py +0 -0
  114. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/__init__.py +0 -0
  115. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/__init__.py +0 -0
  116. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/material.py +0 -0
  117. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/common/property.py +0 -0
  118. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
  119. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
  120. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
  121. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
  122. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
  123. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
  124. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/NaxToPy.ico +0 -0
  125. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/__init__.py +0 -0
  126. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy/user_functions.txt +0 -0
  127. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
  128. {naxtopy-2.2.0 → naxtopy-2.2.1}/src/NaxToPy.egg-info/requires.txt +0 -0
  129. {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.0
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
- **CAUTION:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
149
- This version is compatible with **NaxTo 2024.3**. It is compatible with all the steps of this version (2024.3.0).
150
- Check in _Programs and Features_ the NaxTo version that is installed.
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
- **CAUTION:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
25
- This version is compatible with **NaxTo 2024.3**. It is compatible with all the steps of this version (2024.3.0).
26
- Check in _Programs and Features_ the NaxTo version that is installed.
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.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "NaxToPy"
7
- version = "2.2.0"
7
+ version = "2.2.1"
8
8
  license = {file = "LICENSE"}
9
9
  authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
10
10
  requires-python = ">=3.9"
@@ -7,7 +7,9 @@ setup(
7
7
  packages = find_packages(where="src"),
8
8
  package_dir = {"": "src"},
9
9
  include_package_data=True,
10
- data_files=[("NaxToPy", ["src/NaxToPy/NaxToPy.ico", "src/NaxToPy/user_functions.txt"])],
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.__name__ = name
35
- self.__sections__ = [N2PSection(sections[i].Name,
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.__result_father__ = result_father
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.__name__))
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.__sections__)
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.__result_father__.__loadCase_father__.__solver__
63
- result = self.__result_father__.Name
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.__result_father__.__loadCase_father__.__modelFather__._N2PModelContent__vzmodel.CalculateArrayLastResult(
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.__result_father__.__loadCase_father__.__modelFather__._N2PModelContent__vzmodel.CalculateArrayLastResult(
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__.__loadCase_father__.__modelFather__._N2PModelContent__StrPartToID) == 1:
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__.__loadCase_father__.__modelFather__.get_nodes()
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__.__loadCase_father__.__modelFather__.get_elements()
343
- # connectors = self.__result_father__.__loadCase_father__.__modelFather__.get_connectors()
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__.__loadCase_father__.__modelFather__._elementnodal().values())
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.__result_father__.__loadCase_father__.__modelFather__._N2PModelContent__vzmodel.CalculateArrayLastResult(
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.__result_father__.__loadCase_father__)
416
- N2PIncrement = type(self.__result_father__.__loadCase_father__.Increments[0])
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.__result_father__.__loadCase_father__.__activeIncrement__)
488
+ resultsParameters.IncrementID = str(self._result_father._loadCase_father._activeIncrement)
483
489
 
484
490
  # Load Case Selected
485
- resultsParameters.LoadCaseID = str(self.__result_father__.__loadCase_father__.ID)
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.__result_father__.Name)
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.__sections__:
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.__info__ = info
21
- self.__model__ = model_father
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.__info__.ID))
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.__model__._N2PModelContent__partIDtoStr.get(self.__info__.Part, -1))
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.__info__.tipo)
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.__model__._N2PModelContent__node_dict)[node]
50
- for node in list(self.__info__.pointsIndep) ]
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.__model__._N2PModelContent__node_dict)[node]
58
- for node in list(self.__info__.pointsDep)]
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.__model__._N2PModelContent__node_dict)[node]
66
- for node in list(self.__info__.gridIDs) ]
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.__info__.VTKindice))
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.__model__._N2PModelContent__node_dict)[int(self.__info__.refGrid)]
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.__model__ = model_father
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.__info__ = info
28
- self.__model__ = model_father
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.__info__.VTKindice))
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.__info__.ID))
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.__model__._N2PModelContent__partIDtoStr.get(self.__info__.partID, -1))
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.__model__._N2PModelContent__elementTypeIDtoStr.get(self.__info__.typeElementSolver, -1))
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.__info__.prop))
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.__info__.typeElementVTK))
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.__info__.nNodes))
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.__info__.nodeList)
80
+ aux = list(self.__info.nodeList)
76
81
  retornar = tuple()
77
82
  for nodo in aux:
78
- retornar += (self.__model__._N2PModelContent__node_dict.get((nodo, self.__info__.partID), -1) ,)
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.__info__.nodeList))
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.__info__.angleMaterial))
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.__model__._elements_coord_sys()
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.__model__._N2PModelContent__vzmodel,
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.__model__._N2PModelContent__vzmodel.ElementCentroids
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.__model__._N2PModelContent__vzmodel.ElementUserCoordinateSystems
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
- __forces = tuple()
32
- __moments = tuple()
33
- __fbdresult = None
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.__info__ = info
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.__info__.Name))
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.__info__.EigReal))
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.__info__.EigImg))
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.__info__.ID))
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.__info__.Time))
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.__info__.Solution))
53
+ return(str(self.__info.Solution))
50
54
  # ------------------------------------------------------------------------------------------------------------------
51
55
 
52
56
  # Special Method for Object Representation -------------------------------------------------------------------------