NaxToPy 3.1.0__tar.gz → 3.1.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 (163) hide show
  1. {naxtopy-3.1.0/src/NaxToPy.egg-info → naxtopy-3.1.1}/PKG-INFO +13 -4
  2. {naxtopy-3.1.0 → naxtopy-3.1.1}/README.md +11 -2
  3. {naxtopy-3.1.0 → naxtopy-3.1.1}/pyproject.toml +2 -2
  4. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +1 -1
  5. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PElement.py +3 -0
  6. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PMaterial.py +2 -2
  7. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PProperty.py +43 -15
  8. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Constants/Constants.py +4 -4
  9. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Errors/N2PLog.py +5 -14
  10. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/N2PModelContent.py +7 -2
  11. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +22 -1
  12. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/material.py +49 -1
  13. naxtopy-3.1.1/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py +2235 -0
  14. naxtopy-3.1.1/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Backupy.py +2000 -0
  15. naxtopy-3.1.0/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py → naxtopy-3.1.1/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Vectorisation.py +63 -88
  16. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PGetFasteners.py +4 -2
  17. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PJoint.py +77 -17
  18. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/__init__.py +1 -0
  19. {naxtopy-3.1.0 → naxtopy-3.1.1/src/NaxToPy.egg-info}/PKG-INFO +13 -4
  20. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy.egg-info/SOURCES.txt +2 -0
  21. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy.egg-info/requires.txt +1 -1
  22. {naxtopy-3.1.0 → naxtopy-3.1.1}/LICENSE +0 -0
  23. {naxtopy-3.1.0 → naxtopy-3.1.1}/setup.cfg +0 -0
  24. {naxtopy-3.1.0 → naxtopy-3.1.1}/setup.py +0 -0
  25. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
  26. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
  27. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
  28. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
  29. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
  30. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
  31. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
  32. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
  33. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
  34. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
  35. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
  36. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
  37. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
  38. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
  39. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
  40. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
  41. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
  42. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
  43. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
  44. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
  45. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
  46. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
  47. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
  48. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
  49. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
  50. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
  51. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
  52. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
  53. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
  54. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
  55. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PComponent.py +0 -0
  56. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
  57. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
  58. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PFreeBody.py +0 -0
  59. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
  60. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PLoadCase.py +0 -0
  61. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +0 -0
  62. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
  63. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
  64. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PResult.py +0 -0
  65. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
  66. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
  67. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
  68. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Classes/__init__.py +0 -0
  69. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Constants/__init__.py +0 -0
  70. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Constants/librerias.py +0 -0
  71. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
  72. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
  73. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Errors/__init__.py +0 -0
  74. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
  75. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
  76. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
  77. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Core/__init__.py +0 -0
  78. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/__init__.py +0 -0
  79. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/__init__.py +0 -0
  80. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/data_input_hdf5.py +0 -0
  81. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/hdf5.py +0 -0
  82. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/model_processor.py +0 -0
  83. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/common/property.py +0 -0
  84. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/envelope/N2PEnvelope.py +0 -0
  85. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/envelope/__init__.py +0 -0
  86. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
  87. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/airbus/__init__.py +0 -0
  88. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/airbus/core_shear_crimping_airbus.py +0 -0
  89. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/airbus/dimpling_airbus.py +0 -0
  90. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/airbus/wrinkling_airbus.py +0 -0
  91. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
  92. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
  93. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/cmh/core_shear_crimping_cmh.py +0 -0
  94. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/cmh/dimpling_cmh.py +0 -0
  95. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/cmh/wrinkling_cmh.py +0 -0
  96. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
  97. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
  98. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hsb/wrinkling_hsb.py +0 -0
  99. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hypersizer/__init__.py +0 -0
  100. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hypersizer/crimping_hypersizer.py +0 -0
  101. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hypersizer/dimpling_hypersizer.py +0 -0
  102. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/hypersizer/wrinkling_hypersizer.py +0 -0
  103. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
  104. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/handbooks/nasa/wrinkling_nasa.py +0 -0
  105. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/n2ptoexe/N2PtoEXE.py +0 -0
  106. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/n2ptoexe/__init__.py +0 -0
  107. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/__init__.py +0 -0
  108. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/__init__.py +0 -0
  109. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py +0 -0
  110. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/delamination/__init__.py +0 -0
  111. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py +0 -0
  112. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py +0 -0
  113. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/composite/sandwich/__init__.py +0 -0
  114. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py +0 -0
  115. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PCompRF.py +0 -0
  116. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PFastenerAnalysis.py +0 -0
  117. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PGetLoadFasteners.py +0 -0
  118. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PMetalRF.py +0 -0
  119. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PRivetRF.py +0 -0
  120. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/N2PUpdateFastener.py +0 -0
  121. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
  122. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
  123. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
  124. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
  125. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
  126. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
  127. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
  128. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
  129. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
  130. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
  131. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
  132. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
  133. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
  134. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
  135. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
  136. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
  137. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
  138. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
  139. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
  140. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
  141. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
  142. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
  143. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
  144. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
  145. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
  146. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
  147. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
  148. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
  149. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
  150. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/__init__.py +0 -0
  151. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PAttachment.py +0 -0
  152. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PBolt.py +0 -0
  153. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PFastenerSystem.py +0 -0
  154. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PJointAnalysisParameters.py +0 -0
  155. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/N2PPlate.py +0 -0
  156. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/fasteners/joints/__init__.py +0 -0
  157. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/metallic/__init__.py +0 -0
  158. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/metallic/neuber/N2PNeuber.py +0 -0
  159. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/Modules/static/metallic/neuber/__init__.py +0 -0
  160. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/NaxToPy.ico +0 -0
  161. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy/user_functions.txt +0 -0
  162. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
  163. {naxtopy-3.1.0 → naxtopy-3.1.1}/src/NaxToPy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: NaxToPy
3
- Version: 3.1.0
3
+ Version: 3.1.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
@@ -118,7 +118,7 @@ Classifier: Topic :: Scientific/Engineering
118
118
  Requires-Python: >=3.9
119
119
  Description-Content-Type: text/markdown
120
120
  License-File: LICENSE
121
- Requires-Dist: pythonnet>=3.0.3
121
+ Requires-Dist: pythonnet>=3.0.4
122
122
  Requires-Dist: numpy>=1.22.0
123
123
  Requires-Dist: setuptools>=67.8.0
124
124
  Requires-Dist: h5py>=3.12.1
@@ -357,12 +357,21 @@ is redundant. The coordinate system will prevail.
357
357
  10. Feat: `N2PLoadModelContent.SetList` is now an encapsulated property.
358
358
  11. Refactor: the method `N2PLoadModelContent.get_result_by_LCs_Incr()` is optimized.
359
359
 
360
+ ### v.3.1.1
361
+ 1. BugFix: Small error fixed in `N2PNeuber`.
362
+ 2. Feat: New Failure criteria in `N2PCompositeFailure` -> Fiber Mode Concept
363
+ 3. BugFix: The property `LevelList` of the abstract class `N2PLog` is now an attribute to be compatible with Python 3.13.
364
+ 4. Feat: New class `N2PropMisc` for properties that are not supported.
365
+ 5. BugFix: Small errors in `N2PGetFasteners`.
366
+ 6. BugFix: Several errors are fixed for properties and materials when reading **InputFileAbaqus** (inp) and **Abaqus** (odb).
367
+ 7. Feat: Now, when a executable is created, if the version of NaxTo of the exe matches the instaled, it will use the **installed** NaxTo libraries. If the version doesn't match or NaxTo is not installed, **exe** NaxTo libraries will be used.
368
+ 8. BugFix: the keyword `THRU` is now supported in the bulk data card `SPC1` when reading from a Nastran Input File.
360
369
 
361
370
  # Documentation
362
371
 
363
372
  **NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
364
373
 
365
- NaxToPy only use three dependeces:
374
+ NaxToPy only use four dependeces:
366
375
  - NumPy: https://numpy.org/
367
376
  - PythonNET: https://pythonnet.github.io/
368
377
  - Setuptools: https://setuptools.pypa.io/en/latest/index.html
@@ -573,7 +582,7 @@ def dataframe_results(model: "N2PModelContent", result: "N2PResult", sections=No
573
582
  ##
574
583
  For more documentation visit https://idaerosolutions.com/Home/NaxToPy
575
584
 
576
- Reference Guide at: https://www.idaerosolutions.com/NaxToPyDoc/NaxToPy.html
585
+ Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/NaxToPy/3.1.0/index.html
577
586
 
578
587
  # License
579
588
 
@@ -229,12 +229,21 @@ is redundant. The coordinate system will prevail.
229
229
  10. Feat: `N2PLoadModelContent.SetList` is now an encapsulated property.
230
230
  11. Refactor: the method `N2PLoadModelContent.get_result_by_LCs_Incr()` is optimized.
231
231
 
232
+ ### v.3.1.1
233
+ 1. BugFix: Small error fixed in `N2PNeuber`.
234
+ 2. Feat: New Failure criteria in `N2PCompositeFailure` -> Fiber Mode Concept
235
+ 3. BugFix: The property `LevelList` of the abstract class `N2PLog` is now an attribute to be compatible with Python 3.13.
236
+ 4. Feat: New class `N2PropMisc` for properties that are not supported.
237
+ 5. BugFix: Small errors in `N2PGetFasteners`.
238
+ 6. BugFix: Several errors are fixed for properties and materials when reading **InputFileAbaqus** (inp) and **Abaqus** (odb).
239
+ 7. Feat: Now, when a executable is created, if the version of NaxTo of the exe matches the instaled, it will use the **installed** NaxTo libraries. If the version doesn't match or NaxTo is not installed, **exe** NaxTo libraries will be used.
240
+ 8. BugFix: the keyword `THRU` is now supported in the bulk data card `SPC1` when reading from a Nastran Input File.
232
241
 
233
242
  # Documentation
234
243
 
235
244
  **NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
236
245
 
237
- NaxToPy only use three dependeces:
246
+ NaxToPy only use four dependeces:
238
247
  - NumPy: https://numpy.org/
239
248
  - PythonNET: https://pythonnet.github.io/
240
249
  - Setuptools: https://setuptools.pypa.io/en/latest/index.html
@@ -445,7 +454,7 @@ def dataframe_results(model: "N2PModelContent", result: "N2PResult", sections=No
445
454
  ##
446
455
  For more documentation visit https://idaerosolutions.com/Home/NaxToPy
447
456
 
448
- Reference Guide at: https://www.idaerosolutions.com/NaxToPyDoc/NaxToPy.html
457
+ Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/NaxToPy/3.1.0/index.html
449
458
 
450
459
  # License
451
460
 
@@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "NaxToPy"
7
- version = "3.1.0"
7
+ version = "3.1.1"
8
8
  license = {file = "LICENSE"}
9
9
  authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
10
10
  requires-python = ">=3.9"
11
- dependencies = ["pythonnet>=3.0.3",
11
+ dependencies = ["pythonnet>=3.0.4",
12
12
  "numpy>=1.22.0",
13
13
  "setuptools>=67.8.0",
14
14
  "h5py>=3.12.1"]
@@ -21,4 +21,4 @@ class N2PKeywordSURFACE(N2PKeyword):
21
21
  @property
22
22
  def EntityList(self) -> list[N2PEntity, ]:
23
23
  """List of entities (based on Type)"""
24
- return list(self._N2PKeyword__info.EntityList)
24
+ return [self._N2PKeyword__dictEntityToN2P[i] for i in self._N2PKeyword__info.EntityList]
@@ -69,6 +69,9 @@ class N2PElement:
69
69
  if self.__model.Solver == "Abaqus":
70
70
  id_prop = self.__model._N2PModelContent__propertyIDtoStr.get(id_prop)
71
71
  part = "ASSEMBLY"
72
+ elif self.__model.Solver == "InputFileAbaqus":
73
+ id_prop = self.__model._N2PModelContent__propertyIDtoStr.get(id_prop)
74
+ part = self.PartID
72
75
  else:
73
76
  part = self.PartID
74
77
  return (id_prop, part)
@@ -28,7 +28,7 @@ class N2PMaterial(ABC):
28
28
  """
29
29
  ID of the material.
30
30
  """
31
- if self.__model__.Solver == "Abaqus":
31
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
32
32
  return self.__info__.Name
33
33
  else:
34
34
  return self.__info__.ID
@@ -63,7 +63,7 @@ class N2PMaterial(ABC):
63
63
 
64
64
  # Special Method for Object Representation -------------------------------------------------------------------------
65
65
  def __repr__(self):
66
- if self.__model__.Solver == "Abaqus":
66
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
67
67
  reprs = f"N2PMaterial(\'{self.ID}\', \'{self.MatType}\')"
68
68
  else:
69
69
  reprs = f"N2PMaterial({self.ID}, \'{self.MatType}\')"
@@ -66,7 +66,7 @@ class N2PProperty(ABC):
66
66
 
67
67
  # Special Method for Object Representation -------------------------------------------------------------------------
68
68
  def __repr__(self):
69
- if self.__model.Solver == "Abaqus":
69
+ if self.__model.Solver == "Abaqus" or self.__model.Solver == "InputFileAbaqus":
70
70
  reprs = f"N2PProperty(\'{self.Name}\', \'{self.PropertyType}\')"
71
71
  else:
72
72
  reprs = f"N2PProperty({self.ID}, \'{self.PropertyType}\')"
@@ -123,6 +123,8 @@ class N2PComp(N2PProperty):
123
123
  def MatID(self) -> tuple[tuple[int, str]]:
124
124
  """Tuple with the solver tuple of thr id and part of the material for each ply of the laminate"""
125
125
  part = self.PartID
126
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
127
+ return tuple((self.__model__._N2PModelContent__materialsID[mat], part) for mat in self.__info__.Mat)
126
128
  return tuple((mat, part) for mat in self.__info__.Mat)
127
129
 
128
130
  @property
@@ -386,16 +388,22 @@ class N2PShell(N2PProperty):
386
388
  @property
387
389
  def MatMemID(self) -> Union[tuple[int, str], tuple[str, str]]:
388
390
  """Material index for the membrane behavior"""
391
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
392
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatMemID], "ASSEMBLY")
389
393
  return (self.__info__.MatMemID, self.PartID)
390
394
 
391
395
  @property
392
396
  def MatBenID(self) -> Union[tuple[int, str], tuple[str, str]]:
393
397
  """Material index for the bending behavior"""
398
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
399
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatBenID], "ASSEMBLY")
394
400
  return (self.__info__.MatBenID, self.PartID)
395
401
 
396
402
  @property
397
403
  def MatSheID(self) -> Union[tuple[int, str], tuple[str, str]]:
398
404
  """Material index for the shell behavior"""
405
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
406
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatSheID], "ASSEMBLY")
399
407
  return (self.__info__.MatSheID, self.PartID)
400
408
 
401
409
  @property
@@ -427,6 +435,8 @@ class N2PShell(N2PProperty):
427
435
  @property
428
436
  def MatCouplID(self) -> Union[tuple[int, str], tuple[str, str]]:
429
437
  """Material identification number for membrane-bending coupling"""
438
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
439
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatCoupl], "ASSEMBLY")
430
440
  return (self.__info__.MatCoupl, self.PartID)
431
441
  # ----------------------------------------------------------------------------------------------------------------------
432
442
 
@@ -448,6 +458,8 @@ class N2PSolid(N2PProperty):
448
458
  @property
449
459
  def MatID(self) -> Union[tuple[int, str], tuple[str, str]]:
450
460
  """Index of the material of the solid property"""
461
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
462
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatID], "ASSEMBLY")
451
463
  return (self.__info__.MatID, self.PartID)
452
464
 
453
465
  @property
@@ -492,10 +504,9 @@ class N2PRod(N2PProperty):
492
504
  @property
493
505
  def MatID(self) -> Union[tuple[int, str], tuple[str, str]]:
494
506
  """Material identification number."""
495
- mat_id = self.__info__.MatID
496
- if self.__model__.Solver == "Abaqus":
497
- mat_id = self.__model__.MaterialDict[(mat_id, "ASSEMBLY")].ID
498
- return (mat_id, self.PartID)
507
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
508
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatID], "ASSEMBLY")
509
+ return (self.__info__.MatID, self.PartID)
499
510
 
500
511
  @property
501
512
  def Area(self) -> float:
@@ -534,8 +545,8 @@ class N2PBeam(N2PProperty):
534
545
  def MatID(self) -> Union[tuple[int, str], tuple[str, str]]:
535
546
  """Material identification number."""
536
547
  mat_id = self.__info__.MatID
537
- if self.__model__.Solver == "Abaqus" and mat_id != -1:
538
- mat_id = self.__model__.MaterialDict[(mat_id, "ASSEMBLY")].ID
548
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
549
+ return (self.__model__._N2PModelContent__materialsID[mat_id], "ASSEMBLY")
539
550
  elif mat_id == -1:
540
551
  return N2PLog.Warning.W702()
541
552
  return (mat_id, self.PartID)
@@ -899,10 +910,9 @@ class N2PWeld(N2PProperty):
899
910
  """
900
911
  Material identification number.
901
912
  """
902
- mat_id = self.__info__.MatID
903
- if self.__model__.Solver == "Abaqus":
904
- mat_id = self.__model__.MaterialDict[(mat_id, "ASSEMBLY")].ID
905
- return (mat_id, self.PartID)
913
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
914
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatID], "ASSEMBLY")
915
+ return (self.__info__.MatID, self.PartID)
906
916
 
907
917
  @property
908
918
  def Diameter(self) -> float:
@@ -957,10 +967,9 @@ class N2PBeamL(N2PProperty):
957
967
  """
958
968
  Material identification number.
959
969
  """
960
- mat_id = self.__info__.MatID
961
- if self.__model__.Solver == "Abaqus":
962
- mat_id = self.__model__.MaterialDict[(mat_id, "ASSEMBLY")].ID
963
- return (mat_id, self.PartID)
970
+ if self.__model__.Solver == "Abaqus" or self.__model__.Solver == "InputFileAbaqus":
971
+ return (self.__model__._N2PModelContent__materialsID[self.__info__.MatID], "ASSEMBLY")
972
+ return (self.__info__.MatID, self.PartID)
964
973
 
965
974
  @property
966
975
  def Group(self) -> str:
@@ -1005,3 +1014,22 @@ class N2PBeamL(N2PProperty):
1005
1014
  return self.__info__.FractionalDistance
1006
1015
 
1007
1016
 
1017
+ class N2PPropMisc(N2PProperty):
1018
+ """
1019
+ Class representing the undefined properties (equivalent to N2MatMisc in C#).
1020
+ It derives from N2PProperty.
1021
+ """
1022
+ def __init__(self, information, model_father):
1023
+ """
1024
+ Constructor for N2PMatMisc, mapping the properties from the C# class.
1025
+ """
1026
+ super().__init__(information, model_father)
1027
+ self.__info__ = information
1028
+ self.__model__ = model_father
1029
+
1030
+ @property
1031
+ def QualitiesDict(self) -> dict[str, float]:
1032
+ """
1033
+ Dictionary with the material properties and their values.
1034
+ """
1035
+ return self.__info__.QualitiesDict
@@ -1,15 +1,15 @@
1
1
  """Constants of the NaxToPy package"""
2
2
 
3
3
  # NaxToPy Version
4
- VERSION = "3.1.0"
4
+ VERSION = "3.1.1"
5
5
 
6
6
  # Supported for Naxto:
7
7
  NAXTO_VERSION = '2025R1'
8
- NAXTO_STEP = "0"
9
- NAXTO_ADVANCED_INSTALLER = "2025.1.0"
8
+ NAXTO_STEP = "1"
9
+ NAXTO_ADVANCED_INSTALLER = "2025.1.1"
10
10
 
11
11
  # Assembly version of NaxToModel.dll
12
- VIZZER_COMPATIBILITY = ("5.1.0.0")
12
+ VIZZER_COMPATIBILITY = ("5.1.0.1")
13
13
  """Tuple with the compatible versions of NaxToModel.dll"""
14
14
 
15
15
  # PYTHON EXTERNO ----------------------------------------------------------------------------------
@@ -24,7 +24,7 @@ class N2PLog(ABC):
24
24
  flv = "INFO"
25
25
  clv = "WARNING"
26
26
 
27
- __levellist = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
27
+ LevelList = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
28
28
 
29
29
  # Nivel de registro del archivo .log
30
30
  if flv == "DEBUG":
@@ -397,7 +397,7 @@ own information message. Use the following structure as a standard message (I +
397
397
  def I109() -> None:
398
398
  """ Information given when the NaxToModel library is load correctly.
399
399
  """
400
- message = f"I109: The library NaxToModel.dll was load successfully."
400
+ message = f"I109: Library NaxToModel.dll loaded successfully."
401
401
  N2PLog._N2PLog__logger.info(message)
402
402
 
403
403
  @staticmethod
@@ -861,7 +861,7 @@ own information message. Use the following structure as a standard message (I +
861
861
  @staticmethod
862
862
  def W527(input, instance) -> None:
863
863
  '''Warning raised when an input is of a wrong instance.'''
864
- message = f"W537: Attribute {input} is not a {instance} instance. The default value will be used."
864
+ message = f"W527: Attribute {input} is not a {instance} instance. The default value will be used."
865
865
  N2PLog._N2PLog__logger.warning(message)
866
866
 
867
867
  @staticmethod
@@ -2042,14 +2042,14 @@ own information message. Use the following structure as a standard message (I +
2042
2042
 
2043
2043
  @staticmethod
2044
2044
  def E674(ele) -> None:
2045
- ''' Error raised when a Neuber method can not be applicated
2045
+ ''' Error raised when Neuber method can not be applicated in an element.
2046
2046
  '''
2047
2047
  message = "E674: Error raised when a Neuber method can not be applicated to the ele" + str(ele)
2048
2048
  N2PLog._N2PLog__logger.error(message)
2049
2049
 
2050
2050
  @staticmethod
2051
2051
  def E675() -> None:
2052
- ''' Error raised when a Neuber method can not be applicated
2052
+ ''' Error raised when a Neuber method can not be applicated in an element.
2053
2053
  '''
2054
2054
  message = "E674: Error raised when a Neuber method can not be applicated to the ele"
2055
2055
  N2PLog._N2PLog__logger.error(message)
@@ -2827,15 +2827,6 @@ own information message. Use the following structure as a standard message (I +
2827
2827
  # Nota: Estos metodos cambian los atributos del objeto que se ha instanciado como clase N2PLog y que se
2828
2828
  # ha guardado dentro del atributo _ De ahí que estos metodos no vayan como propiedades.
2829
2829
 
2830
- # Metodo para obtener la lista de niveles del registro -------------------------------------------------------------
2831
- @classmethod
2832
- @property
2833
- def LevelList(cls) -> list[str]:
2834
- """Property that retuns the list with the message levels in the log"""
2835
- return cls.__levellist
2836
-
2837
- # ------------------------------------------------------------------------------------------------------------------
2838
-
2839
2830
  # Metodo para obtener directorio donde se guarda el archivo.log ----------------------------------------------------
2840
2831
  @classmethod
2841
2832
  def get_directory(cls) -> str:
@@ -18,7 +18,7 @@ from NaxToPy.Core.Classes.N2PCoord import N2PCoord
18
18
  from NaxToPy.Core.Classes.N2PConnector import N2PConnector
19
19
  from NaxToPy.Core.Classes.N2PFreeBody import N2PFreeBody
20
20
  from NaxToPy.Core.Classes.N2PMaterial import N2PMaterial, N2PMatE, N2PMatMisc, N2PMatI
21
- from NaxToPy.Core.Classes.N2PProperty import N2PProperty, N2PComp, N2PShell, N2PSolid, N2PBeam, N2PRod, N2PBush, N2PFast, N2PMass, N2PElas, N2PGap, N2PWeld, N2PBeamL
21
+ from NaxToPy.Core.Classes.N2PProperty import N2PProperty, N2PComp, N2PShell, N2PSolid, N2PBeam, N2PRod, N2PBush, N2PFast, N2PMass, N2PElas, N2PGap, N2PWeld, N2PBeamL, N2PPropMisc
22
22
  from NaxToPy.Core.Classes.N2PSet import N2PSet
23
23
  from NaxToPy.Core.Classes.N2PNastranInputData import N2PNastranInputData, CONSTRUCTDICT, N2PCard
24
24
  from NaxToPy.Core.Constants.Constants import BINARY_EXTENSIONS
@@ -180,7 +180,7 @@ class N2PModelContent:
180
180
  self.__elementTypeStrtoID = dict(self.__vzmodel.elementTypeID)
181
181
  self.__propertiesID = dict(self.__vzmodel.propertiesID)
182
182
  self.__StrPartToID = dict(self.__vzmodel.partID)
183
- self.__materialsID = {(key.Item1, key.Item2): value for key, value in dict(self.__vzmodel.materialsID).items()}
183
+ self.__materialsID = None
184
184
  self.__ConnectorsID = dict(self.__vzmodel.ConnectorsID)
185
185
  # --------------------------------------------------------------------------------------------------------------
186
186
 
@@ -456,6 +456,9 @@ class N2PModelContent:
456
456
  if not self.__material_dict:
457
457
 
458
458
  dictmateriales = dict(self.__vzmodel.N2MatDict)
459
+ if self.Solver == "Abaqus" or self.Solver == "InputFileAbaqus":
460
+ # For Abaqus, the materials are stored as a dict with str keys
461
+ self.__materialsID = list(self.__vzmodel.DictMatToStr)
459
462
 
460
463
  for key, value in dictmateriales.items():
461
464
  if self.Solver == "Nastran" or self.Solver == "H3DOptistruct" or self.Solver == "InputFileNastran" or self.Solver == "InputFileH3DOptistruct":
@@ -553,6 +556,8 @@ class N2PModelContent:
553
556
 
554
557
  elif value.GetType().ToString() == 'NaxToModel.N2BeamL':
555
558
  self.__property_dict[key] = N2PBeamL(value, self)
559
+ elif value.GetType().ToString() == 'NaxToModel.N2PropMisc':
560
+ self.__property_dict[key] = N2PPropMisc(value, self)
556
561
 
557
562
  t2 = time.time()
558
563
  N2PLog.Debug.D100("N2PProperty Dictionary", t2 - t1)
@@ -145,6 +145,21 @@ def _write_register() -> None:
145
145
  finally:
146
146
  naxto_key.Close()
147
147
 
148
+ def _check_naxto_version() -> bool:
149
+ """Returns true if the NaxTo version is compible with NaxToPy checking the windows register"""
150
+ try:
151
+ naxto_paths = _read_register(winreg.HKEY_LOCAL_MACHINE) or _read_register(winreg.HKEY_CURRENT_USER)
152
+ if naxto_paths is None:
153
+ return False
154
+
155
+ compatible_path = _check_compatibility(naxto_paths)
156
+ if compatible_path is None:
157
+ return False
158
+
159
+ return True
160
+
161
+ except Exception as e:
162
+ return False
148
163
 
149
164
  def _clean_register() -> None:
150
165
  """Removes temporary registry entries created during EXE runtimes."""
@@ -211,6 +226,11 @@ def __reference_finder() -> None:
211
226
  naxtomodel_path = sys._MEIPASS + "\\bin\\NaxToModel.dll"
212
227
  _write_register()
213
228
  N2PLog.Info.I115()
229
+ elif not _check_naxto_version():
230
+ _clean_register()
231
+ naxtomodel_path = sys._MEIPASS + "\\bin\\NaxToModel.dll"
232
+ _write_register()
233
+ N2PLog.Info.I115()
214
234
  else:
215
235
  N2PLog.Info.I116()
216
236
 
@@ -236,4 +256,5 @@ def __reference_finder() -> None:
236
256
  else:
237
257
  N2PLog.Info.I109()
238
258
  N2PLog.Debug.D101(naxtomodel_path)
239
-
259
+
260
+ N2PLog.Info.I100()
@@ -738,6 +738,10 @@ class Orthotropic(Material):
738
738
  '_tref',
739
739
  '_ge',
740
740
  '_allowableORTO',
741
+ '_mu21',
742
+ '_mu2',
743
+ '_b21',
744
+ '_b2',
741
745
  )
742
746
 
743
747
 
@@ -764,6 +768,10 @@ class Orthotropic(Material):
764
768
  self._youngz = None
765
769
  self._poissonyz = None
766
770
  self._poissonxz = None
771
+ self._mu21 = None
772
+ self._mu2 = None
773
+ self._b21 = None
774
+ self._b2 = None
767
775
  self._allowableORTO = AllowablesORTO()
768
776
  self._allowableORTO._shared_xcompressive = n2p_material.Xc
769
777
  self._allowableORTO._shared_ycompressive = n2p_material.Yc
@@ -903,6 +911,39 @@ class Orthotropic(Material):
903
911
  return self._ge
904
912
  # ------------------------------------------------------------------------------------------------------------------
905
913
 
914
+ # Method to obtain the inter fiber friction property in transverse-longitudinal direction (fiber-wise) -----------------------------------------------------
915
+ @property
916
+ def mu21(self) -> float:
917
+ """ Returns inter fiber friction property in transverse-longitudinal direction. """
918
+ return self._mu21
919
+ # ------------------------------------------------------------------------------------------------------------------
920
+
921
+ # Method to obtain the inter fiber friction property in transverse direction (fiber-wise) -----------------------------------------------------
922
+ @property
923
+ def mu2(self) -> float:
924
+ """ Returns inter fiber friction property in transverse direction.
925
+ """
926
+ return self._mu2
927
+ # ------------------------------------------------------------------------------------------------------------------
928
+
929
+ # Method to obtain the inter fiber friction coefficient in transverse-longitudinal direction (fiber-wise) -----------------------------------------------------
930
+ @property
931
+ def b21(self) -> float:
932
+ """ Returns inter fiber friction coefficient in transverse-longitudinal direction.
933
+ """
934
+ self._b21 = self.mu21
935
+ return self._b21
936
+ # ------------------------------------------------------------------------------------------------------------------
937
+
938
+ # Method to obtain the inter fiber friction coefficient in transverse direction (fiber-wise) -----------------------------------------------------
939
+ @property
940
+ def b2(self) -> float:
941
+ """ Returns inter fiber friction coefficient in transverse-longitudinal direction.
942
+ """
943
+ self._b2 = 1/(1-self.mu2)
944
+ return self._b2
945
+
946
+
906
947
  # Setters ----------------------------------------------------------------------------------------------------------
907
948
  @YoungX.setter
908
949
  def YoungX(self, value: float) -> None:
@@ -985,7 +1026,14 @@ class Orthotropic(Material):
985
1026
  return (f"Orthotropic({self.ID},'0')")
986
1027
  # ------------------------------------------------------------------------------------------------------------------
987
1028
 
988
-
1029
+ @mu21.setter
1030
+ def mu21(self, value) -> None:
1031
+ self._mu21 = value
1032
+ # ------------------------------------------------------------------------------------------------------------------
1033
+
1034
+ @mu2.setter
1035
+ def mu2(self, value) -> None:
1036
+ self._mu2 = value
989
1037
 
990
1038
 
991
1039