NaxToPy 3.2.1__tar.gz → 3.2.3__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-3.2.1/src/NaxToPy.egg-info → naxtopy-3.2.3}/PKG-INFO +18 -4
- {naxtopy-3.2.1 → naxtopy-3.2.3}/README.md +15 -1
- {naxtopy-3.2.1 → naxtopy-3.2.3}/pyproject.toml +3 -3
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PComponent.py +2 -2
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +122 -54
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/Constants.py +4 -4
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PLog.py +17 -1
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/N2PModelContent.py +48 -23
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/data_input_hdf5.py +20 -1
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/hdf5.py +3 -3
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/property.py +13 -11
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py +3 -3
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PGetFasteners.py +3 -3
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PGetLoadFasteners.py +4 -32
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PBolt.py +1 -1
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PJoint.py +2 -4
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/neuber/N2PNeuber.py +215 -74
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/__init__.py +1 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3/src/NaxToPy.egg-info}/PKG-INFO +18 -4
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy.egg-info/SOURCES.txt +0 -2
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy.egg-info/requires.txt +2 -2
- naxtopy-3.2.1/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Backupy.py +0 -2000
- naxtopy-3.2.1/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Vectorisation.py +0 -2742
- {naxtopy-3.2.1 → naxtopy-3.2.3}/LICENSE +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/setup.cfg +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/setup.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PElement.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PFreeBody.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PLoadCase.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PMaterial.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PProperty.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PResult.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/librerias.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Core/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/material.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/model_processor.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/envelope/N2PEnvelope.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/envelope/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/core_shear_crimping_airbus.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/dimpling_airbus.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/wrinkling_airbus.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/core_shear_crimping_cmh.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/dimpling_cmh.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/wrinkling_cmh.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hsb/wrinkling_hsb.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/crimping_hypersizer.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/dimpling_hypersizer.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/wrinkling_hypersizer.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/nasa/wrinkling_nasa.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/n2ptoexe/N2PtoEXE.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/n2ptoexe/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/numericaltools/N2PCoefficientsFinder.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/numericaltools/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/delamination/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/sandwich/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PCompRF.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PFastenerAnalysis.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PMetalRF.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PRivetRF.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PUpdateFastener.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PAttachment.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PFastenerSystem.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PJointAnalysisParameters.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PPlate.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/neuber/__init__.py +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/NaxToPy.ico +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/user_functions.txt +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
- {naxtopy-3.2.1 → naxtopy-3.2.3}/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.2.
|
|
3
|
+
Version: 3.2.3
|
|
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
|
|
@@ -18,9 +18,9 @@ Requires-Python: >=3.9
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: pythonnet>=3.0.4
|
|
21
|
-
Requires-Dist: numpy>=1.
|
|
21
|
+
Requires-Dist: numpy>=1.25.1
|
|
22
22
|
Requires-Dist: setuptools>=67.8.0
|
|
23
|
-
Requires-Dist: h5py>=3.
|
|
23
|
+
Requires-Dist: h5py>=3.8.0
|
|
24
24
|
Dynamic: download-url
|
|
25
25
|
Dynamic: home-page
|
|
26
26
|
Dynamic: license-file
|
|
@@ -285,9 +285,23 @@ is redundant. The coordinate system will prevail.
|
|
|
285
285
|
|
|
286
286
|
### v.3.2.1
|
|
287
287
|
1. BugFix: Derived components are now founded right while using `get_result_by_LCs_Incr()`.
|
|
288
|
-
|
|
288
|
+
2. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
|
|
289
289
|
3. BugFix: Now symbols like "\" or "-" are supported as part of the name of Components and Load Cases while creating new derived Components and Derived Load Cases.
|
|
290
290
|
|
|
291
|
+
### v.3.2.2
|
|
292
|
+
1. BugFix: Logs message are not printed double when the buffer is called several times.
|
|
293
|
+
2. BugFix: `get_load_case()` now returns correctly the load cases if it is called before and after calling `import_results_from_files()`.
|
|
294
|
+
3. Refactor: New structure for the h5 files generated by N2PNeuber module.
|
|
295
|
+
4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly read from a bdf file.
|
|
296
|
+
|
|
297
|
+
### v.3.2.3
|
|
298
|
+
1. Refactor: lower minimum required versions of NumPy and HDF5.
|
|
299
|
+
- numpy >= 1.25.1
|
|
300
|
+
- h5py >= 3.8.0
|
|
301
|
+
2. Feat: Now is possible to read Nastran and Optistruct **SET**s. They are loaded as `N2Set`.
|
|
302
|
+
3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
|
|
303
|
+
4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
|
|
304
|
+
|
|
291
305
|
# Documentation
|
|
292
306
|
|
|
293
307
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -258,9 +258,23 @@ is redundant. The coordinate system will prevail.
|
|
|
258
258
|
|
|
259
259
|
### v.3.2.1
|
|
260
260
|
1. BugFix: Derived components are now founded right while using `get_result_by_LCs_Incr()`.
|
|
261
|
-
|
|
261
|
+
2. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
|
|
262
262
|
3. BugFix: Now symbols like "\" or "-" are supported as part of the name of Components and Load Cases while creating new derived Components and Derived Load Cases.
|
|
263
263
|
|
|
264
|
+
### v.3.2.2
|
|
265
|
+
1. BugFix: Logs message are not printed double when the buffer is called several times.
|
|
266
|
+
2. BugFix: `get_load_case()` now returns correctly the load cases if it is called before and after calling `import_results_from_files()`.
|
|
267
|
+
3. Refactor: New structure for the h5 files generated by N2PNeuber module.
|
|
268
|
+
4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly read from a bdf file.
|
|
269
|
+
|
|
270
|
+
### v.3.2.3
|
|
271
|
+
1. Refactor: lower minimum required versions of NumPy and HDF5.
|
|
272
|
+
- numpy >= 1.25.1
|
|
273
|
+
- h5py >= 3.8.0
|
|
274
|
+
2. Feat: Now is possible to read Nastran and Optistruct **SET**s. They are loaded as `N2Set`.
|
|
275
|
+
3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
|
|
276
|
+
4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
|
|
277
|
+
|
|
264
278
|
# Documentation
|
|
265
279
|
|
|
266
280
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "NaxToPy"
|
|
7
|
-
version = "3.2.
|
|
7
|
+
version = "3.2.3"
|
|
8
8
|
license = {text = "MIT"}
|
|
9
9
|
authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
dependencies = ["pythonnet>=3.0.4",
|
|
12
|
-
"numpy>=1.
|
|
12
|
+
"numpy>=1.25.1",
|
|
13
13
|
"setuptools>=67.8.0",
|
|
14
|
-
"h5py>=3.
|
|
14
|
+
"h5py>=3.8.0"]
|
|
15
15
|
description = "Package for postprocessing FEM results in Python"
|
|
16
16
|
readme = "README.md"
|
|
17
17
|
classifiers = ["Intended Audience :: Science/Research",
|
|
@@ -150,7 +150,7 @@ class N2PComponent:
|
|
|
150
150
|
* -10: User defined coordinate system
|
|
151
151
|
* -20: Element/Node user defined coordinate system
|
|
152
152
|
* -1000: Analysis coordinate system (default)
|
|
153
|
-
*
|
|
153
|
+
* >0: Solver ID of predefined coordinate system
|
|
154
154
|
|
|
155
155
|
.. note::
|
|
156
156
|
|
|
@@ -251,7 +251,7 @@ class N2PComponent:
|
|
|
251
251
|
* -10: User defined coordinate system
|
|
252
252
|
* -20: Element/Node user defined coordinate system
|
|
253
253
|
* -1000: Analysis coordinate system (default)
|
|
254
|
-
*
|
|
254
|
+
* >0: Solver ID of predefined coordinate system
|
|
255
255
|
|
|
256
256
|
.. note::
|
|
257
257
|
|
|
@@ -6,60 +6,86 @@ from typing import Union, overload, Literal
|
|
|
6
6
|
|
|
7
7
|
from NaxToPy.Core.Errors.N2PLog import N2PLog
|
|
8
8
|
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
9
11
|
class _LazyList(list):
|
|
10
12
|
"""
|
|
11
13
|
A lazy list connected to a LazyDict. The items are lazily instantiated
|
|
12
|
-
from the LazyDict when accessed. It is immutable
|
|
14
|
+
from the LazyDict when accessed. It is immutable.
|
|
13
15
|
"""
|
|
14
16
|
def __init__(self, lazy_dict):
|
|
15
|
-
|
|
17
|
+
# Extract the C# object references (not the tuple keys!)
|
|
18
|
+
self._cs_refs = []
|
|
19
|
+
for hash_code, cs_list in lazy_dict._hash_to_cs_list.items():
|
|
20
|
+
self._cs_refs.extend(cs_list)
|
|
21
|
+
|
|
22
|
+
super().__init__([None] * len(self._cs_refs)) # Initialize with placeholders
|
|
16
23
|
self._lazy_dict = lazy_dict
|
|
17
|
-
self.keys = list(lazy_dict.keys()) # Extract keys from the LazyDict
|
|
18
24
|
|
|
19
25
|
def __getitem__(self, index: Union[slice, int]):
|
|
20
|
-
if isinstance(index,
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
if isinstance(index, slice):
|
|
27
|
+
# Handle slice: load each item in the slice range
|
|
28
|
+
indices = range(*index.indices(len(self._cs_refs)))
|
|
29
|
+
return [self._load_item(i) for i in indices]
|
|
23
30
|
else:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
# Handle single index
|
|
32
|
+
if not (-len(self._cs_refs) <= index < len(self._cs_refs)):
|
|
33
|
+
raise IndexError("list index out of range")
|
|
34
|
+
|
|
35
|
+
# Normalize negative indices
|
|
36
|
+
if index < 0:
|
|
37
|
+
index = len(self._cs_refs) + index
|
|
38
|
+
|
|
39
|
+
return self._load_item(index)
|
|
40
|
+
|
|
41
|
+
def __iter__(self):
|
|
42
|
+
"""Override iterator to trigger lazy loading."""
|
|
43
|
+
for i in range(len(self._cs_refs)):
|
|
44
|
+
yield self._load_item(i)
|
|
45
|
+
|
|
46
|
+
def _load_item(self, index: int):
|
|
47
|
+
"""Load and cache a single item at the given index."""
|
|
29
48
|
value = super().__getitem__(index)
|
|
30
|
-
|
|
49
|
+
|
|
31
50
|
if value is None:
|
|
32
|
-
#
|
|
33
|
-
|
|
51
|
+
# Get the C# object reference and use it to access LazyDict
|
|
52
|
+
cs_ref = self._cs_refs[index]
|
|
53
|
+
value = self._lazy_dict[cs_ref] # Pass C# object
|
|
34
54
|
# Update the list with the created value
|
|
35
55
|
super().__setitem__(index, value)
|
|
36
|
-
|
|
56
|
+
|
|
37
57
|
return value
|
|
38
|
-
|
|
58
|
+
|
|
59
|
+
# Make it truly immutable by blocking mutations
|
|
39
60
|
def __setitem__(self, index, value):
|
|
40
|
-
raise TypeError("
|
|
41
|
-
|
|
61
|
+
raise TypeError("_LazyList is immutable")
|
|
62
|
+
|
|
63
|
+
def __delitem__(self, index):
|
|
64
|
+
raise TypeError("_LazyList is immutable")
|
|
65
|
+
|
|
42
66
|
def append(self, value):
|
|
43
|
-
raise TypeError("
|
|
44
|
-
|
|
67
|
+
raise TypeError("_LazyList is immutable")
|
|
68
|
+
|
|
45
69
|
def extend(self, iterable):
|
|
46
|
-
raise TypeError("
|
|
47
|
-
|
|
70
|
+
raise TypeError("_LazyList is immutable")
|
|
71
|
+
|
|
48
72
|
def insert(self, index, value):
|
|
49
|
-
raise TypeError("
|
|
50
|
-
|
|
51
|
-
def pop(self, index=-1):
|
|
52
|
-
raise TypeError("ListBulkDataCards is immutable")
|
|
53
|
-
|
|
73
|
+
raise TypeError("_LazyList is immutable")
|
|
74
|
+
|
|
54
75
|
def remove(self, value):
|
|
55
|
-
raise TypeError("
|
|
56
|
-
|
|
76
|
+
raise TypeError("_LazyList is immutable")
|
|
77
|
+
|
|
78
|
+
def pop(self, index=-1):
|
|
79
|
+
raise TypeError("_LazyList is immutable")
|
|
80
|
+
|
|
57
81
|
def clear(self):
|
|
58
|
-
raise TypeError("
|
|
82
|
+
raise TypeError("_LazyList is immutable")
|
|
59
83
|
|
|
60
|
-
def
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
def sort(self, **kwargs):
|
|
85
|
+
raise TypeError("_LazyList is immutable")
|
|
86
|
+
|
|
87
|
+
def reverse(self):
|
|
88
|
+
raise TypeError("_LazyList is immutable")
|
|
63
89
|
|
|
64
90
|
|
|
65
91
|
class IndexTrackingList(list):
|
|
@@ -230,6 +256,7 @@ class N2PNastranInputData:
|
|
|
230
256
|
"__executivecontrolinstructions",
|
|
231
257
|
"__listcomments",
|
|
232
258
|
"__lazylist",
|
|
259
|
+
"__bdfFiles"
|
|
233
260
|
)
|
|
234
261
|
|
|
235
262
|
def __init__(self, dictcardscston2p: dict, inputfiledata):
|
|
@@ -239,6 +266,7 @@ class N2PNastranInputData:
|
|
|
239
266
|
self.__executivecontrolinstructions = []
|
|
240
267
|
self.__listcomments = []
|
|
241
268
|
self.__lazylist = None
|
|
269
|
+
self.__bdfFiles = {bdf.BdfFilePath: bdf for bdf in inputfiledata.BdfFiles}
|
|
242
270
|
|
|
243
271
|
@property
|
|
244
272
|
def ListBulkDataCards(self) -> list[N2PCard]:
|
|
@@ -296,30 +324,44 @@ class N2PNastranInputData:
|
|
|
296
324
|
# self.__listcomments = [N2PInputDataNas(i) for i in self.__inputfiledata.StructuredInfo.ModelComments]
|
|
297
325
|
# return self.__listcomments
|
|
298
326
|
|
|
299
|
-
def find_cards(self,
|
|
327
|
+
def find_cards(self,
|
|
300
328
|
category: Literal["GRID", "ELEMENT", "CONNECTOR", "PROPERTY", "MATERIAL", "COORDINATESYSTEM", "LOAD", "CONSTRAINT"],
|
|
301
|
-
cardTypes: list[str] = None, filters: dict[str, object] = None) -> list [N2PCard]:
|
|
302
|
-
"""Searches for cards based on specified criteria
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
329
|
+
cardTypes: list[str] = None, filters: dict[str, object] = None, superElements: int = None) -> list [N2PCard]:
|
|
330
|
+
"""Searches for cards based on specified criteria.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
category: Card category to search. Valid values: GRID, ELEMENT,
|
|
334
|
+
CONNECTOR, PROPERTY, MATERIAL, COORDINATESYSTEM, LOAD, CONSTRAINT.
|
|
335
|
+
cardTypes: Specific card types to filter by (e.g., CQUAD4, PBEAM, COORD2R).
|
|
336
|
+
If None, all card types within the category are returned.
|
|
337
|
+
filters: Dictionary of field-value pairs to filter results. Available
|
|
338
|
+
fields depend on the category:
|
|
308
339
|
- GRID: "ID", "CP", "CD", "PS", "SEID", "X1", "X2", "X3"
|
|
309
|
-
- ELEMENT: "EID,
|
|
340
|
+
- ELEMENT: "EID", "PID", "NodeArray"
|
|
310
341
|
- CONNECTOR:
|
|
311
342
|
- PROPERTY: "PID"
|
|
312
343
|
- MATERIAL: "MID"
|
|
313
344
|
- COORDINATESYSTEM: "CoordinateSystemIds", "ReferenceSystemId"
|
|
314
345
|
- LOAD:
|
|
315
346
|
- CONSTRAINT:
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
347
|
+
superElements: Superelement (part) ID to search within. Use 0 for the
|
|
348
|
+
global model. If None, searches across all superelements.
|
|
349
|
+
|
|
350
|
+
Returns:
|
|
351
|
+
List of N2PCard objects matching the specified criteria.
|
|
352
|
+
|
|
353
|
+
Examples:
|
|
354
|
+
>>> # Get all grids from global model
|
|
355
|
+
>>> grids = model.ModelInputData.find_cards("GRID", superElements=0)
|
|
356
|
+
|
|
357
|
+
>>> # Get all CQUAD4 elements from global model
|
|
358
|
+
>>> quads = model.ModelInputData.find_cards("ELEMENT", ["CQUAD4"], superElements=0)
|
|
359
|
+
|
|
360
|
+
>>> # Get PSHELL property with PID=3
|
|
361
|
+
>>> pshell_3 = model.ModelInputData.find_cards("PROPERTY", ["PSHELL"], {"PID": 3}, superElements=0)
|
|
362
|
+
|
|
363
|
+
>>> # Get all grids with CP=10 across all superelements
|
|
364
|
+
>>> grids_cp10 = model.ModelInputData.find_cards("GRID", filters={"CP": 10})
|
|
323
365
|
"""
|
|
324
366
|
# Convert superElements (part id) to System.Byte[] (or None)
|
|
325
367
|
if not superElements and superElements != 0:
|
|
@@ -366,7 +408,7 @@ class N2PNastranInputData:
|
|
|
366
408
|
|
|
367
409
|
cs_result = self.__inputfiledata.BulkDataSection.FindCards(part, category, cardTypes, filter_names, filter_values)
|
|
368
410
|
|
|
369
|
-
return [self.__dictcardscston2p[
|
|
411
|
+
return [self.__dictcardscston2p[i] for i in cs_result]
|
|
370
412
|
|
|
371
413
|
|
|
372
414
|
def print_include_hierarchy(self) -> None:
|
|
@@ -417,9 +459,33 @@ class N2PNastranInputData:
|
|
|
417
459
|
N2PLog.Error.E100(error.StatusMessage)
|
|
418
460
|
return failed_cards
|
|
419
461
|
|
|
420
|
-
def create_card(self, card_type: str,
|
|
421
|
-
"""Method that creates a new card of the type specified.
|
|
422
|
-
|
|
462
|
+
def create_card(self, card_type: str, bdf_file: str, rawContent: str = None, superElemntId:int = 0) -> N2PCard:
|
|
463
|
+
"""Method that creates a new card of the type specified. By default, the card is created empty, with small field format.
|
|
464
|
+
|
|
465
|
+
Example:
|
|
466
|
+
>>> new_cbar = model.ModelInputData.create_card("CBAR", "C:\\bdf\\mesh\\model.bdf")
|
|
467
|
+
>>> # new_cbar is now a N2PCard object of type CBAR empty. You can set its properties:
|
|
468
|
+
>>> new_cbar.EID = 1001
|
|
469
|
+
>>> new_cbar.PID = 2001
|
|
470
|
+
>>> new_cbar.GA = 10
|
|
471
|
+
>>> new_cbar.GB = 20
|
|
472
|
+
>>> new_cbar.X1 = 1.0
|
|
473
|
+
>>> new_cbar.X2 = 0.0
|
|
474
|
+
>>> new_cbar.X3 = 0.0
|
|
475
|
+
|
|
476
|
+
>>> # It is also possible to create a card with raw content and specifying the superelement id:
|
|
477
|
+
>>> raw_content = "CBAR 1002 2001 30 40 0.0 1.0 0.0"
|
|
478
|
+
>>> new_cbar2 = model.ModelInputData.create_card("CBAR", "C:\\bdf\\mesh\\model.bdf", rawContent=raw_content, superElemntId=0)
|
|
479
|
+
|
|
480
|
+
"""
|
|
481
|
+
bdfFileObject = self.__bdfFiles.get(bdf_file, None)
|
|
482
|
+
if bdfFileObject is None:
|
|
483
|
+
N2PLog.Warning.W212(bdf_file)
|
|
484
|
+
bdfFileObject = self.__inputfiledata.BdfFiles[0]
|
|
485
|
+
card = self.__inputfiledata.BulkDataSection.CreateCard(card_type, bdfFileObject, rawContent, superElemntId)
|
|
486
|
+
card.CardType = card_type
|
|
487
|
+
card.FieldsFormat = "SMALL"
|
|
488
|
+
|
|
423
489
|
return card
|
|
424
490
|
|
|
425
491
|
class N2PModelInputData(N2PNastranInputData):
|
|
@@ -13335,5 +13401,7 @@ CONSTRUCTDICT = {
|
|
|
13335
13401
|
"SPCD_NASTRAN": SPCDNAS,
|
|
13336
13402
|
"SPC1": SPC1,
|
|
13337
13403
|
"SPCADD": SPCADD,
|
|
13338
|
-
"UNSUPPORTED": N2PCard
|
|
13404
|
+
"UNSUPPORTED": N2PCard,
|
|
13405
|
+
"FIELD_MAPPING_ERROR_NASTRAN": N2PCard,
|
|
13406
|
+
"FIELD_MAPPING_ERROR_OPTISTRUCT": N2PCard
|
|
13339
13407
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"""Constants of the NaxToPy package"""
|
|
2
2
|
|
|
3
3
|
# NaxToPy Version
|
|
4
|
-
VERSION = "3.2.
|
|
4
|
+
VERSION = "3.2.3"
|
|
5
5
|
|
|
6
6
|
# Supported for Naxto:
|
|
7
7
|
NAXTO_VERSION = '2025R2'
|
|
8
|
-
NAXTO_STEP = "
|
|
9
|
-
NAXTO_ADVANCED_INSTALLER = "2025.2.
|
|
8
|
+
NAXTO_STEP = "3"
|
|
9
|
+
NAXTO_ADVANCED_INSTALLER = "2025.2.3"
|
|
10
10
|
|
|
11
11
|
# Assembly version of NaxToModel.dll
|
|
12
|
-
VIZZER_COMPATIBILITY = ("5.2.0.
|
|
12
|
+
VIZZER_COMPATIBILITY = ("5.2.0.3")
|
|
13
13
|
"""Tuple with the compatible versions of NaxToModel.dll"""
|
|
14
14
|
|
|
15
15
|
# PYTHON EXTERNO ----------------------------------------------------------------------------------
|
|
@@ -446,7 +446,7 @@ own information message. Use the following structure as a standard message (I +
|
|
|
446
446
|
def I116() -> None:
|
|
447
447
|
""" Working with the installed naxto libraries
|
|
448
448
|
"""
|
|
449
|
-
message = "I116: Working with NaxTo installed libraries (in Program Files\IDAERO)"
|
|
449
|
+
message = r"I116: Working with NaxTo installed libraries (in Program Files\IDAERO)"
|
|
450
450
|
N2PLog._N2PLog__logger.info(message)
|
|
451
451
|
|
|
452
452
|
@staticmethod
|
|
@@ -676,6 +676,14 @@ own information message. Use the following structure as a standard message (I +
|
|
|
676
676
|
message = f"W211: The result asked is not available in all the load cases selected"
|
|
677
677
|
N2PLog._N2PLog__logger.warning(message)
|
|
678
678
|
|
|
679
|
+
@staticmethod
|
|
680
|
+
def W212(path) -> None:
|
|
681
|
+
"""
|
|
682
|
+
Warning raised when the path for the new N2PCard is not in the include's tree.
|
|
683
|
+
"""
|
|
684
|
+
message = f"W212: The path '{path}' for the new N2PCard is not in the include's tree. The card will be added in the launch bdf."
|
|
685
|
+
N2PLog._N2PLog__logger.warning(message)
|
|
686
|
+
|
|
679
687
|
@staticmethod
|
|
680
688
|
def W300() -> None:
|
|
681
689
|
""" Warning raised when there are more dimensions than points in n2p.envelope
|
|
@@ -1259,6 +1267,14 @@ own information message. Use the following structure as a standard message (I +
|
|
|
1259
1267
|
message = f"E114: THE FILE {file} IS A INPUT TEXT FILE BUT THE SOLVER IS UNKNOWN. SPECIFY THE 'file_type'."
|
|
1260
1268
|
N2PLog._N2PLog__logger.error(message)
|
|
1261
1269
|
return message
|
|
1270
|
+
|
|
1271
|
+
@staticmethod
|
|
1272
|
+
def E115() -> str:
|
|
1273
|
+
""" Error raised when a dictionary for filtering is passed but not where the filter is applied
|
|
1274
|
+
"""
|
|
1275
|
+
message = f"E115: A DICTIONARY FOR FILTERING IS PASSED BUT NOT WHERE THE FILTER IS APPLIED. 'filter' MUST BE 'ELEMENTS', 'PROPERTIES', 'PARTS' OR 'NODES'"
|
|
1276
|
+
N2PLog._N2PLog__logger.error(message)
|
|
1277
|
+
return message
|
|
1262
1278
|
|
|
1263
1279
|
@staticmethod
|
|
1264
1280
|
def E201(*args) -> None:
|
|
@@ -66,8 +66,9 @@ class N2PModelContent:
|
|
|
66
66
|
"""
|
|
67
67
|
# 0 ) Genera el archivo .log y añade los logs de la importación ------------------------------------------------
|
|
68
68
|
# Configura el logger para que escriba automaticamente los logs ------------------------------------------------
|
|
69
|
-
N2PLog._N2PLog__fh.
|
|
70
|
-
|
|
69
|
+
if not N2PLog._N2PLog__fh.immediate:
|
|
70
|
+
N2PLog._N2PLog__fh.write_buffered_records()
|
|
71
|
+
N2PLog._N2PLog__fh.immediate_logging()
|
|
71
72
|
|
|
72
73
|
# 1) Extraer Toda la Informacion Principal de NaxTo ------------------------------------------------------------
|
|
73
74
|
# Inicializador de atributos
|
|
@@ -311,28 +312,47 @@ class N2PModelContent:
|
|
|
311
312
|
|
|
312
313
|
def __init__(self, keys_list: list):
|
|
313
314
|
super().__init__()
|
|
314
|
-
self.
|
|
315
|
+
self._hash_to_cs_list = {} # hash -> list of C# objects
|
|
316
|
+
|
|
315
317
|
for cs_ref in keys_list:
|
|
316
318
|
if cs_ref.GetN2PCardType() not in CONSTRUCTDICT:
|
|
317
319
|
continue
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
320
|
+
|
|
321
|
+
hash_code = RuntimeHelpers.GetHashCode(cs_ref)
|
|
322
|
+
|
|
323
|
+
if hash_code not in self._hash_to_cs_list:
|
|
324
|
+
self._hash_to_cs_list[hash_code] = []
|
|
325
|
+
|
|
326
|
+
self._hash_to_cs_list[hash_code].append(cs_ref)
|
|
327
|
+
# Store with unique tuple key
|
|
328
|
+
unique_key = (hash_code, len(self._hash_to_cs_list[hash_code]) - 1)
|
|
329
|
+
self[unique_key] = None
|
|
330
|
+
|
|
331
|
+
def __getitem__(self, cs_key):
|
|
332
|
+
hash_code = RuntimeHelpers.GetHashCode(cs_key)
|
|
333
|
+
|
|
334
|
+
if hash_code not in self._hash_to_cs_list:
|
|
335
|
+
raise KeyError(f"Object not found")
|
|
336
|
+
|
|
337
|
+
# Find the matching C# object by reference equality
|
|
338
|
+
cs_objects = self._hash_to_cs_list[hash_code]
|
|
339
|
+
|
|
340
|
+
for idx, cs_ref in enumerate(cs_objects):
|
|
341
|
+
if System.Object.ReferenceEquals(cs_ref, cs_key): # Checks C# object identity directly
|
|
342
|
+
key = (hash_code, idx)
|
|
343
|
+
|
|
344
|
+
if self.get(key) is None:
|
|
345
|
+
# Lazy construction
|
|
346
|
+
value = CONSTRUCTDICT.get(cs_ref.GetN2PCardType(), CONSTRUCTDICT["UNSUPPORTED"])
|
|
347
|
+
if value:
|
|
348
|
+
constructed = value(cs_ref)
|
|
349
|
+
self[key] = constructed
|
|
350
|
+
return constructed
|
|
351
|
+
return None
|
|
352
|
+
else:
|
|
353
|
+
return self.get(key)
|
|
354
|
+
|
|
355
|
+
raise KeyError(f"Object not found in collision list")
|
|
336
356
|
|
|
337
357
|
cslistbulkdatacards = self.__vzmodel.NasOptInputReader.BulkDataSection.GetCardDataBaseList()
|
|
338
358
|
self.__modelinputdata = N2PNastranInputData(
|
|
@@ -1427,11 +1447,13 @@ class N2PModelContent:
|
|
|
1427
1447
|
for result_file in results_files:
|
|
1428
1448
|
if os.path.isfile(result_file):
|
|
1429
1449
|
self.__vzmodel.ImportResults(str(result_file))
|
|
1430
|
-
self._import_load_cases()
|
|
1431
1450
|
N2PLog.Debug.D201(str(result_file))
|
|
1432
1451
|
else:
|
|
1433
1452
|
N2PLog.Error.E232(str(result_file))
|
|
1434
1453
|
|
|
1454
|
+
self._import_load_cases()
|
|
1455
|
+
self.__LCs_by_ID__ = {lc.ID: lc for lc in self.LoadCases}
|
|
1456
|
+
|
|
1435
1457
|
# ------------------------------------------------------------------------------------------------------------------
|
|
1436
1458
|
|
|
1437
1459
|
####################################################################################################################
|
|
@@ -2422,7 +2444,7 @@ def load_model(path: str, parallelprocessing: bool = True,
|
|
|
2422
2444
|
("InputFileAbaqus") or binary result file ("Binary").
|
|
2423
2445
|
filter: str.
|
|
2424
2446
|
Optional. It specifies what to load in dict_gen (elements, properties, parts or nodes)
|
|
2425
|
-
|
|
2447
|
+
dict_gen: dict.
|
|
2426
2448
|
Optional. Dictionary that represents what elements/properties/parts/nodes to load. For
|
|
2427
2449
|
elements and nodes, the dictionary is in the form {Part ID (str): [Elements ID/Nodes ID]}. For parts or
|
|
2428
2450
|
properties, the dictionary could simply be in the form {Part ID (str) / Property ID (str): []}.
|
|
@@ -2451,6 +2473,9 @@ def load_model(path: str, parallelprocessing: bool = True,
|
|
|
2451
2473
|
if path.split(".")[-1] in BINARY_EXTENSIONS and file_type == "InputFileNastran":
|
|
2452
2474
|
N2PLog.Error.E111()
|
|
2453
2475
|
|
|
2476
|
+
if dict_gen and not filter:
|
|
2477
|
+
N2PLog.Error.E115()
|
|
2478
|
+
|
|
2454
2479
|
return N2PModelContent(path, parallelprocessing, file_type, __transform_dict(dict_gen), filter, loadconnectors=loadconnectors)
|
|
2455
2480
|
# ----------------------------------------------------------------------------------------------------------------------
|
|
2456
2481
|
|
|
@@ -31,6 +31,7 @@ class DataEntry:
|
|
|
31
31
|
self._loadcase: int = None
|
|
32
32
|
self._loadcase_description: str = "LOAD CASE"
|
|
33
33
|
self._loadcase_name: str = None
|
|
34
|
+
self._solution_type: int = 101
|
|
34
35
|
self._increment: int = 1
|
|
35
36
|
self._increment_description: str = "INCREMENT"
|
|
36
37
|
self._increment_value: float = 0.0
|
|
@@ -38,6 +39,7 @@ class DataEntry:
|
|
|
38
39
|
self._section_description: str = "SECTION"
|
|
39
40
|
self._part: str = None
|
|
40
41
|
self._data: np.ndarray = None
|
|
42
|
+
|
|
41
43
|
self._data_input: np.ndarray = None
|
|
42
44
|
self._data_input_name: str = None
|
|
43
45
|
self._data_description: str = "Data"
|
|
@@ -217,7 +219,15 @@ class DataEntry:
|
|
|
217
219
|
|
|
218
220
|
return self._loadcase_name
|
|
219
221
|
#-------------------------------------------------------------------------------------------------------------------
|
|
220
|
-
|
|
222
|
+
|
|
223
|
+
# Method to obtain the Solution Type ------------------------------------------------------------------------------
|
|
224
|
+
@property
|
|
225
|
+
def SolutionType(self) -> int:
|
|
226
|
+
"""
|
|
227
|
+
Returns the Solution Type ID (e.g., 101 for Nastran linear static).
|
|
228
|
+
"""
|
|
229
|
+
return self._solution_type
|
|
230
|
+
# ------------------------------------------------------------------------------------------------------------------
|
|
221
231
|
|
|
222
232
|
|
|
223
233
|
# Setters ----------------------------------------------------------------------------------------------------------
|
|
@@ -354,3 +364,12 @@ class DataEntry:
|
|
|
354
364
|
N2PLog.Error.E535(value, str)
|
|
355
365
|
# ------------------------------------------------------------------------------------------------------------------
|
|
356
366
|
|
|
367
|
+
|
|
368
|
+
@SolutionType.setter
|
|
369
|
+
def SolutionType(self, value: int) -> None:
|
|
370
|
+
if type(value) == int:
|
|
371
|
+
self._solution_type = value
|
|
372
|
+
else:
|
|
373
|
+
N2PLog.Error.E535(value, int)
|
|
374
|
+
# ------------------------------------------------------------------------------------------------------------------
|
|
375
|
+
|
|
@@ -80,10 +80,10 @@ class HDF5_NaxTo:
|
|
|
80
80
|
|
|
81
81
|
# Method used to create an HDF5 file -------------------------------------------------------------------------------
|
|
82
82
|
def create_hdf5(self) -> None:
|
|
83
|
-
|
|
84
83
|
"""
|
|
85
84
|
Method used to create an HDF5 file, either in disk (if the FilePath attribute has been filled in), or in memory
|
|
86
|
-
(if the FilePath boolean attribute has not been filled in). This file will have the following default attributes:
|
|
85
|
+
(if the FilePath boolean attribute has not been filled in). This file will have the following default attributes:
|
|
86
|
+
|
|
87
87
|
- "SOFTWARE", which will always be "NAXTO".
|
|
88
88
|
- "DESCRIPTION", which will be the FileDescription attribute (if it has been set).
|
|
89
89
|
- "CREATION_DATE", which will be the exact date when this function is called. Its structure will be
|
|
@@ -142,7 +142,7 @@ class HDF5_NaxTo:
|
|
|
142
142
|
section = resultsName.require_group(sectionName)
|
|
143
143
|
firstEntry = dataEntry[0]
|
|
144
144
|
loadCase.attrs.update({"DESCRIPTION": firstEntry.LoadCaseDescription, "ID": firstEntry.LoadCase,
|
|
145
|
-
|
|
145
|
+
"SUBTITLE": firstEntry.LoadCaseName, "SOLUTION_TYPE": np.int32(firstEntry.SolutionType)})
|
|
146
146
|
increment.attrs.update({"DESCRIPTION": firstEntry.IncrementDescription,
|
|
147
147
|
"VALUE": firstEntry.IncrementValue, "ID": firstEntry.Increment})
|
|
148
148
|
resultsName.attrs.update({"DESCRIPTION": firstEntry.ResultsNameDescription,
|
|
@@ -100,18 +100,20 @@ class CompositeShell(Property):
|
|
|
100
100
|
It is mandatory that NumPlies is set in first place. Other attributes might be set with no order.
|
|
101
101
|
|
|
102
102
|
EXAMPLE
|
|
103
|
-
|
|
104
|
-
laminate
|
|
105
|
-
laminate.
|
|
106
|
-
laminate.
|
|
107
|
-
laminate.
|
|
108
|
-
laminate.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
laminate.
|
|
112
|
-
|
|
113
|
-
|
|
103
|
+
|
|
104
|
+
>>> laminate = CompositeShell()
|
|
105
|
+
>>> laminate.NumPlies = 6
|
|
106
|
+
>>> laminate.PartIDs = '0'
|
|
107
|
+
>>> laminate.MatIDs = [(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0')]
|
|
108
|
+
>>> laminate.thicknesses = [0.1,0.1,0.1,0.1,0.1,0.1]
|
|
109
|
+
>>> laminate.theta = [0,45,0,90,0,-45]
|
|
110
|
+
>>> model = n2p.load_model(r"")
|
|
111
|
+
>>> laminate.MaterialDict = model.MaterialDict
|
|
112
|
+
>>> laminate.simmetry = True
|
|
113
|
+
|
|
114
|
+
.. warning::
|
|
114
115
|
|
|
116
|
+
Every given list must have the same length as the number of plies of the laminate. Otherwise, instance will not be created.
|
|
115
117
|
"""
|
|
116
118
|
__slots__ = (
|
|
117
119
|
'_n2p_property',
|
{naxtopy-3.2.1 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py
RENAMED
|
@@ -23,9 +23,9 @@ class N2PCalculatorRFJoints:
|
|
|
23
23
|
|
|
24
24
|
Example:
|
|
25
25
|
>>> import NaxToPy as n2p
|
|
26
|
-
>>> from NaxToPy.Modules.
|
|
27
|
-
>>> from NaxToPy.Modules.
|
|
28
|
-
>>> from NaxToPy.Modules.
|
|
26
|
+
>>> from NaxToPy.Modules.static.fasteners.N2PGetFasteners import N2PGetFasteners
|
|
27
|
+
>>> from NaxToPy.Modules.static.fasteners.N2PGetLoadFasteners import N2PGetLoadFasteners
|
|
28
|
+
>>> from NaxToPy.Modules.static.fasteners.N2PFastenerSystem import N2PFastenerSystem
|
|
29
29
|
>>> from N2PCalculatorRFJoints import N2PCalculatorRFJoints
|
|
30
30
|
>>> model1 = n2p.get_model(route.fem) # model loaded
|
|
31
31
|
>>> fasteners = N2PGetFasteners()
|