diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index e6119cce..00000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: b8d9ed80748634fbb548fb195ae78e1c -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/1-installation.doctree b/docs/.doctrees/1-installation.doctree deleted file mode 100644 index 0abe57e7..00000000 Binary files a/docs/.doctrees/1-installation.doctree and /dev/null differ diff --git a/docs/.doctrees/2-globalcommands.doctree b/docs/.doctrees/2-globalcommands.doctree deleted file mode 100644 index b1dc0f12..00000000 Binary files a/docs/.doctrees/2-globalcommands.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1-basicobjects.doctree b/docs/.doctrees/2.1-basicobjects.doctree deleted file mode 100644 index 59c34e6e..00000000 Binary files a/docs/.doctrees/2.1-basicobjects.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.1-materials.doctree b/docs/.doctrees/2.1.1-materials.doctree deleted file mode 100644 index 579db264..00000000 Binary files a/docs/.doctrees/2.1.1-materials.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.10-linesets.doctree b/docs/.doctrees/2.1.10-linesets.doctree deleted file mode 100644 index 1334c697..00000000 Binary files a/docs/.doctrees/2.1.10-linesets.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.11-membersets.doctree b/docs/.doctrees/2.1.11-membersets.doctree deleted file mode 100644 index b1c7bad5..00000000 Binary files a/docs/.doctrees/2.1.11-membersets.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.12-surfacesets.doctree b/docs/.doctrees/2.1.12-surfacesets.doctree deleted file mode 100644 index 63d6934b..00000000 Binary files a/docs/.doctrees/2.1.12-surfacesets.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.13-solidsets.doctree b/docs/.doctrees/2.1.13-solidsets.doctree deleted file mode 100644 index b83cac73..00000000 Binary files a/docs/.doctrees/2.1.13-solidsets.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.2-sections.doctree b/docs/.doctrees/2.1.2-sections.doctree deleted file mode 100644 index 3e56166e..00000000 Binary files a/docs/.doctrees/2.1.2-sections.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.3-thicknesses.doctree b/docs/.doctrees/2.1.3-thicknesses.doctree deleted file mode 100644 index a2f8d95b..00000000 Binary files a/docs/.doctrees/2.1.3-thicknesses.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.4-nodes.doctree b/docs/.doctrees/2.1.4-nodes.doctree deleted file mode 100644 index f5254dbe..00000000 Binary files a/docs/.doctrees/2.1.4-nodes.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.5-lines.doctree b/docs/.doctrees/2.1.5-lines.doctree deleted file mode 100644 index b518cbb9..00000000 Binary files a/docs/.doctrees/2.1.5-lines.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.6-members.doctree b/docs/.doctrees/2.1.6-members.doctree deleted file mode 100644 index ca074f37..00000000 Binary files a/docs/.doctrees/2.1.6-members.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.7-surfaces.doctree b/docs/.doctrees/2.1.7-surfaces.doctree deleted file mode 100644 index c8d202e6..00000000 Binary files a/docs/.doctrees/2.1.7-surfaces.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.8-openings.doctree b/docs/.doctrees/2.1.8-openings.doctree deleted file mode 100644 index 0235cd0b..00000000 Binary files a/docs/.doctrees/2.1.8-openings.doctree and /dev/null differ diff --git a/docs/.doctrees/2.1.9-solids.doctree b/docs/.doctrees/2.1.9-solids.doctree deleted file mode 100644 index 3eb1521d..00000000 Binary files a/docs/.doctrees/2.1.9-solids.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10-loadcasesandcombinations.doctree b/docs/.doctrees/2.10-loadcasesandcombinations.doctree deleted file mode 100644 index a55cef67..00000000 Binary files a/docs/.doctrees/2.10-loadcasesandcombinations.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.1-loadcase.doctree b/docs/.doctrees/2.10.1-loadcase.doctree deleted file mode 100644 index d9c2af54..00000000 Binary files a/docs/.doctrees/2.10.1-loadcase.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.2-action.doctree b/docs/.doctrees/2.10.2-action.doctree deleted file mode 100644 index 13f56718..00000000 Binary files a/docs/.doctrees/2.10.2-action.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.3-designsituation.doctree b/docs/.doctrees/2.10.3-designsituation.doctree deleted file mode 100644 index 15a029f8..00000000 Binary files a/docs/.doctrees/2.10.3-designsituation.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.4-actioncombination.doctree b/docs/.doctrees/2.10.4-actioncombination.doctree deleted file mode 100644 index 038be96a..00000000 Binary files a/docs/.doctrees/2.10.4-actioncombination.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.5-loadcombination.doctree b/docs/.doctrees/2.10.5-loadcombination.doctree deleted file mode 100644 index c71dc3a0..00000000 Binary files a/docs/.doctrees/2.10.5-loadcombination.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.6-staticanalysissettings.doctree b/docs/.doctrees/2.10.6-staticanalysissettings.doctree deleted file mode 100644 index d8142a46..00000000 Binary files a/docs/.doctrees/2.10.6-staticanalysissettings.doctree and /dev/null differ diff --git a/docs/.doctrees/2.10.7-combinationwizard.doctree b/docs/.doctrees/2.10.7-combinationwizard.doctree deleted file mode 100644 index 7627840b..00000000 Binary files a/docs/.doctrees/2.10.7-combinationwizard.doctree and /dev/null differ diff --git a/docs/.doctrees/2.11-loadwizards.doctree b/docs/.doctrees/2.11-loadwizards.doctree deleted file mode 100644 index fa03989b..00000000 Binary files a/docs/.doctrees/2.11-loadwizards.doctree and /dev/null differ diff --git a/docs/.doctrees/2.11.1-memberloadsfromareaload.doctree b/docs/.doctrees/2.11.1-memberloadsfromareaload.doctree deleted file mode 100644 index 521e6a68..00000000 Binary files a/docs/.doctrees/2.11.1-memberloadsfromareaload.doctree and /dev/null differ diff --git a/docs/.doctrees/2.11.2-memberloadsfromfreelineload.doctree b/docs/.doctrees/2.11.2-memberloadsfromfreelineload.doctree deleted file mode 100644 index c97d0598..00000000 Binary files a/docs/.doctrees/2.11.2-memberloadsfromfreelineload.doctree and /dev/null differ diff --git a/docs/.doctrees/2.11.3-snowload.doctree b/docs/.doctrees/2.11.3-snowload.doctree deleted file mode 100644 index f7798374..00000000 Binary files a/docs/.doctrees/2.11.3-snowload.doctree and /dev/null differ diff --git a/docs/.doctrees/2.11.4-windload.doctree b/docs/.doctrees/2.11.4-windload.doctree deleted file mode 100644 index 16977c7d..00000000 Binary files a/docs/.doctrees/2.11.4-windload.doctree and /dev/null differ diff --git a/docs/.doctrees/2.12-loads.doctree b/docs/.doctrees/2.12-loads.doctree deleted file mode 100644 index cfe6b776..00000000 Binary files a/docs/.doctrees/2.12-loads.doctree and /dev/null differ diff --git a/docs/.doctrees/2.13-results.doctree b/docs/.doctrees/2.13-results.doctree deleted file mode 100644 index a501f8eb..00000000 Binary files a/docs/.doctrees/2.13-results.doctree and /dev/null differ diff --git a/docs/.doctrees/2.14-guideobjects.doctree b/docs/.doctrees/2.14-guideobjects.doctree deleted file mode 100644 index 550d6d5d..00000000 Binary files a/docs/.doctrees/2.14-guideobjects.doctree and /dev/null differ diff --git a/docs/.doctrees/2.15-printoutreport.doctree b/docs/.doctrees/2.15-printoutreport.doctree deleted file mode 100644 index 900964d0..00000000 Binary files a/docs/.doctrees/2.15-printoutreport.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2-specialobjects.doctree b/docs/.doctrees/2.2-specialobjects.doctree deleted file mode 100644 index b26160c1..00000000 Binary files a/docs/.doctrees/2.2-specialobjects.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.1-intersections.doctree b/docs/.doctrees/2.2.1-intersections.doctree deleted file mode 100644 index f9505381..00000000 Binary files a/docs/.doctrees/2.2.1-intersections.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.2-surfaceresultadjustments.doctree b/docs/.doctrees/2.2.2-surfaceresultadjustments.doctree deleted file mode 100644 index 209e8757..00000000 Binary files a/docs/.doctrees/2.2.2-surfaceresultadjustments.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.3-surfacecontacts.doctree b/docs/.doctrees/2.2.3-surfacecontacts.doctree deleted file mode 100644 index 1dd8ec15..00000000 Binary files a/docs/.doctrees/2.2.3-surfacecontacts.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.4-rigidlinks.doctree b/docs/.doctrees/2.2.4-rigidlinks.doctree deleted file mode 100644 index 09eca2c9..00000000 Binary files a/docs/.doctrees/2.2.4-rigidlinks.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.5-resultsections.doctree b/docs/.doctrees/2.2.5-resultsections.doctree deleted file mode 100644 index cb1605f2..00000000 Binary files a/docs/.doctrees/2.2.5-resultsections.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.6-structuremodifications.doctree b/docs/.doctrees/2.2.6-structuremodifications.doctree deleted file mode 100644 index db04b2dd..00000000 Binary files a/docs/.doctrees/2.2.6-structuremodifications.doctree and /dev/null differ diff --git a/docs/.doctrees/2.2.7-blocks.doctree b/docs/.doctrees/2.2.7-blocks.doctree deleted file mode 100644 index 5cc58008..00000000 Binary files a/docs/.doctrees/2.2.7-blocks.doctree and /dev/null differ diff --git a/docs/.doctrees/2.3-typesfornodes.doctree b/docs/.doctrees/2.3-typesfornodes.doctree deleted file mode 100644 index 95267ad0..00000000 Binary files a/docs/.doctrees/2.3-typesfornodes.doctree and /dev/null differ diff --git a/docs/.doctrees/2.3.1-nodalsupports.doctree b/docs/.doctrees/2.3.1-nodalsupports.doctree deleted file mode 100644 index 71a02b92..00000000 Binary files a/docs/.doctrees/2.3.1-nodalsupports.doctree and /dev/null differ diff --git a/docs/.doctrees/2.3.2-nodalmeshrefinements.doctree b/docs/.doctrees/2.3.2-nodalmeshrefinements.doctree deleted file mode 100644 index 1f8cd777..00000000 Binary files a/docs/.doctrees/2.3.2-nodalmeshrefinements.doctree and /dev/null differ diff --git a/docs/.doctrees/2.4-typesforlines.doctree b/docs/.doctrees/2.4-typesforlines.doctree deleted file mode 100644 index dc512dd3..00000000 Binary files a/docs/.doctrees/2.4-typesforlines.doctree and /dev/null differ diff --git a/docs/.doctrees/2.4.1-linesupports.doctree b/docs/.doctrees/2.4.1-linesupports.doctree deleted file mode 100644 index 65f716f9..00000000 Binary files a/docs/.doctrees/2.4.1-linesupports.doctree and /dev/null differ diff --git a/docs/.doctrees/2.4.2-linemeshrefinements.doctree b/docs/.doctrees/2.4.2-linemeshrefinements.doctree deleted file mode 100644 index 03edf14d..00000000 Binary files a/docs/.doctrees/2.4.2-linemeshrefinements.doctree and /dev/null differ diff --git a/docs/.doctrees/2.4.3-linehinges.doctree b/docs/.doctrees/2.4.3-linehinges.doctree deleted file mode 100644 index 9fe5484c..00000000 Binary files a/docs/.doctrees/2.4.3-linehinges.doctree and /dev/null differ diff --git a/docs/.doctrees/2.4.4-lineweldedjoints.doctree b/docs/.doctrees/2.4.4-lineweldedjoints.doctree deleted file mode 100644 index 360b4d18..00000000 Binary files a/docs/.doctrees/2.4.4-lineweldedjoints.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5-typesformembers.doctree b/docs/.doctrees/2.5-typesformembers.doctree deleted file mode 100644 index 13269d00..00000000 Binary files a/docs/.doctrees/2.5-typesformembers.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.1-memberhinges.doctree b/docs/.doctrees/2.5.1-memberhinges.doctree deleted file mode 100644 index 4bf2bdf9..00000000 Binary files a/docs/.doctrees/2.5.1-memberhinges.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.2-membereccentricities.doctree b/docs/.doctrees/2.5.2-membereccentricities.doctree deleted file mode 100644 index e0cdd53f..00000000 Binary files a/docs/.doctrees/2.5.2-membereccentricities.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.3-membersupports.doctree b/docs/.doctrees/2.5.3-membersupports.doctree deleted file mode 100644 index f3a47185..00000000 Binary files a/docs/.doctrees/2.5.3-membersupports.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.4-memberstiffnessmodifications.doctree b/docs/.doctrees/2.5.4-memberstiffnessmodifications.doctree deleted file mode 100644 index 98765d5b..00000000 Binary files a/docs/.doctrees/2.5.4-memberstiffnessmodifications.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.5-membernonlinearities.doctree b/docs/.doctrees/2.5.5-membernonlinearities.doctree deleted file mode 100644 index ded50ae1..00000000 Binary files a/docs/.doctrees/2.5.5-membernonlinearities.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.6-memberdefineablestiffness.doctree b/docs/.doctrees/2.5.6-memberdefineablestiffness.doctree deleted file mode 100644 index dbc02dd5..00000000 Binary files a/docs/.doctrees/2.5.6-memberdefineablestiffness.doctree and /dev/null differ diff --git a/docs/.doctrees/2.5.7-memberresultintermediatepoints.doctree b/docs/.doctrees/2.5.7-memberresultintermediatepoints.doctree deleted file mode 100644 index f4c8ef4a..00000000 Binary files a/docs/.doctrees/2.5.7-memberresultintermediatepoints.doctree and /dev/null differ diff --git a/docs/.doctrees/2.6-typesforsurfaces.doctree b/docs/.doctrees/2.6-typesforsurfaces.doctree deleted file mode 100644 index f78559cf..00000000 Binary files a/docs/.doctrees/2.6-typesforsurfaces.doctree and /dev/null differ diff --git a/docs/.doctrees/2.6.1-surfacesupports.doctree b/docs/.doctrees/2.6.1-surfacesupports.doctree deleted file mode 100644 index 1ef69346..00000000 Binary files a/docs/.doctrees/2.6.1-surfacesupports.doctree and /dev/null differ diff --git a/docs/.doctrees/2.6.2-surfaceeccentricities.doctree b/docs/.doctrees/2.6.2-surfaceeccentricities.doctree deleted file mode 100644 index da68b056..00000000 Binary files a/docs/.doctrees/2.6.2-surfaceeccentricities.doctree and /dev/null differ diff --git a/docs/.doctrees/2.6.3-surfacestiffnessmodifications.doctree b/docs/.doctrees/2.6.3-surfacestiffnessmodifications.doctree deleted file mode 100644 index 05e1e12c..00000000 Binary files a/docs/.doctrees/2.6.3-surfacestiffnessmodifications.doctree and /dev/null differ diff --git a/docs/.doctrees/2.6.4-surfacemeshrefinements.doctree b/docs/.doctrees/2.6.4-surfacemeshrefinements.doctree deleted file mode 100644 index 02c7f701..00000000 Binary files a/docs/.doctrees/2.6.4-surfacemeshrefinements.doctree and /dev/null differ diff --git a/docs/.doctrees/2.7-typesforsolids.doctree b/docs/.doctrees/2.7-typesforsolids.doctree deleted file mode 100644 index 8efa21bb..00000000 Binary files a/docs/.doctrees/2.7-typesforsolids.doctree and /dev/null differ diff --git a/docs/.doctrees/2.7.1-solidmeshrefinement.doctree b/docs/.doctrees/2.7.1-solidmeshrefinement.doctree deleted file mode 100644 index e0995771..00000000 Binary files a/docs/.doctrees/2.7.1-solidmeshrefinement.doctree and /dev/null differ diff --git a/docs/.doctrees/2.7.2-solidgas.doctree b/docs/.doctrees/2.7.2-solidgas.doctree deleted file mode 100644 index 983ecdec..00000000 Binary files a/docs/.doctrees/2.7.2-solidgas.doctree and /dev/null differ diff --git a/docs/.doctrees/2.7.3-solidcontact.doctree b/docs/.doctrees/2.7.3-solidcontact.doctree deleted file mode 100644 index 994f7f86..00000000 Binary files a/docs/.doctrees/2.7.3-solidcontact.doctree and /dev/null differ diff --git a/docs/.doctrees/2.8-typesforspecialobjects.doctree b/docs/.doctrees/2.8-typesforspecialobjects.doctree deleted file mode 100644 index 82083adb..00000000 Binary files a/docs/.doctrees/2.8-typesforspecialobjects.doctree and /dev/null differ diff --git a/docs/.doctrees/2.8.1-surfacecontacttype.doctree b/docs/.doctrees/2.8.1-surfacecontacttype.doctree deleted file mode 100644 index 4216132e..00000000 Binary files a/docs/.doctrees/2.8.1-surfacecontacttype.doctree and /dev/null differ diff --git a/docs/.doctrees/2.9-imperfection.doctree b/docs/.doctrees/2.9-imperfection.doctree deleted file mode 100644 index 645472c8..00000000 Binary files a/docs/.doctrees/2.9-imperfection.doctree and /dev/null differ diff --git a/docs/.doctrees/2.9.1-imperfectioncase.doctree b/docs/.doctrees/2.9.1-imperfectioncase.doctree deleted file mode 100644 index 9cdacb4a..00000000 Binary files a/docs/.doctrees/2.9.1-imperfectioncase.doctree and /dev/null differ diff --git a/docs/.doctrees/2.9.2-localimperfection.doctree b/docs/.doctrees/2.9.2-localimperfection.doctree deleted file mode 100644 index ee481b9c..00000000 Binary files a/docs/.doctrees/2.9.2-localimperfection.doctree and /dev/null differ diff --git a/docs/.doctrees/3-addoncommands.doctree b/docs/.doctrees/3-addoncommands.doctree deleted file mode 100644 index d97334c1..00000000 Binary files a/docs/.doctrees/3-addoncommands.doctree and /dev/null differ diff --git a/docs/.doctrees/3.1-nonlinearmaterialbehaviour.doctree b/docs/.doctrees/3.1-nonlinearmaterialbehaviour.doctree deleted file mode 100644 index 6d017052..00000000 Binary files a/docs/.doctrees/3.1-nonlinearmaterialbehaviour.doctree and /dev/null differ diff --git a/docs/.doctrees/3.10-buildingmodel.doctree b/docs/.doctrees/3.10-buildingmodel.doctree deleted file mode 100644 index 8913b2f6..00000000 Binary files a/docs/.doctrees/3.10-buildingmodel.doctree and /dev/null differ diff --git a/docs/.doctrees/3.10.1-buildingstories.doctree b/docs/.doctrees/3.10.1-buildingstories.doctree deleted file mode 100644 index 7b742b1e..00000000 Binary files a/docs/.doctrees/3.10.1-buildingstories.doctree and /dev/null differ diff --git a/docs/.doctrees/3.11-windsimulation.doctree b/docs/.doctrees/3.11-windsimulation.doctree deleted file mode 100644 index 0ce3b411..00000000 Binary files a/docs/.doctrees/3.11-windsimulation.doctree and /dev/null differ diff --git a/docs/.doctrees/3.11.1-windsimulationsanalysissettings.doctree b/docs/.doctrees/3.11.1-windsimulationsanalysissettings.doctree deleted file mode 100644 index 63417d17..00000000 Binary files a/docs/.doctrees/3.11.1-windsimulationsanalysissettings.doctree and /dev/null differ diff --git a/docs/.doctrees/3.11.2-windprofiles.doctree b/docs/.doctrees/3.11.2-windprofiles.doctree deleted file mode 100644 index fdf508a8..00000000 Binary files a/docs/.doctrees/3.11.2-windprofiles.doctree and /dev/null differ diff --git a/docs/.doctrees/3.11.3-windsimulations.doctree b/docs/.doctrees/3.11.3-windsimulations.doctree deleted file mode 100644 index c84c32a4..00000000 Binary files a/docs/.doctrees/3.11.3-windsimulations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.12-geotechnicalanalysis.doctree b/docs/.doctrees/3.12-geotechnicalanalysis.doctree deleted file mode 100644 index dee7f57b..00000000 Binary files a/docs/.doctrees/3.12-geotechnicalanalysis.doctree and /dev/null differ diff --git a/docs/.doctrees/3.12.1-soilsamples.doctree b/docs/.doctrees/3.12.1-soilsamples.doctree deleted file mode 100644 index 87f4c9e0..00000000 Binary files a/docs/.doctrees/3.12.1-soilsamples.doctree and /dev/null differ diff --git a/docs/.doctrees/3.12.2-soilmassifs.doctree b/docs/.doctrees/3.12.2-soilmassifs.doctree deleted file mode 100644 index 217be8da..00000000 Binary files a/docs/.doctrees/3.12.2-soilmassifs.doctree and /dev/null differ diff --git a/docs/.doctrees/3.13-stressstrainanalysis.doctree b/docs/.doctrees/3.13-stressstrainanalysis.doctree deleted file mode 100644 index 16f34e43..00000000 Binary files a/docs/.doctrees/3.13-stressstrainanalysis.doctree and /dev/null differ diff --git a/docs/.doctrees/3.13.1-memberconfigurations.doctree b/docs/.doctrees/3.13.1-memberconfigurations.doctree deleted file mode 100644 index 85fb4c64..00000000 Binary files a/docs/.doctrees/3.13.1-memberconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14-concretedesign.doctree b/docs/.doctrees/3.14-concretedesign.doctree deleted file mode 100644 index a090c050..00000000 Binary files a/docs/.doctrees/3.14-concretedesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.1-concretedesign.doctree b/docs/.doctrees/3.14.1-concretedesign.doctree deleted file mode 100644 index 8593d0e4..00000000 Binary files a/docs/.doctrees/3.14.1-concretedesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.1.1-ultimateconfigurations.doctree b/docs/.doctrees/3.14.1.1-ultimateconfigurations.doctree deleted file mode 100644 index 03dc2f39..00000000 Binary files a/docs/.doctrees/3.14.1.1-ultimateconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.1.2-serviceabilityconfigurations.doctree b/docs/.doctrees/3.14.1.2-serviceabilityconfigurations.doctree deleted file mode 100644 index 6de1812d..00000000 Binary files a/docs/.doctrees/3.14.1.2-serviceabilityconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.1.3-fireresistanceconfigurations.doctree b/docs/.doctrees/3.14.1.3-fireresistanceconfigurations.doctree deleted file mode 100644 index def37574..00000000 Binary files a/docs/.doctrees/3.14.1.3-fireresistanceconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.1.4-seismicconfigurations.doctree b/docs/.doctrees/3.14.1.4-seismicconfigurations.doctree deleted file mode 100644 index 41b39c56..00000000 Binary files a/docs/.doctrees/3.14.1.4-seismicconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.2-typesforconcretedesign.doctree b/docs/.doctrees/3.14.2-typesforconcretedesign.doctree deleted file mode 100644 index 5d1644a6..00000000 Binary files a/docs/.doctrees/3.14.2-typesforconcretedesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.2.1-effectivelengths.doctree b/docs/.doctrees/3.14.2.1-effectivelengths.doctree deleted file mode 100644 index 810eec64..00000000 Binary files a/docs/.doctrees/3.14.2.1-effectivelengths.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.2.2-concretedurabilities.doctree b/docs/.doctrees/3.14.2.2-concretedurabilities.doctree deleted file mode 100644 index f3c73945..00000000 Binary files a/docs/.doctrees/3.14.2.2-concretedurabilities.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.2.3-reinforcementdirections.doctree b/docs/.doctrees/3.14.2.3-reinforcementdirections.doctree deleted file mode 100644 index 0d5de2e5..00000000 Binary files a/docs/.doctrees/3.14.2.3-reinforcementdirections.doctree and /dev/null differ diff --git a/docs/.doctrees/3.14.2.4-surfacereinforcements.doctree b/docs/.doctrees/3.14.2.4-surfacereinforcements.doctree deleted file mode 100644 index b23b7fd9..00000000 Binary files a/docs/.doctrees/3.14.2.4-surfacereinforcements.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15-steeldesign.doctree b/docs/.doctrees/3.15-steeldesign.doctree deleted file mode 100644 index 740907fb..00000000 Binary files a/docs/.doctrees/3.15-steeldesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.1-steeldesign.doctree b/docs/.doctrees/3.15.1-steeldesign.doctree deleted file mode 100644 index 6b61d743..00000000 Binary files a/docs/.doctrees/3.15.1-steeldesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.1.1-ultimateconfigurations.doctree b/docs/.doctrees/3.15.1.1-ultimateconfigurations.doctree deleted file mode 100644 index 0a324cb2..00000000 Binary files a/docs/.doctrees/3.15.1.1-ultimateconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.1.2-serviceabilityconfigurations.doctree b/docs/.doctrees/3.15.1.2-serviceabilityconfigurations.doctree deleted file mode 100644 index a6be280e..00000000 Binary files a/docs/.doctrees/3.15.1.2-serviceabilityconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.1.3-fireresistanceconfigurations.doctree b/docs/.doctrees/3.15.1.3-fireresistanceconfigurations.doctree deleted file mode 100644 index 76c8df6d..00000000 Binary files a/docs/.doctrees/3.15.1.3-fireresistanceconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.1.4-seismicconfigurations.doctree b/docs/.doctrees/3.15.1.4-seismicconfigurations.doctree deleted file mode 100644 index 5506d6e9..00000000 Binary files a/docs/.doctrees/3.15.1.4-seismicconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2-typesforsteeldesign.doctree b/docs/.doctrees/3.15.2-typesforsteeldesign.doctree deleted file mode 100644 index 9c4b3530..00000000 Binary files a/docs/.doctrees/3.15.2-typesforsteeldesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2.1-effectivelengths.doctree b/docs/.doctrees/3.15.2.1-effectivelengths.doctree deleted file mode 100644 index d97afb08..00000000 Binary files a/docs/.doctrees/3.15.2.1-effectivelengths.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2.2-boundaryconditions.doctree b/docs/.doctrees/3.15.2.2-boundaryconditions.doctree deleted file mode 100644 index 0653e6e4..00000000 Binary files a/docs/.doctrees/3.15.2.2-boundaryconditions.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2.3-memberlocalsectionreductions.doctree b/docs/.doctrees/3.15.2.3-memberlocalsectionreductions.doctree deleted file mode 100644 index a1342d87..00000000 Binary files a/docs/.doctrees/3.15.2.3-memberlocalsectionreductions.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2.4-membershearpanels.doctree b/docs/.doctrees/3.15.2.4-membershearpanels.doctree deleted file mode 100644 index c9a2e5b4..00000000 Binary files a/docs/.doctrees/3.15.2.4-membershearpanels.doctree and /dev/null differ diff --git a/docs/.doctrees/3.15.2.5-memberrotationalrestraints.doctree b/docs/.doctrees/3.15.2.5-memberrotationalrestraints.doctree deleted file mode 100644 index d0f3926e..00000000 Binary files a/docs/.doctrees/3.15.2.5-memberrotationalrestraints.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16-timberdesign.doctree b/docs/.doctrees/3.16-timberdesign.doctree deleted file mode 100644 index 6ead3f2c..00000000 Binary files a/docs/.doctrees/3.16-timberdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.1-timberdesign.doctree b/docs/.doctrees/3.16.1-timberdesign.doctree deleted file mode 100644 index 8742689b..00000000 Binary files a/docs/.doctrees/3.16.1-timberdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.1.1-ultimateconfigurations.doctree b/docs/.doctrees/3.16.1.1-ultimateconfigurations.doctree deleted file mode 100644 index 5b11793c..00000000 Binary files a/docs/.doctrees/3.16.1.1-ultimateconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.1.2-serviceabilityconfigurations.doctree b/docs/.doctrees/3.16.1.2-serviceabilityconfigurations.doctree deleted file mode 100644 index f409ae49..00000000 Binary files a/docs/.doctrees/3.16.1.2-serviceabilityconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.1.3-fireresistanceconfigurations.doctree b/docs/.doctrees/3.16.1.3-fireresistanceconfigurations.doctree deleted file mode 100644 index f173f890..00000000 Binary files a/docs/.doctrees/3.16.1.3-fireresistanceconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.1.4-seismicconfigurations.doctree b/docs/.doctrees/3.16.1.4-seismicconfigurations.doctree deleted file mode 100644 index 8adec5fb..00000000 Binary files a/docs/.doctrees/3.16.1.4-seismicconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.2-typesfortimberdesign.doctree b/docs/.doctrees/3.16.2-typesfortimberdesign.doctree deleted file mode 100644 index 28691fd4..00000000 Binary files a/docs/.doctrees/3.16.2-typesfortimberdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.2.1-effectivelengths.doctree b/docs/.doctrees/3.16.2.1-effectivelengths.doctree deleted file mode 100644 index e792644e..00000000 Binary files a/docs/.doctrees/3.16.2.1-effectivelengths.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.2.2-serviceclasses.doctree b/docs/.doctrees/3.16.2.2-serviceclasses.doctree deleted file mode 100644 index 18152989..00000000 Binary files a/docs/.doctrees/3.16.2.2-serviceclasses.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.2.3-memberlocalsectionreductions.doctree b/docs/.doctrees/3.16.2.3-memberlocalsectionreductions.doctree deleted file mode 100644 index 768d42d7..00000000 Binary files a/docs/.doctrees/3.16.2.3-memberlocalsectionreductions.doctree and /dev/null differ diff --git a/docs/.doctrees/3.16.2.4-memberrotaionalrestraints.doctree b/docs/.doctrees/3.16.2.4-memberrotaionalrestraints.doctree deleted file mode 100644 index e73f789d..00000000 Binary files a/docs/.doctrees/3.16.2.4-memberrotaionalrestraints.doctree and /dev/null differ diff --git a/docs/.doctrees/3.17-masonrydesign.doctree b/docs/.doctrees/3.17-masonrydesign.doctree deleted file mode 100644 index bf564274..00000000 Binary files a/docs/.doctrees/3.17-masonrydesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18-aluminumdesign.doctree b/docs/.doctrees/3.18-aluminumdesign.doctree deleted file mode 100644 index d32b7a7b..00000000 Binary files a/docs/.doctrees/3.18-aluminumdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.1-aluminumdesign.doctree b/docs/.doctrees/3.18.1-aluminumdesign.doctree deleted file mode 100644 index ce7f4431..00000000 Binary files a/docs/.doctrees/3.18.1-aluminumdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.1.1-ultimateconfigurations.doctree b/docs/.doctrees/3.18.1.1-ultimateconfigurations.doctree deleted file mode 100644 index 44c240a0..00000000 Binary files a/docs/.doctrees/3.18.1.1-ultimateconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.1.2-serviceabilityconfigurations.doctree b/docs/.doctrees/3.18.1.2-serviceabilityconfigurations.doctree deleted file mode 100644 index 8a44a62d..00000000 Binary files a/docs/.doctrees/3.18.1.2-serviceabilityconfigurations.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.2-typesforaluminumdesign.doctree b/docs/.doctrees/3.18.2-typesforaluminumdesign.doctree deleted file mode 100644 index 894c8e2a..00000000 Binary files a/docs/.doctrees/3.18.2-typesforaluminumdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.2.1-effectivelengths.doctree b/docs/.doctrees/3.18.2.1-effectivelengths.doctree deleted file mode 100644 index 666d00c9..00000000 Binary files a/docs/.doctrees/3.18.2.1-effectivelengths.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.2.2-memberlocalsectionreductions.doctree b/docs/.doctrees/3.18.2.2-memberlocalsectionreductions.doctree deleted file mode 100644 index 454d3953..00000000 Binary files a/docs/.doctrees/3.18.2.2-memberlocalsectionreductions.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.2.3-membershearpanels.doctree b/docs/.doctrees/3.18.2.3-membershearpanels.doctree deleted file mode 100644 index 69f93974..00000000 Binary files a/docs/.doctrees/3.18.2.3-membershearpanels.doctree and /dev/null differ diff --git a/docs/.doctrees/3.18.2.4-memberrotationalrestraints.doctree b/docs/.doctrees/3.18.2.4-memberrotationalrestraints.doctree deleted file mode 100644 index 43802827..00000000 Binary files a/docs/.doctrees/3.18.2.4-memberrotationalrestraints.doctree and /dev/null differ diff --git a/docs/.doctrees/3.19-steeljoints.doctree b/docs/.doctrees/3.19-steeljoints.doctree deleted file mode 100644 index fa64a5d5..00000000 Binary files a/docs/.doctrees/3.19-steeljoints.doctree and /dev/null differ diff --git a/docs/.doctrees/3.19.1-steeljointdesign.doctree b/docs/.doctrees/3.19.1-steeljointdesign.doctree deleted file mode 100644 index 0af2b519..00000000 Binary files a/docs/.doctrees/3.19.1-steeljointdesign.doctree and /dev/null differ diff --git a/docs/.doctrees/3.19.1.1-ultimateconfiguration.doctree b/docs/.doctrees/3.19.1.1-ultimateconfiguration.doctree deleted file mode 100644 index 53714552..00000000 Binary files a/docs/.doctrees/3.19.1.1-ultimateconfiguration.doctree and /dev/null differ diff --git a/docs/.doctrees/3.19.2-typesforsteeljoints.doctree b/docs/.doctrees/3.19.2-typesforsteeljoints.doctree deleted file mode 100644 index 4628476b..00000000 Binary files a/docs/.doctrees/3.19.2-typesforsteeljoints.doctree and /dev/null differ diff --git a/docs/.doctrees/3.19.2.1-steeljoint.doctree b/docs/.doctrees/3.19.2.1-steeljoint.doctree deleted file mode 100644 index ca43270d..00000000 Binary files a/docs/.doctrees/3.19.2.1-steeljoint.doctree and /dev/null differ diff --git a/docs/.doctrees/3.2-structurestability.doctree b/docs/.doctrees/3.2-structurestability.doctree deleted file mode 100644 index cc07d932..00000000 Binary files a/docs/.doctrees/3.2-structurestability.doctree and /dev/null differ diff --git a/docs/.doctrees/3.2.1-stabilityanalysissettings.doctree b/docs/.doctrees/3.2.1-stabilityanalysissettings.doctree deleted file mode 100644 index 60a82a27..00000000 Binary files a/docs/.doctrees/3.2.1-stabilityanalysissettings.doctree and /dev/null differ diff --git a/docs/.doctrees/3.20-co2estimation.doctree b/docs/.doctrees/3.20-co2estimation.doctree deleted file mode 100644 index 49cdb646..00000000 Binary files a/docs/.doctrees/3.20-co2estimation.doctree and /dev/null differ diff --git a/docs/.doctrees/3.3-constructionstages.doctree b/docs/.doctrees/3.3-constructionstages.doctree deleted file mode 100644 index 73f97145..00000000 Binary files a/docs/.doctrees/3.3-constructionstages.doctree and /dev/null differ diff --git a/docs/.doctrees/3.3.1-constructionstages.doctree b/docs/.doctrees/3.3.1-constructionstages.doctree deleted file mode 100644 index d078496b..00000000 Binary files a/docs/.doctrees/3.3.1-constructionstages.doctree and /dev/null differ diff --git a/docs/.doctrees/3.4-timedependentanalysis.doctree b/docs/.doctrees/3.4-timedependentanalysis.doctree deleted file mode 100644 index 77714771..00000000 Binary files a/docs/.doctrees/3.4-timedependentanalysis.doctree and /dev/null differ diff --git a/docs/.doctrees/3.5-formfinding.doctree b/docs/.doctrees/3.5-formfinding.doctree deleted file mode 100644 index 477f4c72..00000000 Binary files a/docs/.doctrees/3.5-formfinding.doctree and /dev/null differ diff --git a/docs/.doctrees/3.6-cuttingpatterns.doctree b/docs/.doctrees/3.6-cuttingpatterns.doctree deleted file mode 100644 index 9a47b69a..00000000 Binary files a/docs/.doctrees/3.6-cuttingpatterns.doctree and /dev/null differ diff --git a/docs/.doctrees/3.7-torsionalwarping.doctree b/docs/.doctrees/3.7-torsionalwarping.doctree deleted file mode 100644 index 606d573f..00000000 Binary files a/docs/.doctrees/3.7-torsionalwarping.doctree and /dev/null differ diff --git a/docs/.doctrees/3.8-modalanalysis.doctree b/docs/.doctrees/3.8-modalanalysis.doctree deleted file mode 100644 index 03384880..00000000 Binary files a/docs/.doctrees/3.8-modalanalysis.doctree and /dev/null differ diff --git a/docs/.doctrees/3.8.1-modalanalysissettings.doctree b/docs/.doctrees/3.8.1-modalanalysissettings.doctree deleted file mode 100644 index 9894637e..00000000 Binary files a/docs/.doctrees/3.8.1-modalanalysissettings.doctree and /dev/null differ diff --git a/docs/.doctrees/3.9-dynamicloads.doctree b/docs/.doctrees/3.9-dynamicloads.doctree deleted file mode 100644 index 21193881..00000000 Binary files a/docs/.doctrees/3.9-dynamicloads.doctree and /dev/null differ diff --git a/docs/.doctrees/3.9.1-responsespectra.doctree b/docs/.doctrees/3.9.1-responsespectra.doctree deleted file mode 100644 index 7a8673e9..00000000 Binary files a/docs/.doctrees/3.9.1-responsespectra.doctree and /dev/null differ diff --git a/docs/.doctrees/3.9.2-accelograms.doctree b/docs/.doctrees/3.9.2-accelograms.doctree deleted file mode 100644 index 5baf7fc8..00000000 Binary files a/docs/.doctrees/3.9.2-accelograms.doctree and /dev/null differ diff --git a/docs/.doctrees/4-examples.doctree b/docs/.doctrees/4-examples.doctree deleted file mode 100644 index c62f42b7..00000000 Binary files a/docs/.doctrees/4-examples.doctree and /dev/null differ diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle deleted file mode 100644 index c407af01..00000000 Binary files a/docs/.doctrees/environment.pickle and /dev/null differ diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree deleted file mode 100644 index b5d9efe8..00000000 Binary files a/docs/.doctrees/index.doctree and /dev/null differ diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/1-installation.html b/docs/1-installation.html deleted file mode 100644 index 3950eafe..00000000 --- a/docs/1-installation.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - - 1. Installation — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

1. Installation

-

Three ways are available:

-

1) To utilize the library, install it right into your Python via cmd pip install dlubal-api. Read more about Open API project for RFEM/RSTAB on Pypi.org website.

-

2) To use it with possiblity of making local changes, download actual release from GitHub project page in form of a zip/tar.gz.

-

3) For more experienced users, GitHub repo is available for download. This allows users to share the changes and also contribute to the project.

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2-globalcommands.html b/docs/2-globalcommands.html deleted file mode 100644 index 1b80da35..00000000 --- a/docs/2-globalcommands.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2. Global Commands — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1-basicobjects.html b/docs/2.1-basicobjects.html deleted file mode 100644 index 5542cdd8..00000000 --- a/docs/2.1-basicobjects.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - - 2.1. Basic Objects — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.1-materials.html b/docs/2.1.1-materials.html deleted file mode 100644 index 28d8a89e..00000000 --- a/docs/2.1.1-materials.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - - 2.1.1. Material — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.1. Material

-
-
-Material(no, name, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • name (str): Material Name
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.10-linesets.html b/docs/2.1.10-linesets.html deleted file mode 100644 index a43e36b1..00000000 --- a/docs/2.1.10-linesets.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - 2.1.10. LineSet — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.10. LineSet

-
-
-LineSet(no, lines_no, line_set_type, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • lines_no (str): Tags of Lines
    • -
    • line_set_type (enum): Set Type Enumeration
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-LineSet.ContinuousLines(no, lines_no, line_set_type, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • lines_no (str): Tags of Lines
    • -
    • line_set_type (enum): Set Type Enumeration
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-LineSet.GroupOfLines(no, lines_no, line_set_type, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • lines_no (str): Tags of Lines
    • -
    • line_set_type (enum): Set Type Enumeration
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.11-membersets.html b/docs/2.1.11-membersets.html deleted file mode 100644 index 37573159..00000000 --- a/docs/2.1.11-membersets.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.11. MemberSet — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.11. MemberSet

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.12-surfacesets.html b/docs/2.1.12-surfacesets.html deleted file mode 100644 index 0f85d641..00000000 --- a/docs/2.1.12-surfacesets.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.12. SurfaceSet — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.12. SurfaceSet

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.13-solidsets.html b/docs/2.1.13-solidsets.html deleted file mode 100644 index 3bb6ad0c..00000000 --- a/docs/2.1.13-solidsets.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.13. SolidSet — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.13. SolidSet

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.2-sections.html b/docs/2.1.2-sections.html deleted file mode 100644 index 7e08279d..00000000 --- a/docs/2.1.2-sections.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.2. Section — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.2. Section

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.3-thicknesses.html b/docs/2.1.3-thicknesses.html deleted file mode 100644 index ffe91f46..00000000 --- a/docs/2.1.3-thicknesses.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.3. Thickness — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.3. Thickness

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.4-nodes.html b/docs/2.1.4-nodes.html deleted file mode 100644 index 4bf2c6ee..00000000 --- a/docs/2.1.4-nodes.html +++ /dev/null @@ -1,507 +0,0 @@ - - - - - - - - - - 2.1.4. Node — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.4. Node

-
-
-Node(no, coordinate_X, coordinate_Y, coordinate_Z, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • coordinate_X (float): X-Coordinate
    • -
    • coordinate_Y (float): Y-Coordinate
    • -
    • coordinate_Z (float): Z-Coordinate
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Node.Standard(no, coordinate_system, coordinate_system_type, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag

      -
    • -
    • coordinate_sytem (list): Coordinate System Parameters

      -
    • -
    • coordinate_sytem_type (enum): Coordinate System Type Enumeration

      -
    • -
    • comment ( str, optional): Comments

      -
    • -
    • params (dict, optional): Parameters

      -
      -
      -
      For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_CARTESIAN:
      -

      coordinate_system = [X, Y, Z]

      -
      -
      For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_X_CYLINDRICAL:
      -

      coordinate_system = [X, R, θ]

      -
      -
      For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_Y_CYLINDRICAL:
      -

      coordinate_system = [R, Ύ, θ]

      -
      -
      For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_Z_CYLINDRICAL:
      -

      coordinate_system = [R, θ, Z]

      -
      -
      For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_POLAR:
      -

      coordinate_system = [R, θ, φ]

      -
      -
      -
      -
    • -
    -
    -
  • -
-
-
-
-Node.BetweenTwoNodes(no, start_node_no, end_node_no, node_reference, length_between_i_and_j, parameters, offset_y, offset_z, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag

      -
    • -
    • start_node_no (int): Start Node

      -
    • -
    • end_node_no (int): End Node

      -
    • -
    • node_reference (enum): Node Reference Enumeration

      -
    • -
    • length_between_i_and_j (int): Length Between 2 Nodes

      -
    • -
    • parameters (list): Parameter List

      -
    • -
    • offset_y (int): Offset in Y-Direction

      -
    • -
    • offset_z (int): Offset in Z-Direction

      -
    • -
    • comment ( str, optional): Comments

      -
    • -
    • params (dict, optional): Parameters

      -
      -
      -
      If distance_from_start_relative:
      -

      parameters = [True, %]

      -
      -
      If distance_from_start_absolute:
      -

      parameters = [False, magnitude]

      -
      -
      -
      -
    • -
    -
    -
  • -
-
-
-
-Node.BetweenTwoPoints(no, start_point_x, start_point_y, start_point_z, end_point_x, end_point_y, end_point_z, node_reference, parameters, offset_y, offset_z, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag

      -
    • -
    • start_point_x (float): Start Point in X-Coordinate

      -
    • -
    • start_point_y (float): Start Point in Y-Coordinate

      -
    • -
    • start_point_z (float): Start Point in Z-Coordinate

      -
    • -
    • end_point_x (float): End Point in X-Coordinate

      -
    • -
    • end_point_y (float): End Point in Y-Coordinate

      -
    • -
    • end_point_z (float): End Point in Z-Coordinate

      -
    • -
    • node_reference (enum) : Node Reference Enumeration

      -
    • -
    • parameters (list): Parameter List

      -
    • -
    • offset_y (int): Offset in Y-Direction

      -
    • -
    • offset_z (int): Offset in Z-Direction

      -
    • -
    • comment ( str, optional): Comments

      -
    • -
    • params (dict, optional): Parameters

      -
      -
      -
      if distance_from_start_relative:
      -

      parameters = [True, %]

      -
      -
      if distance_from_start_absolute:
      -

      parameters = [False, magnitude]

      -
      -
      -
      -
    • -
    -
    -
  • -
-
-
-
-Node.OnLine(no, line_number, node_reference, length_between_i_and_j, parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag

      -
    • -
    • line_number (int) : Line Tag

      -
    • -
    • node_reference (enum) : Node Reference Enumeration

      -
    • -
    • length_between_i_and_j (int): Length Between 2 Nodes

      -
    • -
    • parameters (list): Parameter List

      -
    • -
    • comment ( str, optional): Comments

      -
    • -
    • params (dict, optional): Parameters

      -
      -
      -
      if distance_from_start_relative:
      -

      parameters = [True, %]

      -
      -
      if distance_from_start_absolute:
      -

      parameters = [False, magnitude]

      -
      -
      -
      -
    • -
    -
    -
  • -
-
-
-
-Node.OnMember(no, member_number, node_reference, length_between_i_and_j, parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag

      -
    • -
    • member_number (int) : Member Tag

      -
    • -
    • node_reference (enum) : Node Reference Enumeration

      -
    • -
    • length_between_i_and_j (int): Length Between 2 Nodes

      -
    • -
    • parameters (list): Parameter List

      -
    • -
    • comment ( str, optional): Comments

      -
    • -
    • params (dict, optional): Parameters

      -
      -
      -
      if distance_from_start_relative:
      -

      parameters = [True, %]

      -
      -
      if distance_from_start_absolute:
      -

      parameters = [False, magnitude]

      -
      -
      -
      -
    • -
    -
    -
  • -
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.5-lines.html b/docs/2.1.5-lines.html deleted file mode 100644 index c851cf82..00000000 --- a/docs/2.1.5-lines.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - - - - - 2.1.5. Line — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.5. Line

-
-
-Line(no, nodes_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Polyline(no, nodes_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Arc(no, nodes_no, control_point, alpha_adjustment_target, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • control_point (list): Coordinates of the Control Point
    • -
    • alpha_adjustment_target (enum): Line Arc Alpha Adjustment Target
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Circle(no, nodes_no, center_of_cirle, circle_radius, point_of_normal_to_circle_plane, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • center_of_cirle (list): Coordinates of the Center Point
    • -
    • circle_radius (float): Radius of the Circle
    • -
    • point_of_normal_to_circle_plane (list): Coordinates of the Normal Point
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.EllipticalArc(no, nodes_no, p1_control_point, p2_control_point, p3_control_point, arc_angle_alpha, arc_angle_beta, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • p1_control_point (list): Coordinates of the Control Point 1
    • -
    • p2_control_point (list): Coordinates of the Control Point 2
    • -
    • p3_control_point (list): Coordinates of the Control Point 3
    • -
    • arc_angle_alpha (float): Alpha Angle
    • -
    • arc_angle_beta (float): Beta Angle
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Ellipse(no, nodes_no, p3_control_point, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • p3_control_point (list): Coordinates of the Control Point 3
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Parabola(no, nodes_no, p3_control_point, parabola_alpha, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • p3_control_point (list): Coordinates of the Control Point 3
    • -
    • parabola_alpha (float): Alpha Angle
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.Spline(no, nodes_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-
-Line.NURBS(no, nodes_no, control_points, weights, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Line Tag
    • -
    • nodes_no (str): Tags of Nodes
    • -
    • control_points (list): List of Coordinates of the Control Points
    • -
    • weights (list): List of Weights
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.6-members.html b/docs/2.1.6-members.html deleted file mode 100644 index 8cedcad1..00000000 --- a/docs/2.1.6-members.html +++ /dev/null @@ -1,601 +0,0 @@ - - - - - - - - - - 2.1.6. Member — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.6. Member

-
-
-Member(no, start_node_no, end_node_no, rotation_angle, start_section_no, end_section_no, start_member_hinge_no, end_member_hinge_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_angle (int): Member Rotation Angle
    • -
    • start_section_no (int): Tag of Start Section
    • -
    • end_section_no (int): Tag of End Section
    • -
    • start_member_hinge_no (int): Tag of Start Member Hinge
    • -
    • end_member_hinge_no (int): Tag of End Member Hinge
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Beam(no, start_node_no, end_node_no, section_distribution_type, rotation_specification_type, rotation_parameters, start_section_no, end_section_no, distribution_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • section_distribution_type (enum): Section Distribution Enumeration
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • start_section_no (int): Tag of Start Section
    • -
    • end_section_no (int): Tag of End Section
    • -
    • distribution_parameters (list): Distribution Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Rigid(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Rib(no, start_node_no, end_node_no, section_distribution_type, start_section_no, end_section_no, rib_surfaces_no, rib_alignment, reference_width_type, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • section_distribution_type (enum): Section Distribution Enumeration
    • -
    • start_section_no (int): Tag of Start Section
    • -
    • end_section_no (int): Tag of End Section
    • -
    • rib_surfaces_no (list): Surface Tags Assigned to Rib
    • -
    • rib_alignment (enum): Rib Alignment Enumeration
    • -
    • reference_width_type (enum): Reference Width Enumeration
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Truss(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.TrussOnlyN(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Tension(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Compression(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Buckling(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.Cable(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, section_no, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • section_no (int): Tag of Section
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.ResultBeam(no, start_node_no, end_node_no, section_distribution_type, rotation_specification_type, rotation_parameters, start_section_no, end_section_no, distribution_parameters, integration_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • section_distribution_type (enum): Section Distribution Enumeration
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • start_section_no (int): Tag of Start Section
    • -
    • end_section_no (int): Tag of End Section
    • -
    • distribution_parameters (list): Distribution Parameters
    • -
    • integration_parameters (list): Integration Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.DefinableStiffness(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, definable_stiffness, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • definable_stiffness (int): Tag of Member Definable Stiffness
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.CouplingRigidRigid(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.CouplingRigidHinge(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.CouplingHingeRigid(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
-
-Member.CouplingHingeHinge(no, start_node_no, end_node_no, rotation_specification_type, rotation_parameters, comment*, params*)
-
- -
    -
  • Parameters

    -
    -
      -
    • no (int): Member Tag
    • -
    • start_node_no (int): Tag of Start Node
    • -
    • end_node_no (int): Tag of End Node
    • -
    • rotation_specification_type (enum): Rotation Specification Enumeration
    • -
    • rotation_parameters (list): Rotation Parameters
    • -
    • comment ( str, optional): Comments
    • -
    • params (dict, optional): Parameters
    • -
    -
    -
  • -
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.7-surfaces.html b/docs/2.1.7-surfaces.html deleted file mode 100644 index b118fe36..00000000 --- a/docs/2.1.7-surfaces.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.7. Surface — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.7. Surface

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.8-openings.html b/docs/2.1.8-openings.html deleted file mode 100644 index e1068bd5..00000000 --- a/docs/2.1.8-openings.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.8. Opening — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.8. Opening

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.1.9-solids.html b/docs/2.1.9-solids.html deleted file mode 100644 index 5c246f31..00000000 --- a/docs/2.1.9-solids.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 2.1.9. Solid — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.1.9. Solid

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10-loadcasesandcombinations.html b/docs/2.10-loadcasesandcombinations.html deleted file mode 100644 index 858de1e4..00000000 --- a/docs/2.10-loadcasesandcombinations.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 2.10. Load Cases and Combinations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
- - -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.1-loadcase.html b/docs/2.10.1-loadcase.html deleted file mode 100644 index 0cecd54e..00000000 --- a/docs/2.10.1-loadcase.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.1. Load Case — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.1. Load Case

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.2-action.html b/docs/2.10.2-action.html deleted file mode 100644 index f199d54a..00000000 --- a/docs/2.10.2-action.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.2. Action — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.2. Action

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.3-designsituation.html b/docs/2.10.3-designsituation.html deleted file mode 100644 index 76caf320..00000000 --- a/docs/2.10.3-designsituation.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.3. Design Situation — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.3. Design Situation

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.4-actioncombination.html b/docs/2.10.4-actioncombination.html deleted file mode 100644 index efa51a93..00000000 --- a/docs/2.10.4-actioncombination.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.4. Action Combination — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.4. Action Combination

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.5-loadcombination.html b/docs/2.10.5-loadcombination.html deleted file mode 100644 index b5f671db..00000000 --- a/docs/2.10.5-loadcombination.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.5. Load Combination — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.5. Load Combination

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.6-staticanalysissettings.html b/docs/2.10.6-staticanalysissettings.html deleted file mode 100644 index 3752bbeb..00000000 --- a/docs/2.10.6-staticanalysissettings.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.6. Static Analysis Settings — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.6. Static Analysis Settings

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.10.7-combinationwizard.html b/docs/2.10.7-combinationwizard.html deleted file mode 100644 index b3cfb8ce..00000000 --- a/docs/2.10.7-combinationwizard.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.10.7. Combination Wizard — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.10.7. Combination Wizard

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.11-loadwizards.html b/docs/2.11-loadwizards.html deleted file mode 100644 index ce790035..00000000 --- a/docs/2.11-loadwizards.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - 2.11. Load Wizards — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
- - -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.11.1-memberloadsfromareaload.html b/docs/2.11.1-memberloadsfromareaload.html deleted file mode 100644 index fe3dfac6..00000000 --- a/docs/2.11.1-memberloadsfromareaload.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.11.1. Member Loads From Area Load — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.11.1. Member Loads From Area Load

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.11.2-memberloadsfromfreelineload.html b/docs/2.11.2-memberloadsfromfreelineload.html deleted file mode 100644 index ad2da5bb..00000000 --- a/docs/2.11.2-memberloadsfromfreelineload.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.11.2. Member Loads From Free Line Load — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.11.2. Member Loads From Free Line Load

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.11.3-snowload.html b/docs/2.11.3-snowload.html deleted file mode 100644 index e82e9b37..00000000 --- a/docs/2.11.3-snowload.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.11.3. Snow Load — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.11.3. Snow Load

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.11.4-windload.html b/docs/2.11.4-windload.html deleted file mode 100644 index 0feff752..00000000 --- a/docs/2.11.4-windload.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.11.4. Wind Load — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.11.4. Wind Load

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.12-loads.html b/docs/2.12-loads.html deleted file mode 100644 index 8af4b65a..00000000 --- a/docs/2.12-loads.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - 2.12. Loads — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.12. Loads

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.13-results.html b/docs/2.13-results.html deleted file mode 100644 index 44d61bc4..00000000 --- a/docs/2.13-results.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - 2.13. Results — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.13. Results

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.14-guideobjects.html b/docs/2.14-guideobjects.html deleted file mode 100644 index 3cf54884..00000000 --- a/docs/2.14-guideobjects.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - 2.14. Guide Objects — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.14. Guide Objects

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.15-printoutreport.html b/docs/2.15-printoutreport.html deleted file mode 100644 index d6b321aa..00000000 --- a/docs/2.15-printoutreport.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - 2.15. Printout Report — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.15. Printout Report

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2-specialobjects.html b/docs/2.2-specialobjects.html deleted file mode 100644 index 1b267a8c..00000000 --- a/docs/2.2-specialobjects.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 2.2. Special Objects — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.1-intersections.html b/docs/2.2.1-intersections.html deleted file mode 100644 index 0aa7d831..00000000 --- a/docs/2.2.1-intersections.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.1. Intersection — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.1. Intersection

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.2-surfaceresultadjustments.html b/docs/2.2.2-surfaceresultadjustments.html deleted file mode 100644 index baa2dc0e..00000000 --- a/docs/2.2.2-surfaceresultadjustments.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.2. SurfaceResultAdjustment — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.2. SurfaceResultAdjustment

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.3-surfacecontacts.html b/docs/2.2.3-surfacecontacts.html deleted file mode 100644 index 6a4a03bb..00000000 --- a/docs/2.2.3-surfacecontacts.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.3. SurfaceContact — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.3. SurfaceContact

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.4-rigidlinks.html b/docs/2.2.4-rigidlinks.html deleted file mode 100644 index dd14b66f..00000000 --- a/docs/2.2.4-rigidlinks.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.4. RigidLink — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.5-resultsections.html b/docs/2.2.5-resultsections.html deleted file mode 100644 index 39657db6..00000000 --- a/docs/2.2.5-resultsections.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.5. ResultSection — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.5. ResultSection

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.6-structuremodifications.html b/docs/2.2.6-structuremodifications.html deleted file mode 100644 index e46198ea..00000000 --- a/docs/2.2.6-structuremodifications.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.6. StructureModification — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.6. StructureModification

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.2.7-blocks.html b/docs/2.2.7-blocks.html deleted file mode 100644 index 2040916f..00000000 --- a/docs/2.2.7-blocks.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.2.7. Block — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.2.7. Block

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.3-typesfornodes.html b/docs/2.3-typesfornodes.html deleted file mode 100644 index 5ea99955..00000000 --- a/docs/2.3-typesfornodes.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 2.3. Types for Nodes — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.3. Types for Nodes

-
    -
  1. NodalSupport
  2. -
  3. NodalMeshRefinement
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.3.1-nodalsupports.html b/docs/2.3.1-nodalsupports.html deleted file mode 100644 index 050451b6..00000000 --- a/docs/2.3.1-nodalsupports.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - 2.3.1. NodalSupport — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.3.1. NodalSupport

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.3.2-nodalmeshrefinements.html b/docs/2.3.2-nodalmeshrefinements.html deleted file mode 100644 index 3185ed50..00000000 --- a/docs/2.3.2-nodalmeshrefinements.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - 2.3.2. NodalMeshRefinement — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.3.2. NodalMeshRefinement

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.4-typesforlines.html b/docs/2.4-typesforlines.html deleted file mode 100644 index 3cd7df1b..00000000 --- a/docs/2.4-typesforlines.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - 2.4. Types for Lines — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.4. Types for Lines

-
    -
  1. LineSupport
  2. -
  3. LineMeshRefinements
  4. -
  5. LineHinge
  6. -
  7. LineWeldedJoints
  8. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.4.1-linesupports.html b/docs/2.4.1-linesupports.html deleted file mode 100644 index 631933ad..00000000 --- a/docs/2.4.1-linesupports.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.4.1. LineSupport — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.4.1. LineSupport

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.4.2-linemeshrefinements.html b/docs/2.4.2-linemeshrefinements.html deleted file mode 100644 index 55b2004b..00000000 --- a/docs/2.4.2-linemeshrefinements.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.4.2. LineMeshRefinements — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.4.2. LineMeshRefinements

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.4.3-linehinges.html b/docs/2.4.3-linehinges.html deleted file mode 100644 index 111ffd80..00000000 --- a/docs/2.4.3-linehinges.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.4.3. LineHinge — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.4.3. LineHinge

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.4.4-lineweldedjoints.html b/docs/2.4.4-lineweldedjoints.html deleted file mode 100644 index abe540d9..00000000 --- a/docs/2.4.4-lineweldedjoints.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.4.4. LineWeldedJoints — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.4.4. LineWeldedJoints

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5-typesformembers.html b/docs/2.5-typesformembers.html deleted file mode 100644 index d3baf6a4..00000000 --- a/docs/2.5-typesformembers.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 2.5. Types for Members — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.1-memberhinges.html b/docs/2.5.1-memberhinges.html deleted file mode 100644 index b65ac7df..00000000 --- a/docs/2.5.1-memberhinges.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.1. MemberHinge — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.1. MemberHinge

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.2-membereccentricities.html b/docs/2.5.2-membereccentricities.html deleted file mode 100644 index 3e28ce09..00000000 --- a/docs/2.5.2-membereccentricities.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.2. MemberEccentricity — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.2. MemberEccentricity

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.3-membersupports.html b/docs/2.5.3-membersupports.html deleted file mode 100644 index af8e60fa..00000000 --- a/docs/2.5.3-membersupports.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.3. MemberSupport — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.3. MemberSupport

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.4-memberstiffnessmodifications.html b/docs/2.5.4-memberstiffnessmodifications.html deleted file mode 100644 index 6e375fe5..00000000 --- a/docs/2.5.4-memberstiffnessmodifications.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.4. MemberStiffnessModification — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.4. MemberStiffnessModification

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.5-membernonlinearities.html b/docs/2.5.5-membernonlinearities.html deleted file mode 100644 index 9f257948..00000000 --- a/docs/2.5.5-membernonlinearities.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.5. MemberNonlinearity — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.5. MemberNonlinearity

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.6-memberdefineablestiffness.html b/docs/2.5.6-memberdefineablestiffness.html deleted file mode 100644 index 92c97fdd..00000000 --- a/docs/2.5.6-memberdefineablestiffness.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.6. MemberDefineableStiffness — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.6. MemberDefineableStiffness

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.5.7-memberresultintermediatepoints.html b/docs/2.5.7-memberresultintermediatepoints.html deleted file mode 100644 index 9bba9783..00000000 --- a/docs/2.5.7-memberresultintermediatepoints.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 2.5.7. MemberResultIntermediatePoints — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.5.7. MemberResultIntermediatePoints

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.6-typesforsurfaces.html b/docs/2.6-typesforsurfaces.html deleted file mode 100644 index 4448ba34..00000000 --- a/docs/2.6-typesforsurfaces.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - 2.6. Types for Surfaces — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
- - -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.6.1-surfacesupports.html b/docs/2.6.1-surfacesupports.html deleted file mode 100644 index d702056d..00000000 --- a/docs/2.6.1-surfacesupports.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.6.1. SurfaceSupport — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.6.1. SurfaceSupport

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.6.2-surfaceeccentricities.html b/docs/2.6.2-surfaceeccentricities.html deleted file mode 100644 index f07d29a0..00000000 --- a/docs/2.6.2-surfaceeccentricities.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.6.2. SurfaceEccentricity — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.6.2. SurfaceEccentricity

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.6.3-surfacestiffnessmodifications.html b/docs/2.6.3-surfacestiffnessmodifications.html deleted file mode 100644 index dc0e72d0..00000000 --- a/docs/2.6.3-surfacestiffnessmodifications.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.6.3. SurfaceStiffnessModification — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.6.3. SurfaceStiffnessModification

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.6.4-surfacemeshrefinements.html b/docs/2.6.4-surfacemeshrefinements.html deleted file mode 100644 index 9dd9c611..00000000 --- a/docs/2.6.4-surfacemeshrefinements.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.6.4. SurfaceMeshRefinement — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.6.4. SurfaceMeshRefinement

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.7-typesforsolids.html b/docs/2.7-typesforsolids.html deleted file mode 100644 index e6a3dc7a..00000000 --- a/docs/2.7-typesforsolids.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - 2.7. Types for Solids — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.7. Types for Solids

-
    -
  1. Solid Mesh Refinement
  2. -
  3. Solid Gas
  4. -
  5. Solid Contact
  6. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.7.1-solidmeshrefinement.html b/docs/2.7.1-solidmeshrefinement.html deleted file mode 100644 index dd8ffae1..00000000 --- a/docs/2.7.1-solidmeshrefinement.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - - - 2.7.1. Solid Mesh Refinement — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.7.1. Solid Mesh Refinement

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.7.2-solidgas.html b/docs/2.7.2-solidgas.html deleted file mode 100644 index 50ef717f..00000000 --- a/docs/2.7.2-solidgas.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - - - 2.7.2. Solid Gas — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.7.2. Solid Gas

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.7.3-solidcontact.html b/docs/2.7.3-solidcontact.html deleted file mode 100644 index dcb8c27d..00000000 --- a/docs/2.7.3-solidcontact.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - - - 2.7.3. Solid Contact — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.7.3. Solid Contact

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.8-typesforspecialobjects.html b/docs/2.8-typesforspecialobjects.html deleted file mode 100644 index 2c75250d..00000000 --- a/docs/2.8-typesforspecialobjects.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - 2.8. Types for Special Objects — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.8. Types for Special Objects

-
    -
  1. Surface Contact Type
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.8.1-surfacecontacttype.html b/docs/2.8.1-surfacecontacttype.html deleted file mode 100644 index e71095f5..00000000 --- a/docs/2.8.1-surfacecontacttype.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 2.8.1. Surface Contact Type — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.8.1. Surface Contact Type

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.9-imperfection.html b/docs/2.9-imperfection.html deleted file mode 100644 index 1d3ea11e..00000000 --- a/docs/2.9-imperfection.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 2.9. Imperfections — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.9. Imperfections

-
    -
  1. Imperfection Case
  2. -
  3. Local Imperfection
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.9.1-imperfectioncase.html b/docs/2.9.1-imperfectioncase.html deleted file mode 100644 index 7cf91bb2..00000000 --- a/docs/2.9.1-imperfectioncase.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - 2.9.1. Imperfection Case — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.9.1. Imperfection Case

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/2.9.2-localimperfection.html b/docs/2.9.2-localimperfection.html deleted file mode 100644 index c84b88e3..00000000 --- a/docs/2.9.2-localimperfection.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - 2.9.2. Local Imperfection — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

2.9.2. Local Imperfection

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3-addoncommands.html b/docs/3-addoncommands.html deleted file mode 100644 index 3bb9d977..00000000 --- a/docs/3-addoncommands.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - - - 3. Add-on Commands — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.1-nonlinearmaterialbehaviour.html b/docs/3.1-nonlinearmaterialbehaviour.html deleted file mode 100644 index 20f7c1a5..00000000 --- a/docs/3.1-nonlinearmaterialbehaviour.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.1. Nonlinear Material Behavior — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.1. Nonlinear Material Behavior

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.10-buildingmodel.html b/docs/3.10-buildingmodel.html deleted file mode 100644 index 9e6b19dc..00000000 --- a/docs/3.10-buildingmodel.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - 3.10. Building Model — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.10. Building Model

-
    -
  1. Building Stories
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.10.1-buildingstories.html b/docs/3.10.1-buildingstories.html deleted file mode 100644 index 4952a46f..00000000 --- a/docs/3.10.1-buildingstories.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 3.10.1. Building Stories — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.10.1. Building Stories

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.11-windsimulation.html b/docs/3.11-windsimulation.html deleted file mode 100644 index 2d2cce2e..00000000 --- a/docs/3.11-windsimulation.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 3.11. Wind Simulation — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.11.1-windsimulationsanalysissettings.html b/docs/3.11.1-windsimulationsanalysissettings.html deleted file mode 100644 index d5624ae2..00000000 --- a/docs/3.11.1-windsimulationsanalysissettings.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - 3.11.1. Wind Simulation Analysis Settings — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.11.1. Wind Simulation Analysis Settings

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.11.2-windprofiles.html b/docs/3.11.2-windprofiles.html deleted file mode 100644 index 840caeca..00000000 --- a/docs/3.11.2-windprofiles.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - 3.11.2. Wind Profiles — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.11.2. Wind Profiles

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.11.3-windsimulations.html b/docs/3.11.3-windsimulations.html deleted file mode 100644 index dbb04ffc..00000000 --- a/docs/3.11.3-windsimulations.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - 3.11.3. Wind Simulations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.11.3. Wind Simulations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.12-geotechnicalanalysis.html b/docs/3.12-geotechnicalanalysis.html deleted file mode 100644 index 82e69238..00000000 --- a/docs/3.12-geotechnicalanalysis.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.12. Geotechnical Analysis — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.12. Geotechnical Analysis

-
    -
  1. Soil Samples
  2. -
  3. Soil Massifs
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.12.1-soilsamples.html b/docs/3.12.1-soilsamples.html deleted file mode 100644 index e1723e41..00000000 --- a/docs/3.12.1-soilsamples.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 3.12.1. Soil Samples — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.12.1. Soil Samples

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.12.2-soilmassifs.html b/docs/3.12.2-soilmassifs.html deleted file mode 100644 index c2a6a91c..00000000 --- a/docs/3.12.2-soilmassifs.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 3.12.2. Soil Massifs — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.12.2. Soil Massifs

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.13-stressstrainanalysis.html b/docs/3.13-stressstrainanalysis.html deleted file mode 100644 index 44117a8c..00000000 --- a/docs/3.13-stressstrainanalysis.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - 3.13. Stress Strain Analysis — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.13. Stress Strain Analysis

-
    -
  1. Member Configurations
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.13.1-memberconfigurations.html b/docs/3.13.1-memberconfigurations.html deleted file mode 100644 index e785d904..00000000 --- a/docs/3.13.1-memberconfigurations.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 3.13.1. Member Configurations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.13.1. Member Configurations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14-concretedesign.html b/docs/3.14-concretedesign.html deleted file mode 100644 index d406580d..00000000 --- a/docs/3.14-concretedesign.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.14. Concrete Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14. Concrete Design

-
    -
  1. Concrete Design
  2. -
  3. Types for Concrete Design
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.1-concretedesign.html b/docs/3.14.1-concretedesign.html deleted file mode 100644 index e0a65876..00000000 --- a/docs/3.14.1-concretedesign.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - 3.14.1. Concrete Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.1.1-ultimateconfigurations.html b/docs/3.14.1.1-ultimateconfigurations.html deleted file mode 100644 index 1ade0915..00000000 --- a/docs/3.14.1.1-ultimateconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.1.1. Ultimate Configurations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.1.1. Ultimate Configurations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.1.2-serviceabilityconfigurations.html b/docs/3.14.1.2-serviceabilityconfigurations.html deleted file mode 100644 index 32623bea..00000000 --- a/docs/3.14.1.2-serviceabilityconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.1.2. Serviceability Configurations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.1.2. Serviceability Configurations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.1.3-fireresistanceconfigurations.html b/docs/3.14.1.3-fireresistanceconfigurations.html deleted file mode 100644 index a407a756..00000000 --- a/docs/3.14.1.3-fireresistanceconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.1.3. Fire Resistance Configurations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.1.3. Fire Resistance Configurations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.1.4-seismicconfigurations.html b/docs/3.14.1.4-seismicconfigurations.html deleted file mode 100644 index fbb05365..00000000 --- a/docs/3.14.1.4-seismicconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.1.4. Seismic Configurations — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.1.4. Seismic Configurations

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.2-typesforconcretedesign.html b/docs/3.14.2-typesforconcretedesign.html deleted file mode 100644 index 8e40cee7..00000000 --- a/docs/3.14.2-typesforconcretedesign.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - 3.14.2. Types for Concrete Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.2.1-effectivelengths.html b/docs/3.14.2.1-effectivelengths.html deleted file mode 100644 index d587f5ff..00000000 --- a/docs/3.14.2.1-effectivelengths.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.2.1. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.2.1. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.2.2-concretedurabilities.html b/docs/3.14.2.2-concretedurabilities.html deleted file mode 100644 index ea14c472..00000000 --- a/docs/3.14.2.2-concretedurabilities.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.2.2. Concrete Durabilities — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.2.2. Concrete Durabilities

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.2.3-reinforcementdirections.html b/docs/3.14.2.3-reinforcementdirections.html deleted file mode 100644 index dc650733..00000000 --- a/docs/3.14.2.3-reinforcementdirections.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.2.3. Reinforcement Directions — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.2.3. Reinforcement Directions

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.14.2.4-surfacereinforcements.html b/docs/3.14.2.4-surfacereinforcements.html deleted file mode 100644 index d1f30932..00000000 --- a/docs/3.14.2.4-surfacereinforcements.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.14.2.4. Surface Reinforcements — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.14.2.4. Surface Reinforcements

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15-steeldesign.html b/docs/3.15-steeldesign.html deleted file mode 100644 index d9d89523..00000000 --- a/docs/3.15-steeldesign.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.15. Steel Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15. Steel Design

-
    -
  1. Steel Design
  2. -
  3. Types for Steel Design
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.1-steeldesign.html b/docs/3.15.1-steeldesign.html deleted file mode 100644 index a4f5e21b..00000000 --- a/docs/3.15.1-steeldesign.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - 3.15.1. Steel Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.1. Steel Design

-
    -
  1. Ultimate Configuration
  2. -
  3. Serviceability Configuration
  4. -
  5. 3.15.1.3-fireresistancedesigns
  6. -
  7. Seismic Configuration
  8. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.1.1-ultimateconfigurations.html b/docs/3.15.1.1-ultimateconfigurations.html deleted file mode 100644 index 90e1ffce..00000000 --- a/docs/3.15.1.1-ultimateconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.15.1.1. Ultimate Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.1.1. Ultimate Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.1.2-serviceabilityconfigurations.html b/docs/3.15.1.2-serviceabilityconfigurations.html deleted file mode 100644 index 223a2ef5..00000000 --- a/docs/3.15.1.2-serviceabilityconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.15.1.2. Serviceability Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.1.2. Serviceability Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.1.3-fireresistanceconfigurations.html b/docs/3.15.1.3-fireresistanceconfigurations.html deleted file mode 100644 index b9a2ee60..00000000 --- a/docs/3.15.1.3-fireresistanceconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.15.1.3. Fire Resistance Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.1.3. Fire Resistance Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.1.4-seismicconfigurations.html b/docs/3.15.1.4-seismicconfigurations.html deleted file mode 100644 index 0c354d1e..00000000 --- a/docs/3.15.1.4-seismicconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.15.1.4. Seismic Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.1.4. Seismic Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2-typesforsteeldesign.html b/docs/3.15.2-typesforsteeldesign.html deleted file mode 100644 index 5833075a..00000000 --- a/docs/3.15.2-typesforsteeldesign.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - - - 3.15.2. Types for Steel Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
- - -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2.1-effectivelengths.html b/docs/3.15.2.1-effectivelengths.html deleted file mode 100644 index 831f4257..00000000 --- a/docs/3.15.2.1-effectivelengths.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 3.15.2.1. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.2.1. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2.2-boundaryconditions.html b/docs/3.15.2.2-boundaryconditions.html deleted file mode 100644 index 4edc17f4..00000000 --- a/docs/3.15.2.2-boundaryconditions.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 3.15.2.2. Boundary Conditions — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.2.2. Boundary Conditions

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2.3-memberlocalsectionreductions.html b/docs/3.15.2.3-memberlocalsectionreductions.html deleted file mode 100644 index e1a8b16a..00000000 --- a/docs/3.15.2.3-memberlocalsectionreductions.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 3.15.2.3. Member Local Section Reductions — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.2.3. Member Local Section Reductions

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2.4-membershearpanels.html b/docs/3.15.2.4-membershearpanels.html deleted file mode 100644 index 59c8f5ad..00000000 --- a/docs/3.15.2.4-membershearpanels.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 3.15.2.4. Member Shear Panels — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.2.4. Member Shear Panels

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.15.2.5-memberrotationalrestraints.html b/docs/3.15.2.5-memberrotationalrestraints.html deleted file mode 100644 index 1e76768c..00000000 --- a/docs/3.15.2.5-memberrotationalrestraints.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - 3.15.2.5. Member Rotational Restraints — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.15.2.5. Member Rotational Restraints

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16-timberdesign.html b/docs/3.16-timberdesign.html deleted file mode 100644 index b00a6e86..00000000 --- a/docs/3.16-timberdesign.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.16. Timber Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16. Timber Design

-
    -
  1. Timber Design
  2. -
  3. Types for Timber Design
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.1-timberdesign.html b/docs/3.16.1-timberdesign.html deleted file mode 100644 index 4407c28e..00000000 --- a/docs/3.16.1-timberdesign.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - 3.16.1. Timber Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.1. Timber Design

-
    -
  1. Ultimate Configuration
  2. -
  3. Serviceability Configuration
  4. -
  5. 3.16.1.3-fireresistancedesigns
  6. -
  7. Seismic Configuration
  8. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.1.1-ultimateconfigurations.html b/docs/3.16.1.1-ultimateconfigurations.html deleted file mode 100644 index 98df83a6..00000000 --- a/docs/3.16.1.1-ultimateconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.1.1. Ultimate Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.1.1. Ultimate Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.1.2-serviceabilityconfigurations.html b/docs/3.16.1.2-serviceabilityconfigurations.html deleted file mode 100644 index 06822221..00000000 --- a/docs/3.16.1.2-serviceabilityconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.1.2. Serviceability Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.1.2. Serviceability Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.1.3-fireresistanceconfigurations.html b/docs/3.16.1.3-fireresistanceconfigurations.html deleted file mode 100644 index edb65ba3..00000000 --- a/docs/3.16.1.3-fireresistanceconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.1.3. Fire Resistance Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.1.3. Fire Resistance Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.1.4-seismicconfigurations.html b/docs/3.16.1.4-seismicconfigurations.html deleted file mode 100644 index 02203bb2..00000000 --- a/docs/3.16.1.4-seismicconfigurations.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.1.4. Seismic Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.1.4. Seismic Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.2-typesfortimberdesign.html b/docs/3.16.2-typesfortimberdesign.html deleted file mode 100644 index 83e06da1..00000000 --- a/docs/3.16.2-typesfortimberdesign.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - 3.16.2. Types for Timber Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.2.1-effectivelengths.html b/docs/3.16.2.1-effectivelengths.html deleted file mode 100644 index 7f6abaf7..00000000 --- a/docs/3.16.2.1-effectivelengths.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.2.1. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.2.1. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.2.2-serviceclasses.html b/docs/3.16.2.2-serviceclasses.html deleted file mode 100644 index 96ad415b..00000000 --- a/docs/3.16.2.2-serviceclasses.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.2.2. Service Classes — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.2.2. Service Classes

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.2.3-memberlocalsectionreductions.html b/docs/3.16.2.3-memberlocalsectionreductions.html deleted file mode 100644 index 0a455502..00000000 --- a/docs/3.16.2.3-memberlocalsectionreductions.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.2.3. Member Local Section Reductions — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.2.3. Member Local Section Reductions

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.16.2.4-memberrotaionalrestraints.html b/docs/3.16.2.4-memberrotaionalrestraints.html deleted file mode 100644 index 4ae9669c..00000000 --- a/docs/3.16.2.4-memberrotaionalrestraints.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.16.2.4. Member Rotational Restraints — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.16.2.4. Member Rotational Restraints

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.17-masonrydesign.html b/docs/3.17-masonrydesign.html deleted file mode 100644 index a4134705..00000000 --- a/docs/3.17-masonrydesign.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.17. Masonry Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.17. Masonry Design

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18-aluminumdesign.html b/docs/3.18-aluminumdesign.html deleted file mode 100644 index d76bbb14..00000000 --- a/docs/3.18-aluminumdesign.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.18. Aluminum Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18. Aluminum Design

-
    -
  1. Aluminum Design
  2. -
  3. Types for Timber Design
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.1-aluminumdesign.html b/docs/3.18.1-aluminumdesign.html deleted file mode 100644 index 801804b0..00000000 --- a/docs/3.18.1-aluminumdesign.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - - - - - 3.18.1. Aluminum Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.1. Aluminum Design

-
    -
  1. Ultimate Configuration
  2. -
  3. Serviceability Configuration
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.1.1-ultimateconfigurations.html b/docs/3.18.1.1-ultimateconfigurations.html deleted file mode 100644 index 81e3a31d..00000000 --- a/docs/3.18.1.1-ultimateconfigurations.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 3.18.1.1. Ultimate Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.1.1. Ultimate Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.1.2-serviceabilityconfigurations.html b/docs/3.18.1.2-serviceabilityconfigurations.html deleted file mode 100644 index 540c65a3..00000000 --- a/docs/3.18.1.2-serviceabilityconfigurations.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - 3.18.1.2. Serviceability Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.1.2. Serviceability Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.2-typesforaluminumdesign.html b/docs/3.18.2-typesforaluminumdesign.html deleted file mode 100644 index 79fccaa8..00000000 --- a/docs/3.18.2-typesforaluminumdesign.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - - - - 3.18.2. Types for Timber Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.2. Types for Timber Design

-
    -
  1. Effective Lengths
  2. -
  3. 3.18.2.3-memberlocalsectionreductions
  4. -
  5. Effective Lengths
  6. -
  7. 3.18.2.4-memberrotaionalrestraints
  8. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.2.1-effectivelengths.html b/docs/3.18.2.1-effectivelengths.html deleted file mode 100644 index 59175861..00000000 --- a/docs/3.18.2.1-effectivelengths.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - 3.18.2.1. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.2.1. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.2.2-memberlocalsectionreductions.html b/docs/3.18.2.2-memberlocalsectionreductions.html deleted file mode 100644 index 03ee031c..00000000 --- a/docs/3.18.2.2-memberlocalsectionreductions.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - 3.18.2.2. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.2.2. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.2.3-membershearpanels.html b/docs/3.18.2.3-membershearpanels.html deleted file mode 100644 index 1691dcaa..00000000 --- a/docs/3.18.2.3-membershearpanels.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - 3.18.2.3. Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.18.2.3. Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.18.2.4-memberrotationalrestraints.html b/docs/3.18.2.4-memberrotationalrestraints.html deleted file mode 100644 index c25d9b24..00000000 --- a/docs/3.18.2.4-memberrotationalrestraints.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - - Effective Lengths — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Effective Lengths

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.19-steeljoints.html b/docs/3.19-steeljoints.html deleted file mode 100644 index fb1a0a46..00000000 --- a/docs/3.19-steeljoints.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.19. Steel Joints — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.19. Steel Joints

-
    -
  1. Steel Joint Design
  2. -
  3. Steel Joint Design
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.19.1-steeljointdesign.html b/docs/3.19.1-steeljointdesign.html deleted file mode 100644 index 911e1fe6..00000000 --- a/docs/3.19.1-steeljointdesign.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.19.1. Steel Joint Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.19.1. Steel Joint Design

-
    -
  1. Ultimate Configuration
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.19.1.1-ultimateconfiguration.html b/docs/3.19.1.1-ultimateconfiguration.html deleted file mode 100644 index 652d6850..00000000 --- a/docs/3.19.1.1-ultimateconfiguration.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - 3.19.1.1. Ultimate Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.19.1.1. Ultimate Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.19.2-typesforsteeljoints.html b/docs/3.19.2-typesforsteeljoints.html deleted file mode 100644 index 2e2c39b9..00000000 --- a/docs/3.19.2-typesforsteeljoints.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - 3.19.2. Steel Joint Design — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.19.2. Steel Joint Design

-
    -
  1. Ultimate Configuration
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.19.2.1-steeljoint.html b/docs/3.19.2.1-steeljoint.html deleted file mode 100644 index 056cb233..00000000 --- a/docs/3.19.2.1-steeljoint.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - 3.19.2.1. Ultimate Configuration — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.19.2.1. Ultimate Configuration

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.2-structurestability.html b/docs/3.2-structurestability.html deleted file mode 100644 index f9756358..00000000 --- a/docs/3.2-structurestability.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - 3.2. Structure Stability — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.2. Structure Stability

-
    -
  1. Stability Analysis Settings
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.2.1-stabilityanalysissettings.html b/docs/3.2.1-stabilityanalysissettings.html deleted file mode 100644 index b17af26a..00000000 --- a/docs/3.2.1-stabilityanalysissettings.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 3.2.1. Stability Analysis Settings — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.2.1. Stability Analysis Settings

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.20-co2estimation.html b/docs/3.20-co2estimation.html deleted file mode 100644 index 4650c4d0..00000000 --- a/docs/3.20-co2estimation.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.20. Co2 Estimation — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.20. Co2 Estimation

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.3-constructionstages.html b/docs/3.3-constructionstages.html deleted file mode 100644 index 0aa8b130..00000000 --- a/docs/3.3-constructionstages.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - 3.3. Construction Stages — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.3. Construction Stages

-
    -
  1. Construction Stages
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.3.1-constructionstages.html b/docs/3.3.1-constructionstages.html deleted file mode 100644 index e9c79cd6..00000000 --- a/docs/3.3.1-constructionstages.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 3.3.1. Construction Stages — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.3.1. Construction Stages

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.4-timedependentanalysis.html b/docs/3.4-timedependentanalysis.html deleted file mode 100644 index a728738a..00000000 --- a/docs/3.4-timedependentanalysis.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.4. Time Dependent Analysis — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.4. Time Dependent Analysis

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.5-formfinding.html b/docs/3.5-formfinding.html deleted file mode 100644 index b80e4b74..00000000 --- a/docs/3.5-formfinding.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.5. Form Finding — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.5. Form Finding

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.6-cuttingpatterns.html b/docs/3.6-cuttingpatterns.html deleted file mode 100644 index bd8e4db1..00000000 --- a/docs/3.6-cuttingpatterns.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.6. Cutting Patterns — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.6. Cutting Patterns

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.7-torsionalwarping.html b/docs/3.7-torsionalwarping.html deleted file mode 100644 index e6166ddd..00000000 --- a/docs/3.7-torsionalwarping.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - 3.7. Torsional Warping — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.7. Torsional Warping

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.8-modalanalysis.html b/docs/3.8-modalanalysis.html deleted file mode 100644 index e8dd0a05..00000000 --- a/docs/3.8-modalanalysis.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - 3.8. Modal Analysis — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.8.1-modalanalysissettings.html b/docs/3.8.1-modalanalysissettings.html deleted file mode 100644 index c9fbe993..00000000 --- a/docs/3.8.1-modalanalysissettings.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - 3.8.1. Modal Analysis Settings — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.9-dynamicloads.html b/docs/3.9-dynamicloads.html deleted file mode 100644 index d87d0007..00000000 --- a/docs/3.9-dynamicloads.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - 3.9. Dynamic Loads — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.9. Dynamic Loads

-
    -
  1. Response Spectra
  2. -
  3. Accelograms
  4. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.9.1-responsespectra.html b/docs/3.9.1-responsespectra.html deleted file mode 100644 index 0e230fe9..00000000 --- a/docs/3.9.1-responsespectra.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 3.9.1. Response Spectra — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.9.1. Response Spectra

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/3.9.2-accelograms.html b/docs/3.9.2-accelograms.html deleted file mode 100644 index f092c025..00000000 --- a/docs/3.9.2-accelograms.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - 3.9.2. Accelograms — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

3.9.2. Accelograms

-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/4-examples.html b/docs/4-examples.html deleted file mode 100644 index 4c34fbdd..00000000 --- a/docs/4-examples.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - 4. Example — RFEM 6.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

4. Example

-
    -
  1. demo1.py
  2. -
-
-
-
- - -
- -
- -
-
- -
- -
- - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/RFEM/BasicObjects/__init__.py b/docs/RFEM/BasicObjects/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/BasicObjects/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/BasicObjects/line.py b/docs/RFEM/BasicObjects/line.py new file mode 100644 index 00000000..7d05edc6 --- /dev/null +++ b/docs/RFEM/BasicObjects/line.py @@ -0,0 +1,438 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import LineType, LineArcAlphaAdjustmentTarget + +class Line(): + def __init__(self, + no: int = 1, + nodes_no: str = '1 2', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (str): Nodes Defining Line + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Polyline(self, + no: int = 1, + nodes_no: str = '1 2', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (str): Nodes Defining Polyline + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Type + clientObject.type = LineType.TYPE_POLYLINE.name + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Arc(self, + no: int = 1, + nodes_no: str = [1,2], + control_point: list = [10,0,0], # X,Y,Z + alpha_adjustment_target = LineArcAlphaAdjustmentTarget.ALPHA_ADJUSTMENT_TARGET_BEGINNING_OF_ARC, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (list): Node Tags Defining Arc + control_point (list): Control Point for Arc in [X, Y, Z] + alpha_adjustment_target (enum): Line Arc Alpha Adjustment Target Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Type + clientObject.type = LineType.TYPE_ARC.name + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + clientObject.arc_first_node = nodes_no[0] + clientObject.arc_second_node = nodes_no[1] + clientObject.arc_alpha_adjustment_target = alpha_adjustment_target.name + clientObject.arc_control_point_x = control_point[0] + clientObject.arc_control_point_y = control_point[1] + clientObject.arc_control_point_z = control_point[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Circle(self, + no: int = 1, + center_of_cirle: list = [20,0,0], + circle_radius: float = 1.0, + point_of_normal_to_circle_plane: list = [1,0,0], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (str): Nodes on Line of Circle + center_of_circle (list): Cartesian Co-Ordinates of Circle Centre [X, Y, Z] + circle_radius (float): Magnitude of Circle Radius + point_of_normal_to_circle_plane (list): Vector from Circle Centre to this Point [X, Y, Z] defines Vector Normal to Circle Plane + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Type + clientObject.type = LineType.TYPE_CIRCLE.name + + # Center of circle + clientObject.circle_center_coordinate_1 = center_of_cirle[0] + clientObject.circle_center_coordinate_2 = center_of_cirle[1] + clientObject.circle_center_coordinate_3 = center_of_cirle[2] + + clientObject.circle_radius = circle_radius + + # Point of normal to circle plane + clientObject.circle_normal_coordinate_1 = point_of_normal_to_circle_plane[0] + clientObject.circle_normal_coordinate_2 = point_of_normal_to_circle_plane[1] + clientObject.circle_normal_coordinate_3 = point_of_normal_to_circle_plane[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def EllipticalArc(self, + no: int = 1, + p1_control_point: list = [0,-6,0], + p2_control_point: list = [20,-6,0], + p3_control_point: list = [10,10,3], + arc_angle_alpha: float = 0, + arc_angle_beta: float = 3.141592653589793, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + p1_control_point (list): Control Point 1 [X, Y, Z] + p2_control_point (list): Control Point 2 [X, Y, Z] + p3_control_point (list): Control Point 3 [X, Y, Z] + arc_angle_alpha (float): Alpha Arc Angle (in Radians) + arc_angle_beta (float): Beta Arc Angle (in Radians) + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Type + clientObject.type = LineType.TYPE_ELLIPTICAL_ARC.name + + # Control points + clientObject.elliptical_arc_first_control_point_x = p1_control_point[0] + clientObject.elliptical_arc_first_control_point_y = p1_control_point[1] + clientObject.elliptical_arc_first_control_point_z = p1_control_point[2] + + clientObject.elliptical_arc_second_control_point_x = p2_control_point[0] + clientObject.elliptical_arc_second_control_point_y = p2_control_point[1] + clientObject.elliptical_arc_second_control_point_z = p2_control_point[2] + + clientObject.elliptical_arc_perimeter_control_point_x = p3_control_point[0] + clientObject.elliptical_arc_perimeter_control_point_y = p3_control_point[1] + clientObject.elliptical_arc_perimeter_control_point_z = p3_control_point[2] + + clientObject.elliptical_arc_alpha = arc_angle_alpha + clientObject.elliptical_arc_beta = arc_angle_beta + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Ellipse(self, + no: int = 1, + nodes_no: list = [5,10], + ellipse_control_point: list = [18,-4.8,0], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (list): Node Tags on Line of Ellipse + ellipse_control_point (list): Ellipse Control Point [X, Y, Z] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + clientObject.ellipse_first_node = nodes_no[0] + clientObject.ellipse_second_node = nodes_no[1] + + # Type + clientObject.type = LineType.TYPE_ELLIPSE.name + + # Control point + clientObject.ellipse_control_point_x = ellipse_control_point[0] + clientObject.ellipse_control_point_y = ellipse_control_point[1] + clientObject.ellipse_control_point_z = ellipse_control_point[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Parabola(self, + no: int = 1, + nodes_no: str = [3,8], + parabola_control_point: list = [10,-3,0], + parabola_alpha: float = 0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (list): Node Tags on Line of Parabola + parabola_control_point (list): Parabola Control Point [X, Y, Z] + parabola_alpha (float): Alpha Angle (in Radians) + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + clientObject.parabola_first_node = nodes_no[0] + clientObject.parabola_second_node = nodes_no[1] + + clientObject.parabola_alpha = parabola_alpha + + # Type + clientObject.type = LineType.TYPE_PARABOLA.name + + # Control point + clientObject.parabola_control_point_x = parabola_control_point[0] + clientObject.parabola_control_point_y = parabola_control_point[1] + clientObject.parabola_control_point_z = parabola_control_point[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def Spline(self, + no: int = 1, + nodes_no: str = '1 3 5', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (str): Node Tags on Line of Spline + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + + # Type + clientObject.type = LineType.TYPE_SPLINE.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) + + def NURBS(self, + no: int = 1, + nodes_no: str = '1 2', + control_points: list = [[0,0,0],[2.33,0,-3,4],[10,0,-11],[17.66,0,-3.4],[20,0,0]], + weights = [1,1,1,1,1], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Tag + nodes_no (str): Node Tags on Line of NURBS Curve + control_points (list): Nested List of Respective Control Point's Cartesian Co-Ordinates + weights (list): Weights of Control Points + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line + clientObject = Model.clientModel.factory.create('ns0:line') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line No. + clientObject.no = no + + # Nodes No. + clientObject.definition_nodes = ConvertToDlString(nodes_no) + + # Type + clientObject.type = LineType.TYPE_NURBS.name + + if len(control_points) != len(weights): + print("WARNING: The number of weigths prescribed must equal the number of control points defined.") + + ''' + TODO: bug 24721 + nurbs_control_points = [] + for i,j in enumerate(control_points): + point = Model.clientModel.factory.create('ns0:line_nurbs_control_points_by_components') + point.no = i+1 + point.global_coordinate_x = control_points[i][0] + point.global_coordinate_y = control_points[i][1] + point.global_coordinate_z = control_points[i][2] + point.weight = weights[i] + nurbs_control_points.append(point) + #clientObject.nurbs_control_points_by_components = Model.clientModel.factory.create('ns0:line_nurbs_control_points_by_components') + ''' + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_line(clientObject) diff --git a/docs/RFEM/BasicObjects/lineSet.py b/docs/RFEM/BasicObjects/lineSet.py new file mode 100644 index 00000000..01e57fa7 --- /dev/null +++ b/docs/RFEM/BasicObjects/lineSet.py @@ -0,0 +1,122 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SetType + +class LineSet(): + def __init__(self, + no: int = 1, + lines_no: str = '33 36 39 42 45', + line_set_type = SetType.SET_TYPE_CONTINUOUS, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Set Tag + lines_no (str): Tags of Lines Contained Within Line Set + line_set_type (enum): Line Set Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Set + clientObject = Model.clientModel.factory.create('ns0:line_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Set No. + clientObject.no = no + + # Lines number + clientObject.lines = ConvertToDlString(lines_no) + + # Line Set Type + clientObject.set_type = line_set_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Set to client model + Model.clientModel.service.set_line_set(clientObject) + + def ContinuousLines(self, + no: int = 1, + lines_no: str = '33 36 39 42 45', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Set Tag + lines_no (str): Tags of Lines Contained Within Continuous Line Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Set + clientObject = Model.clientModel.factory.create('ns0:line_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Set No. + clientObject.no = no + + # Lines number + clientObject.lines = ConvertToDlString(lines_no) + + # Line Set Type + clientObject.set_type = SetType.SET_TYPE_CONTINUOUS.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Set to client model + Model.clientModel.service.set_line_set(clientObject) + + def GroupOfLines(self, + no: int = 1, + lines_no: str = '33 36 39 42 45', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Line Set Tag + lines_no (str): Tags of Lines Contained Within Group of Lines Line Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Set + clientObject = Model.clientModel.factory.create('ns0:line_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Set No. + clientObject.no = no + + # Lines number + clientObject.lines = ConvertToDlString(lines_no) + + # Line Set Type + clientObject.set_type = SetType.SET_TYPE_GROUP.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Set to client model + Model.clientModel.service.set_line_set(clientObject) diff --git a/docs/RFEM/BasicObjects/material.py b/docs/RFEM/BasicObjects/material.py new file mode 100644 index 00000000..25ba52fc --- /dev/null +++ b/docs/RFEM/BasicObjects/material.py @@ -0,0 +1,38 @@ +from RFEM.initModel import clearAtributes, Model + +class Material(): + def __init__(self, + no: int = 1, + name: str = 'S235', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Material Tag + name (str): Name of Desired Material (As Named in RFEM Database) + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Material + clientObject = Model.clientModel.factory.create('ns0:material') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Material No. + clientObject.no = no + + # Material Name + clientObject.name = name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add material to client model + Model.clientModel.service.set_material(clientObject) diff --git a/docs/RFEM/BasicObjects/member.py b/docs/RFEM/BasicObjects/member.py new file mode 100644 index 00000000..472790fb --- /dev/null +++ b/docs/RFEM/BasicObjects/member.py @@ -0,0 +1,1888 @@ +from RFEM.enums import MemberType, MemberRotationSpecificationType, MemberSectionDistributionType, MemberTypeRibAlignment, MemberReferenceLengthWidthType, MemberResultBeamIntegration +from RFEM.initModel import Model, clearAtributes + +class Member(): + def __init__(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_angle: float = 0.0, + start_section_no: int = 1, + end_section_no: int = 1, + start_member_hinge_no: int = 0, + end_member_hinge_no: int = 0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int,): Tag of End Node + rotation_angle (float): Member Rotation Angle + start_section_no (int): Tag of Start Section + end_section_no (int): Tag of End Section + start_member_hinge_no (int): Tag of Start Member Hinge + end_member_hinge_no (int): Tag of End Member Hinge + comment (str, optional): Comment + params (dict, optional): Parameters + """ + + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_BEAM.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation Angle beta + clientObject.rotation_angle = rotation_angle + + # Start Section No. + clientObject.section_start = start_section_no + + # End Section No. + clientObject.section_end = end_section_no + + # Start Member Hinge No. + clientObject.member_hinge_start = start_member_hinge_no + + # End Member Hinge No. + clientObject.member_hinge_end = end_member_hinge_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Beam(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + section_distribution_type = MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_UNIFORM, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + start_section_no: int = 1, + end_section_no: int = 1, + distribution_parameters = [], + comment: str = '', + params: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'support':0, 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + section_distribution_type (enum): Section Distribution Type Enumeration + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR: + distribution_parameters = [section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_end_is_defined_as_relative, + section_distance_from_start_relative/absolute, section_distance_from_end_relative/absolute, + section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_SADDLE: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_end_is_defined_as_relative, + section_distance_from_start_relative/absolute, section_distance_from_end_relative/absolute, + section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters; 1 or 2 params + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + start_section_no (int): Tag of Start Section + end_section_no (int): End of End Section + distribution_parameters (list): Distribution Parameters + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_BEAM.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Section Distribution + clientObject.section_distribution_type = section_distribution_type.name + + if section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR: + clientObject.section_alignment = distribution_parameters[0].name + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES: + try: + isinstance(distribution_parameters[0], bool) + isinstance(distribution_parameters[1], bool) + except: + raise TypeError("WARNING: First two parameters should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[1] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[2] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[2] + if distribution_parameters[1]: + clientObject.section_distance_from_end_relative = distribution_parameters[3] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[3] + clientObject.section_alignment = distribution_parameters[4].name + clientObject.section_internal = distribution_parameters[5] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_SADDLE: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_SADDLE. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + clientObject.section_internal = distribution_parameters[3] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES: + try: + isinstance(distribution_parameters[0], bool) + isinstance(distribution_parameters[1], bool) + except: + raise TypeError("WARNING: First two parameters should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[1] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[2] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[2] + if distribution_parameters[1]: + clientObject.section_distance_from_end_relative = distribution_parameters[3] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[3] + clientObject.section_alignment = distribution_parameters[4].name + clientObject.section_internal = distribution_parameters[5] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + + # Start Section No. + clientObject.section_start = start_section_no + + # End Section No. + clientObject.section_end = end_section_no + + # Update parameters + params_up: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'support':0, 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Hinges + clientObject.member_hinge_start = params_up['member_hinge_start'] + clientObject.member_hinge_end = params_up['member_hinge_end'] + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Support + clientObject.support = params_up['support'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Result Intermediate Points + clientObject.member_result_intermediate_point = params_up['member_result_intermediate_point'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Rigid(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + comment: str = '', + params: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'support':0, 'member_nonlinearity': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_RIGID.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'support':0, 'member_nonlinearity': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Hinges + clientObject.member_hinge_start = params_up['member_hinge_start'] + clientObject.member_hinge_end = params_up['member_hinge_end'] + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Support + clientObject.support = params_up['support'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # Result Intermediate Points + clientObject.member_result_intermediate_point = params_up['member_result_intermediate_point'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + +## Rib Member should be corrected. + def Rib(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + section_distribution_type = MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_UNIFORM, + start_section_no: int = 1, + end_section_no: int = 1, + rib_surfaces_no = [], + rib_alignment = MemberTypeRibAlignment.ALIGNMENT_ON_Z_SIDE_POSITIVE, + reference_width_type = MemberReferenceLengthWidthType.REFERENCE_LENGTH_WIDTH_SIXTH, + comment: str = '', + params: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'support':0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + section_distribution_type (enum): Section Distribution Type Enuemration + start_section_no (int): Tag of Start Section + end_section_no (int): Tag of End Section + rib_surfaces_no (list): Surfaces Tags Assigned to Rib + rib_alignment (enum): Rib Alignment Enumeration + reference_width_type (enum): Reference Width Type Enumeration + comment (str, optional): Comment + params (dict, optional): Parameters + + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR: + distribution_parameters[section_alignment] BJÖRN: Where is this parameter used? + """ + + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_RIB.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Section Distribution + clientObject.section_distribution_type = section_distribution_type.name + try: + section_distribution_type.name == "MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_UNIFORM" or section_distribution_type.name == "MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR" + except: + raise TypeError("WARNING: Only Uniform and Linear section distributions are available for Rib member. Kindly check inputs and correctness.") + + # Start Section No. + clientObject.section_start = start_section_no + + # End Section No. + clientObject.section_end = end_section_no + + # Rib Surfaces + clientObject.member_rib_first_surface = rib_surfaces_no[0] + clientObject.member_rib_second_surface = rib_surfaces_no[1] + + # Rib Alignment + clientObject.member_type_rib_alignment = rib_alignment.name + + # Reference Length Width Type + clientObject.reference_length_width_type = reference_width_type.name + + # Update parameters + params_up: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'support':0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Hinges + clientObject.member_hinge_start = params_up['member_hinge_start'] + clientObject.member_hinge_end = params_up['member_hinge_end'] + + # Member Support + clientObject.support = params_up['support'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Result Intermediate Points + clientObject.member_result_intermediate_point = params_up['member_result_intermediate_point'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Truss(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_TRUSS.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def TrussOnlyN(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_TRUSS_ONLY_N.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Tension(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_TENSION.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Compression(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_COMPRESSION.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Buckling(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_BUCKLING.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def Cable(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + section_no: int = 1, + comment: str = '', + params: dict = {'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + section_no (int): Section Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_CABLE.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = section_no + + # End Section No. + clientObject.section_end = section_no + + # Update parameters + params_up: dict = {'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'is_deactivated_for_calculation' : False } + + params_up.update(params) + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def ResultBeam(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + section_distribution_type = MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_UNIFORM, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + result_beam_integrate_stresses_and_forces = MemberResultBeamIntegration.INTEGRATE_WITHIN_CUBOID_QUADRATIC, + rotation_parameters = [0], + start_section_no: int = 1, + end_section_no: int = 1, + distribution_parameters = [], + integration_parameters = [], + comment: str = '', + params: dict = { 'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int,): Tag of End Node + section_distribution_type (enum): Section Distribution Type Enumeration + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + start_section_no (int): Tag of Start Section + end_section_no (int): Tag of End Section + distribution_parameters (list): Distribution Parameters + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR: + distribution_parameters = [section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_end_is_defined_as_relative, + section_distance_from_start_relative/absolute, section_distance_from_end_relative/absolute, + section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_SADDLE: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_end_is_defined_as_relative, + section_distance_from_start_relative/absolute, section_distance_from_end_relative/absolute, + section_alignment, section_internal] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + for section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER: + distribution_parameters = [section_distance_from_start_is_defined_as_relative, section_distance_from_start_relative/absolute, section_alignment] + integration_parameters (list): Integration Parameters + for result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CUBOID_QUADRATIC": + integration_parameters = [result_beam_y_z] + for result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CUBOID_GENERAL": + integration_parameters = [result_beam_y_plus, result_beam_z_plus, result_beam_y_minus, result_beam_z_minus] + for result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CYLINDER": + integration_parameters = [result_beam_radius] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_RESULT_BEAM.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Section Distribution + clientObject.section_distribution_type = section_distribution_type.name + + # Result Beam Integration + clientObject.result_beam_integrate_stresses_and_forces = result_beam_integrate_stresses_and_forces.name + if result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CUBOID_QUADRATIC": + clientObject.result_beam_y_z = integration_parameters[0] + elif result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CUBOID_GENERAL": + clientObject.result_beam_y_plus = integration_parameters[0] + clientObject.result_beam_z_plus = integration_parameters[1] + clientObject.result_beam_y_minus = integration_parameters[2] + clientObject.result_beam_z_minus = integration_parameters[3] + elif result_beam_integrate_stresses_and_forces.name == "INTEGRATE_WITHIN_CYLINDER": + clientObject.result_beam_radius = integration_parameters[0] + + if section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_LINEAR: + clientObject.section_alignment = distribution_parameters[0].name + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES: + try: + isinstance(distribution_parameters[0], bool) + isinstance(distribution_parameters[1], bool) + except: + raise TypeError("WARNING: First two parameters should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[1] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[2] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[2] + if distribution_parameters[1]: + clientObject.section_distance_from_end_relative = distribution_parameters[3] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[3] + clientObject.section_alignment = distribution_parameters[4].name + clientObject.section_internal = distribution_parameters[5] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_SADDLE: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_SADDLE. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + clientObject.section_internal = distribution_parameters[3] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES: + try: + isinstance(distribution_parameters[0], bool) + isinstance(distribution_parameters[1], bool) + except: + raise TypeError("WARNING: First two parameters should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[1] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[2] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[2] + if distribution_parameters[1]: + clientObject.section_distance_from_end_relative = distribution_parameters[3] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[3] + clientObject.section_alignment = distribution_parameters[4].name + clientObject.section_internal = distribution_parameters[5] + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_start_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_start_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_start_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + elif section_distribution_type == MemberSectionDistributionType.SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER: + try: + isinstance(distribution_parameters[0], bool) + except: + raise TypeError("WARNING: First parameter should be type bool for SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER. Kindly check list inputs completeness and correctness.") + clientObject.section_distance_from_end_is_defined_as_relative = distribution_parameters[0] + if distribution_parameters[0]: + clientObject.section_distance_from_end_relative = distribution_parameters[1] + else: + clientObject.section_distance_from_end_absolute = distribution_parameters[1] + clientObject.section_alignment = distribution_parameters[2].name + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Start Section No. + clientObject.section_start = start_section_no + + # End Section No. + clientObject.section_end = end_section_no + + # Update parameters + params_up: dict = {'end_modifications_member_start_extension': 0, + 'end_modifications_member_start_slope_y': 0, + 'end_modifications_member_start_slope_z': 0, + 'end_modifications_member_end_extension': 0, + 'end_modifications_member_end_slope_y': 0, + 'end_modifications_member_end_slope_z': 0, + 'member_result_intermediate_point' : 0} + + params_up.update(params) + + # End Modifications + clientObject.end_modifications_member_start_extension = params_up['end_modifications_member_start_extension'] + clientObject.end_modifications_member_start_slope_y = params_up['end_modifications_member_start_slope_y'] + clientObject.end_modifications_member_start_slope_z = params_up['end_modifications_member_start_slope_z'] + clientObject.end_modifications_member_end_extension = params_up['end_modifications_member_end_extension'] + clientObject.end_modifications_member_end_slope_y = params_up['end_modifications_member_end_slope_y'] + clientObject.end_modifications_member_end_slope_z = params_up['end_modifications_member_end_slope_z'] + + # Result Intermediate Points + clientObject.member_result_intermediate_point = params_up['member_result_intermediate_point'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def DefinableStiffness(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + definable_stiffness : int = 1, + comment: str = '', + params: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + definable_stiffness (int): Definable Stiffness Tag + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_DEFINABLE_STIFFNESS.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Section Distribution + clientObject.section_distribution_type = "SECTION_DISTRIBUTION_TYPE_UNIFORM" + + # Member Type Definable Stiffness + clientObject.member_type_definable_stiffness = definable_stiffness + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'member_hinge_start':0, 'member_hinge_end': 0, + 'member_eccentricity_start': 0, 'member_eccentricity_end': 0, + 'member_nonlinearity': 0, + 'member_result_intermediate_point' : 0, + 'is_deactivated_for_calculation' : False} + + params_up.update(params) + + # Member Hinges + clientObject.member_hinge_start = params_up['member_hinge_start'] + clientObject.member_hinge_end = params_up['member_hinge_end'] + + # Member Eccentricity + clientObject.member_eccentricity_start = params_up['member_eccentricity_start'] + clientObject.member_eccentricity_end = params_up['member_eccentricity_end'] + + # Member Nonlinearity + clientObject.member_nonlinearity = params_up['member_nonlinearity'] + + # Result Intermediate Points + clientObject.member_result_intermediate_point = params_up['member_result_intermediate_point'] + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def CouplingRigidRigid(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + comment: str = '', + params: dict = {'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_COUPLING_RIGID_RIGID.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'is_deactivated_for_calculation' : False} + + params_up.update(params) + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def CouplingRigidHinge(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + comment: str = '', + params: dict = {'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_COUPLING_RIGID_HINGE.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'is_deactivated_for_calculation' : False} + + params_up.update(params) + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def CouplingHingeRigid(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + comment: str = '', + params: dict = {'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_COUPLING_HINGE_RIGID.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'is_deactivated_for_calculation' : False} + + params_up.update(params) + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) + + def CouplingHingeHinge(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + rotation_specification_type = MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, + rotation_parameters = [0], + comment: str = '', + params: dict = {'is_deactivated_for_calculation' : False}): + """ + Args: + no (int): Member Tag + start_node_no (int): Tag of Start Node + end_node_no (int): Tag of End Node + rotation_specification_type (enum): Rotation Specification Type Enumeration + rotation_parameters (list): Rotation Parameters + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + rotation_parameters = [rotation_angle] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + rotation_parameters = [rotation_help_node, rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + rotation_parameters = [rotation_plane_type] + for rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + rotation_parameters = [rotation_surface, rotation_surface_plane_type] + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member + clientObject = Model.clientModel.factory.create('ns0:member') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member No. + clientObject.no = no + + # Member Type + clientObject.type = MemberType.TYPE_COUPLING_HINGE_HINGE.name + + # Start Node No. + clientObject.node_start = start_node_no + + # End Node No. + clientObject.node_end = end_node_no + + # Member Rotation + clientObject.rotation_specification_type = rotation_specification_type.name + if rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_ANGLE: + clientObject.rotation_angle = rotation_parameters[0] + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE: + clientObject.rotation_help_node = rotation_parameters[0] + clientObject.rotation_plane_type = rotation_parameters[1].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE: + clientObject.rotation_plane_type = rotation_parameters[0].name + elif rotation_specification_type == MemberRotationSpecificationType.COORDINATE_SYSTEM_ROTATION_VIA_SURFACE: + clientObject.rotation_surface = rotation_parameters[0] + clientObject.rotation_surface_plane_type = rotation_parameters[1].name + + # Update parameters + params_up: dict = {'is_deactivated_for_calculation' : False} + + params_up.update(params) + + # Deactivation for Calculation + clientObject.is_deactivated_for_calculation = params_up['is_deactivated_for_calculation'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member to client model + Model.clientModel.service.set_member(clientObject) diff --git a/docs/RFEM/BasicObjects/memberSet.py b/docs/RFEM/BasicObjects/memberSet.py new file mode 100644 index 00000000..4ec76ae7 --- /dev/null +++ b/docs/RFEM/BasicObjects/memberSet.py @@ -0,0 +1,122 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SetType + +class MemberSet(): + def __init__(self, + no: int = 1, + members_no: str = '1 4 5 8 9 12 13 16 17 20 21 24', + member_set_type = SetType.SET_TYPE_GROUP, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Member Set Tag + members_no (str): Tags of Members Contained Within Member Set + member_set_type (enum): Member Set Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Set + clientObject = Model.clientModel.factory.create('ns0:member_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Set No. + clientObject.no = no + + # Members number + clientObject.members = ConvertToDlString(members_no) + + # Member Set Type + clientObject.set_type = member_set_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Set to client model + Model.clientModel.service.set_member_set(clientObject) + + def ContinuousMembers(self, + no: int = 1, + members_no: str = '1 4 5 8 9 12 13 16 17 20 21 24', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Member Set Tag + members_no (str): Tags of Members Contained Within Continuous Member Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Set + clientObject = Model.clientModel.factory.create('ns0:member_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Set No. + clientObject.no = no + + # Members number + clientObject.members = ConvertToDlString(members_no) + + # Member Set Type + clientObject.set_type = SetType.SET_TYPE_CONTINUOUS.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Set to client model + Model.clientModel.service.set_member_set(clientObject) + + def GroupOfmembers(self, + no: int = 1, + members_no: str = '1 4 5 8 9 12 13 16 17 20 21 24', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Member Set Tag + members_no (str): Tags of Members Contained Within Group of Members Member Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Set + clientObject = Model.clientModel.factory.create('ns0:member_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Set No. + clientObject.no = no + + # Members number + clientObject.members = ConvertToDlString(members_no) + + # Member Set Type + clientObject.set_type = SetType.SET_TYPE_GROUP.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Set to client model + Model.clientModel.service.set_member_set(clientObject) diff --git a/docs/RFEM/BasicObjects/node.py b/docs/RFEM/BasicObjects/node.py new file mode 100644 index 00000000..2cfa28ad --- /dev/null +++ b/docs/RFEM/BasicObjects/node.py @@ -0,0 +1,416 @@ +from RFEM.enums import NodeType +from RFEM.enums import NodeCoordinateSystemType +from RFEM.enums import NodeReferenceType +from RFEM.initModel import Model, clearAtributes +from math import pi + +class Node(): + def __init__(self, + no: int = 1, + coordinate_X: float = 0.0, + coordinate_Y: float = 0.0, + coordinate_Z: float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Node Tag + coordinate_X (float): X-Coordinate + coordinate_Y (float): Y-Coordinate + coordinate_Z (float): Z-Coordinate + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Coordinates + clientObject.coordinate_1 = coordinate_X + clientObject.coordinate_2 = coordinate_Y + clientObject.coordinate_3 = coordinate_Z + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) + + def Standard(self, + no: int = 1, + coordinate_system = [], + coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_CARTESIAN, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Node Tag + coordinate_system (list): Coordinate System + for coordinate_system_type == NodeCoordinateSystemType.COORDINATE_SYSTEM_CARTESIAN; + coordinate_system = [X, Y, Z] + for coordinate_system_type == NodeCoordinateSystemType.COORDINATE_SYSTEM_X_CYLINDRICAL; + coordinate_system = [X, R, θ] + for coordinate_system_type == NodeCoordinateSystemType.COORDINATE_SYSTEM_Y_CYLINDRICAL; + coordinate_system = [R, Ύ, θ] + for coordinate_system_type == NodeCoordinateSystemType.COORDINATE_SYSTEM_Z_CYLINDRICAL; + coordinate_system = [R, θ, Z] + for coordinate_system_type == NodeCoordinateSystemType.COORDINATE_SYSTEM_POLAR: + coordinate_system = [R, θ, φ] + coordinate_system_type (enum): Coordinate System Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Node Type + clientObject.type = NodeType.TYPE_STANDARD.name + + # Coordinates + + clientObject.coordinate_system_type = coordinate_system_type.name + + if len(coordinate_system) != 3: + raise Exception('WARNING: The coordinate system needs to be of length 3. Kindly check list inputs for completeness and correctness.') + + if not isinstance(coordinate_system[0], (int, float)): + raise Exception ('WARNING: Coordinate system at index 0 to be of type "int" or ''float''') + + if not isinstance(coordinate_system[1], (int, float)): + raise Exception ('WARNING: Coordinate system at index 1 to be of type "int" or ''float''') + + if not isinstance(coordinate_system[2], (int, float)): + raise Exception ('WARNING: Coordinate system at index 2 to be of type "int" or ''float''') + + if clientObject.coordinate_system_type == "COORDINATE_SYSTEM_CARTESIAN": + clientObject.coordinate_1 = coordinate_system[0] + clientObject.coordinate_2 = coordinate_system[1] + clientObject.coordinate_3 = coordinate_system[2] + + elif clientObject.coordinate_system_type == "COORDINATE_SYSTEM_X_CYLINDRICAL": + clientObject.coordinate_1 = coordinate_system[0] + clientObject.coordinate_2 = coordinate_system[1] + clientObject.coordinate_3 = coordinate_system[2] * (pi/180) + + elif clientObject.coordinate_system_type == "COORDINATE_SYSTEM_Y_CYLINDRICAL": + clientObject.coordinate_1 = coordinate_system[0] + clientObject.coordinate_2 = coordinate_system[1] + clientObject.coordinate_3 = coordinate_system[2] * (pi/180) + + elif clientObject.coordinate_system_type == "COORDINATE_SYSTEM_Z_CYLINDRICAL": + clientObject.coordinate_1 = coordinate_system[0] + clientObject.coordinate_2 = coordinate_system[1] * (pi/180) + clientObject.coordinate_3 = coordinate_system[2] + + elif clientObject.coordinate_system_type == "COORDINATE_SYSTEM_POLAR": + clientObject.coordinate_1 = coordinate_system[0] + clientObject.coordinate_2 = coordinate_system[1] * (pi/180) + clientObject.coordinate_3 = coordinate_system[2] * (pi/180) + + # Comment + clientObject.comment = comment + + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) + + + def BetweenTwoNodes(self, + no: int = 1, + start_node_no: int = 1, + end_node_no: int = 2, + node_reference = NodeReferenceType.REFERENCE_TYPE_L, + length_between_i_and_j: int = 1, + parameters = [True, 50], + offset_y: int = 0, + offset_z: int = 0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Node Tag + start_node_no (int): Start Node + end_node_no (int): End Node + node_reference (enum): Node Reference Enumeration + length_between_i_and_j (int): Length between 2 Nodes + parameters (list): + if distance_from_start_relative: + parameters = [True, %] + if distance_from_start_absolute: + parameters = [False, magnitude] + offset_y (int): Offset in Y-Direction + offset_z (int): Offset in Z-Direction + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Node Type + clientObject.type = NodeType.TYPE_BETWEEN_TWO_NODES.name + + # Start Node No. + clientObject.between_two_nodes_start_node = start_node_no + + # End Node No. + clientObject.between_two_nodes_end_node = end_node_no + + # Length between i and j + + clientObject.reference_type = node_reference.name + + clientObject.reference_object_projected_length = length_between_i_and_j + + # Distance between node k and start point + + if parameters[0]: #if parameters[0]==True + clientObject.distance_from_start_relative = parameters[1] + else: + clientObject.distance_from_start_absolute = parameters[1] + + # Offset_local_y + clientObject.offset_in_local_direction_y = offset_y + + # Offset_local_z + clientObject.offset_in_local_direction_z = offset_z + + # Comment + clientObject.comment = comment + + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) + + def BetweenTwoPoints(self, + no: int = 1, + start_point_x: float = 0.0, + start_point_y: float = 0.0, + start_point_z: float = 0.0, + end_point_x: float = 1.0, + end_point_y:float = 1.0, + end_point_z: float = 1.0, + node_reference = NodeReferenceType.REFERENCE_TYPE_L, + parameters = [True, 0.5], + offset_y: float = 0.0, + offset_z: float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Node Tag + start_point_x (float): Start Point in X-Coordinate + start_point_y (float): Start Point in Y-Coordinate + start_point_z (float): Start Point in Z-Coordinate + end_point_x (float): End Point in X-Coordinate + end_point_y (float): End Point in Y-Coordinate + end_point_z (float): End Point in Z-Coordinate + node_reference (enum): Node Reference Enumeration + parameters (list): + if distance_from_start_relative: + parameters = [True, %] + if distance_from_start_absolute: + parameters = [False, magnitude] + offset_y (int): Offset in Y-Direction + offset_z (int): Offset in Z-Direction + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Node Type + clientObject.type = NodeType.TYPE_BETWEEN_TWO_POINTS.name + + # Coordinates start point + clientObject.between_two_points_start_point_coordinate_1= start_point_x + clientObject.between_two_points_start_point_coordinate_2= start_point_y + clientObject.between_two_points_start_point_coordinate_3= start_point_z + + # Coordinates end point + + clientObject.between_two_points_end_point_coordinate_1= end_point_x + clientObject.between_two_points_end_point_coordinate_2= end_point_y + clientObject.between_two_points_end_point_coordinate_3= end_point_z + + # Length between i and j + + clientObject.reference_type = node_reference.name + + # Distance between node k and start point + + if parameters[0]: + clientObject.distance_from_start_relative = parameters[1] + else: + clientObject.distance_from_start_absolute = parameters[1] + + # offset local coordinates + clientObject.offset_in_local_direction_y= offset_y + clientObject.offset_in_local_direction_z= offset_z + + # Comment + clientObject.comment = comment + + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) + + def OnLine(self, + no: int = 1, + line_number: int = 1, + node_reference = NodeReferenceType.REFERENCE_TYPE_L, + length_between_i_and_j: int = 1, + parameters = [True, 0.5], + comment: str = '', + params: dict = {}): + + ''' + Args: + line_number (int): Line Tag + node_reference (enum): Node Reference Enumeration + length_between_i_and_j (int): Length between 2 Nodes + parameters (list): + if distance_from_start_relative: + parameters = [True, %] + if distance_from_start_absolute: + parameters = [False, magnitude] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Reference Line + clientObject.on_line_reference_line = line_number + + # Node Type + clientObject.type = NodeType.TYPE_ON_LINE.name + + # Length between i and j + + clientObject.reference_type = node_reference.name + + clientObject.reference_object_projected_length = length_between_i_and_j + + # Distance between node k and start point + + if parameters[0]: + clientObject.distance_from_start_relative = parameters[1] + else: + clientObject.distance_from_start_absolute = parameters[1] + + # Comment + clientObject.comment = comment + + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) + + def OnMember(self, + no: int = 1, + member_number: int = 1, + node_reference = NodeReferenceType.REFERENCE_TYPE_L, + length_between_i_and_j: int = 1, + parameters = [True, 0.5], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Node Tag + member_number (int): Member Tag + node_reference (enum): Node Reference Enumeration + length_between_i_and_j (int): Length between 2 Nodes + parameters (list): + if distance_from_start_relative: + parameters = [True, %] + if distance_from_start_absolute: + parameters = [False, magnitude] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Node + clientObject = Model.clientModel.factory.create('ns0:node') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Node No. + clientObject.no = no + + # Member Reference No. + clientObject.on_member_reference_member = member_number + + # Node Type + clientObject.type = NodeType.TYPE_ON_MEMBER.name + + # Length between i and j + + clientObject.reference_type = node_reference.name + + clientObject.reference_object_projected_length = length_between_i_and_j + + # Distance between node k and start point + + if parameters[0]: + clientObject.distance_from_start_relative = parameters[1] + else: + clientObject.distance_from_start_absolute = parameters[1] + + # Comment + clientObject.comment = comment + + for key in params: + clientObject[key] = params[key] + + # Add Node to client model + Model.clientModel.service.set_node(clientObject) diff --git a/docs/RFEM/BasicObjects/opening.py b/docs/RFEM/BasicObjects/opening.py new file mode 100644 index 00000000..b69ed130 --- /dev/null +++ b/docs/RFEM/BasicObjects/opening.py @@ -0,0 +1,38 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString + +class Opening(): + def __init__(self, + no: int = 1, + lines_no: str = '1 2 3 4', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Opening Tag + lines_no (str): Tags of Lines defining Opening + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Opening + clientObject = Model.clientModel.factory.create('ns0:opening') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Opening No. + clientObject.no = no + + # Boundary Lines No. + clientObject.boundary_lines = ConvertToDlString(lines_no) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Opening to client model + Model.clientModel.service.set_opening(clientObject) diff --git a/docs/RFEM/BasicObjects/section.py b/docs/RFEM/BasicObjects/section.py new file mode 100644 index 00000000..72ffbb7d --- /dev/null +++ b/docs/RFEM/BasicObjects/section.py @@ -0,0 +1,43 @@ +from RFEM.initModel import Model, clearAtributes + +class Section(): + def __init__(self, + no: int = 1, + name: str = 'IPE 300', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Section Tag + name (str): Name of Desired Section (As Named in RFEM Database) + material_no (int): Tag of Material assigned to Section + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Section + clientObject = Model.clientModel.factory.create('ns0:section') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Section No. + clientObject.no = no + + # Section nNme + clientObject.name = name + + # Material No. + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Section to client model + Model.clientModel.service.set_section(clientObject) diff --git a/docs/RFEM/BasicObjects/solid.py b/docs/RFEM/BasicObjects/solid.py new file mode 100644 index 00000000..accd8bd2 --- /dev/null +++ b/docs/RFEM/BasicObjects/solid.py @@ -0,0 +1,220 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SolidType + +class Solid(): + def __init__(self, + no: int = 1, + boundary_surfaces_no: str = '1 2', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Tag + boundary_surfaces_no (str): Tags of Surfaces defining Solid + material_no (int): Tag of Material assigned to Solid + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid + clientObject = Model.clientModel.factory.create('ns0:solid') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid No. + clientObject.no = no + + # Surfaces No. (e.g. "5 7 8 12 5") + clientObject.boundary_surfaces = ConvertToDlString(boundary_surfaces_no) + + # Material + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_solid(clientObject) + + def Standard(self, + no: int = 1, + boundary_surfaces_no: str = '1 2', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Tag + boundary_surfaces_no (str): Tags of Surfaces defining Solid + material_no (int): Tag of Material assigned to Solid + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid + clientObject = Model.clientModel.factory.create('ns0:solid') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid No. + clientObject.no = no + + # Solid Type + clientObject.type = SolidType.TYPE_STANDARD.name + + # Surfaces No. (e.g. "5 7 8 12 5") + clientObject.boundary_surfaces = ConvertToDlString(boundary_surfaces_no) + + # Material + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_solid(clientObject) + + def Gas(self, + no: int = 1, + boundary_surfaces_no: str = '1 2', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Tag + boundary_surfaces_no (str): Tags of Surfaces defining Gas + material_no (int): Tag of Material assigned to Solid + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid + clientObject = Model.clientModel.factory.create('ns0:solid') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid No. + clientObject.no = no + + # Solid Type + clientObject.type = SolidType.TYPE_GAS.name + + # Surfaces No. (e.g. "5 7 8 12 5") + clientObject.boundary_surfaces = ConvertToDlString(boundary_surfaces_no) + + # Material + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_solid(clientObject) + + def Contact(self, + no: int = 1, + boundary_surfaces_no: str = '1 2', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Tag + boundary_surfaces_no (str): Tags of Surfaces defining Contact + material_no (int): Tag of Material assigned to Solid + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid + clientObject = Model.clientModel.factory.create('ns0:solid') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid No. + clientObject.no = no + + # Solid Type + clientObject.type = SolidType.TYPE_CONTACT.name + + # Surfaces No. (e.g. "5 7 8 12 5") + clientObject.boundary_surfaces = ConvertToDlString(boundary_surfaces_no) + + # Material + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_solid(clientObject) + + def Soil(self, + no: int = 1, + boundary_surfaces_no: str = '1 2', + material_no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Tag + boundary_surfaces_no (str): Tags of Surfaces defining Soil + material_no (int): Tag of Material assigned to Solid + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid + clientObject = Model.clientModel.factory.create('ns0:solid') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid No. + clientObject.no = no + + # Solid Type + clientObject.type = SolidType.TYPE_SOIL.name + + # Surfaces No. (e.g. "5 7 8 12 5") + clientObject.boundary_surfaces = ConvertToDlString(boundary_surfaces_no) + + # Material + clientObject.material = material_no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_solid(clientObject) \ No newline at end of file diff --git a/docs/RFEM/BasicObjects/solidSet.py b/docs/RFEM/BasicObjects/solidSet.py new file mode 100644 index 00000000..988c495c --- /dev/null +++ b/docs/RFEM/BasicObjects/solidSet.py @@ -0,0 +1,122 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SetType + +class SolidSet(): + def __init__(self, + no: int = 1, + solids_no: str = '1 2', + solid_set_type = SetType.SET_TYPE_GROUP, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Set Tag + solids_no (str): Tags of Solids Contained Within Solid Set + solid_set_type (enum): Solid Set Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid Set + clientObject = Model.clientModel.factory.create('ns0:solid_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Set No. + clientObject.no = no + + # Solids number + clientObject.solids = ConvertToDlString(solids_no) + + # Solid Set Type + clientObject.set_type = solid_set_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Set to client model + Model.clientModel.service.set_solid_set(clientObject) + + def ContinuousSolids(self, + no: int = 1, + solids_no: str = '1 2', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Set Tag + solids_no (str): Tags of Solids Contained Within Continuous Solid Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid Set + clientObject = Model.clientModel.factory.create('ns0:solid_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Set No. + clientObject.no = no + + # Solids number + clientObject.solids = ConvertToDlString(solids_no) + + # Solid Set Type + clientObject.set_type = SetType.SET_TYPE_CONTINUOUS.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Set to client model + Model.clientModel.service.set_solid_set(clientObject) + + def GroupOfSolids(self, + no: int = 1, + solids_no: str = '1 2', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Solid Set Tag + solids_no (str): Tags of Solids Contained Within Group of Solids Solid Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Solid Set + clientObject = Model.clientModel.factory.create('ns0:solid_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Set No. + clientObject.no = no + + # Solids number + clientObject.solids = ConvertToDlString(solids_no) + + # Solid Set Type + clientObject.set_type = SetType.SET_TYPE_GROUP.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Set to client model + Model.clientModel.service.set_solid_set(clientObject) diff --git a/docs/RFEM/BasicObjects/surface.py b/docs/RFEM/BasicObjects/surface.py new file mode 100644 index 00000000..77dc43ef --- /dev/null +++ b/docs/RFEM/BasicObjects/surface.py @@ -0,0 +1,412 @@ +from RFEM.enums import SurfaceGeometry, SurfaceLoadDistributionDirection, SurfaceType +from RFEM.initModel import * + +class Surface(): + def __init__(self, + no: int = 1, + boundary_lines_no: str = '1 2 3 4', + thickness: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + boundary_lines_no (str): Tags of Lines defining Surface + thickness (int): Tag of Thickness assigned to Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Lines No. (e.g. "5 7 8 12") + clientObject.boundary_lines = ConvertToDlString(boundary_lines_no) + + # Thickness + clientObject.thickness = thickness + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_surface(clientObject) + + def Standard(self, + no: int = 1, + geometry_type = SurfaceGeometry.GEOMETRY_PLANE, + geometry_type_parameters = None, + boundary_lines_no: str = '1 2 3 4', + thickness: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + geometry_type (enum): Surface Geometry Type Enumeration + geometry_type_parameters (list): Geometry Type Parameters + for geometry_type == SurfaceGeometry.GEOMETRY_NURBS: + geometry_type_parameters = [nurbs_control_point_count_in_direction_u, nurbs_control_point_count_in_direction_v, nurbs_order_in_direction_u, nurbs_order_in_direction_v] + for geometry_type == SurfaceGeometry.GEOMETRY_PLANE: + geometry_type_parameters = None + for geometry_type == SurfaceGeometry.GEOMETRY_QUADRANGLE: + geometry_type_parameters = [quadrangle_corner_node_1, quadrangle_corner_node_2, quadrangle_corner_node_3, quadrangle_corner_node_4] + boundary_lines_no (str): Tags of Lines defining Standard Surface + thickness (int): Tag of Thickness assigned to Standard Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_STANDARD.name + + # Reptitive code between various functions migrated to a private method + self.type = SurfaceType.TYPE_STANDARD.name + self.boundary_lines_no = boundary_lines_no + self.geometry_type = geometry_type + self.geometry_type_parameters = geometry_type_parameters + self.thickness = thickness + self.comment = comment + self.params = params + self.clientObject = clientObject + self.__CreateGeometryAndSetToModel(self) + + def WithoutThickness(self, + no: int = 1, + geometry_type = SurfaceGeometry.GEOMETRY_PLANE, + geometry_type_parameters = None, + boundary_lines_no: str = '1 2 3 4', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + geometry_type (enum): Surface Geometry Type Enumeration + geometry_type_parameters (list): Geometry Type Parameters + for geometry_type == SurfaceGeometry.GEOMETRY_NURBS: + geometry_type_parameters = [nurbs_control_point_count_in_direction_u, nurbs_control_point_count_in_direction_v, nurbs_order_in_direction_u, nurbs_order_in_direction_v] + for geometry_type == SurfaceGeometry.GEOMETRY_PLANE: + geometry_type_parameters = None + for geometry_type == SurfaceGeometry.GEOMETRY_QUADRANGLE: + geometry_type_parameters = [quadrangle_corner_node_1, quadrangle_corner_node_2, quadrangle_corner_node_3, quadrangle_corner_node_4] + boundary_lines_no (str): Tags of Lines defining Without Thickness Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_WITHOUT_THICKNESS.name + + # Reptitive code between various functions migrated to a private method + self.type = SurfaceType.TYPE_WITHOUT_THICKNESS.name + self.boundary_lines_no = boundary_lines_no + self.geometry_type = geometry_type + self.geometry_type_parameters = geometry_type_parameters + self.comment = comment + self.params = params + self.clientObject = clientObject + self.__CreateGeometryAndSetToModel(self) + + def Rigid(self, + no: int = 1, + geometry_type = SurfaceGeometry.GEOMETRY_PLANE, + geometry_type_parameters = None, + boundary_lines_no: str = '1 2 3 4', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + geometry_type (enum): Surface Geometry Type Enumeration + geometry_type_parameters (list): Geometry Type Parameters + for geometry_type == SurfaceGeometry.GEOMETRY_NURBS: + geometry_type_parameters = [nurbs_control_point_count_in_direction_u, nurbs_control_point_count_in_direction_v, nurbs_order_in_direction_u, nurbs_order_in_direction_v] + for geometry_type == SurfaceGeometry.GEOMETRY_PLANE: + geometry_type_parameters = None + for geometry_type == SurfaceGeometry.GEOMETRY_QUADRANGLE: + geometry_type_parameters = [quadrangle_corner_node_1, quadrangle_corner_node_2, quadrangle_corner_node_3, quadrangle_corner_node_4] + boundary_lines_no (str): Tags of Lines defining Rigid Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_RIGID.name + + # Reptitive code between various functions migrated to a private method + self.type = SurfaceType.TYPE_RIGID.name + self.boundary_lines_no = boundary_lines_no + self.geometry_type = geometry_type + self.geometry_type_parameters = geometry_type_parameters + self.comment = comment + self.params = params + self.clientObject = clientObject + self.__CreateGeometryAndSetToModel(self) + + def Membrane(self, + no: int = 1, + geometry_type = SurfaceGeometry.GEOMETRY_PLANE, + geometry_type_parameters = None, + boundary_lines_no: str = '1 2 3 4', + thickness: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + geometry_type (enum): Surface Geometry Type Enumeration + geometry_type_parameters (list): Geometry Type Parameters + for geometry_type == SurfaceGeometry.GEOMETRY_NURBS: + geometry_type_parameters = [nurbs_control_point_count_in_direction_u, nurbs_control_point_count_in_direction_v, nurbs_order_in_direction_u, nurbs_order_in_direction_v] + for geometry_type == SurfaceGeometry.GEOMETRY_PLANE: + geometry_type_parameters = None + for geometry_type == SurfaceGeometry.GEOMETRY_QUADRANGLE: + geometry_type_parameters = [quadrangle_corner_node_1, quadrangle_corner_node_2, quadrangle_corner_node_3, quadrangle_corner_node_4] + boundary_lines_no (str): Tags of Lines defining Membrane Surface + thickness (int): Tag of Thickness assigned to Membrane Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_MEMBRANE.name + + # Reptitive code between various functions migrated to a private method + self.type = SurfaceType.TYPE_MEMBRANE.name + self.boundary_lines_no = boundary_lines_no + self.geometry_type = geometry_type + self.geometry_type_parameters = geometry_type_parameters + self.thickness = thickness + self.comment = comment + self.params = params + self.clientObject = clientObject + self.__CreateGeometryAndSetToModel(self) + + def WithoutMemberaneTension(self, + no: int = 1, + geometry_type = SurfaceGeometry.GEOMETRY_PLANE, + geometry_type_parameters = None, + boundary_lines_no: str = '1 2 3 4', + thickness: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + geometry_type (enum): Surface Geometry Type Enumeration + geometry_type_parameters (list): Geometry Type Parameters + for geometry_type == SurfaceGeometry.GEOMETRY_NURBS: + geometry_type_parameters = [nurbs_control_point_count_in_direction_u, nurbs_control_point_count_in_direction_v, nurbs_order_in_direction_u, nurbs_order_in_direction_v] + for geometry_type == SurfaceGeometry.GEOMETRY_PLANE: + geometry_type_parameters = None + for geometry_type == SurfaceGeometry.GEOMETRY_QUADRANGLE: + geometry_type_parameters = [quadrangle_corner_node_1, quadrangle_corner_node_2, quadrangle_corner_node_3, quadrangle_corner_node_4] + boundary_lines_no (str): Tags of Lines defining Without Membrane Tension Surface + thickness (int): Tag of Thickness assigned to Without Membrane Tension Surface + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_WITHOUT_MEMBRANE_TENSION.name + + # Reptitive code between various functions migrated to a private method + self.type = SurfaceType.TYPE_WITHOUT_MEMBRANE_TENSION.name + self.boundary_lines_no = boundary_lines_no + self.geometry_type = geometry_type + self.geometry_type_parameters = geometry_type_parameters + self.thickness = thickness + self.comment = comment + self.params = params + self.clientObject = clientObject + self.__CreateGeometryAndSetToModel(self) + + def LoadDistribution(self, + no: int = 1, + boundary_lines_no: str = '1 2 3 4', + load_transfer_direction = SurfaceLoadDistributionDirection.LOAD_TRANSFER_DIRECTION_IN_X, + surface_weight_enabled: bool = False, + surface_weight: float = None, + excluded_members = None, + excluded_parallel_to_members = None, + excluded_lines = None, + excluded_parallel_to_lines = None, + loaded_members = None, + loaded_lines = None, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surface Tag + boundary_lines_no (str): Tags of Lines defining Load Distribution Surface + load_transfer_direction (enum): Surface Load Transfer Direction Enumeration + surface_weight_enabled (bool): Activate/De-Activate Surface Weight + surface_weight (float): Magnitude of Surface Weight + excluded_members (str): Tag of Members to be excluded from Load Distribution + excluded_parallel_to_members (str): Tag of Members to which parallel Members are excluded from Load Distribution + excluded_lines (str): Tag of Lines to be excluded from Load Distribution + excluded_parallel_to_lines (str): Tag of Lines to which parallel Lines are excluded from Load Distribution + loaded_members (str): Tag of Loaded Members + loaded_lines (str): Tag of Loaded Lines + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:surface') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface No. + clientObject.no = no + + # Surface Type + clientObject.type = SurfaceType.TYPE_LOAD_TRANSFER.name + + # Geometry Type + clientObject.geometry = SurfaceGeometry.GEOMETRY_PLANE.name + + # Lines No. (e.g. "5 7 8 12") + clientObject.boundary_lines = ConvertToDlString(boundary_lines_no) + + # Surface Load Distribution Direction + clientObject.load_transfer_direction = load_transfer_direction.name + + # Surface Weight + clientObject.is_surface_weight_enabled = surface_weight_enabled + clientObject.surface_weight = surface_weight + + # Loading Parameters + if excluded_members is not None: + clientObject.excluded_members = ConvertToDlString(excluded_members) + if excluded_parallel_to_members is not None: + clientObject.excluded_parallel_to_members = ConvertToDlString(excluded_parallel_to_members) + if excluded_lines is not None: + clientObject.excluded_lines = ConvertToDlString(excluded_lines) + if excluded_parallel_to_lines is not None: + clientObject.excluded_parallel_to_lines = ConvertToDlString(excluded_parallel_to_lines) + if loaded_members is not None: + clientObject.loaded_members = ConvertToDlString(loaded_members) + if loaded_lines is not None: + clientObject.loaded_lines = ConvertToDlString(loaded_lines) + if loaded_lines is None and loaded_members is None: + raise Exception('WARNING: Loaded lines and/or members need to be specified.') + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface to client model + Model.clientModel.service.set_surface(clientObject) + + def __CreateGeometryAndSetToModel(self): + + # Geometry Type + boundary_lines_list = self.boundary_lines_no.split(sep= ' ') + + if self.geometry_type.name == 'GEOMETRY_NURBS': + if len(self.geometry_type_parameters) != 4: + raise Exception('WARNING: The geometry type parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + for line in boundary_lines_list: + if Model.clientModel.service.get_line(int(line))['type'] != 'TYPE_NURBS': + raise Exception('WARNING: For a NURBS Surface, the boundary lines need to be NURBS Curves') + self.clientObject.nurbs_control_point_count_in_direction_u = self.geometry_type_parameters[0] + self.clientObject.nurbs_control_point_count_in_direction_v = self.geometry_type_parameters[1] + self.clientObject.nurbs_order_in_direction_u = self.geometry_type_parameters[2] + self.clientObject.nurbs_order_in_direction_v = self.geometry_type_parameters[3] + + elif self.geometry_type.name == 'GEOMETRY_PLANE': + self.geometry_type_parameters = None + + elif self.geometry_type.name == 'GEOMETRY_QUADRANGLE': + if len(self.geometry_type_parameters) != 4: + raise Exception('WARNING: The geometry type parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + self.clientObject.quadrangle_corner_node_1 = self.geometry_type_parameters[0] + self.clientObject.quadrangle_corner_node_2 = self.geometry_type_parameters[1] + self.clientObject.quadrangle_corner_node_3 = self.geometry_type_parameters[2] + self.clientObject.quadrangle_corner_node_4 = self.geometry_type_parameters[3] + + self.clientObject.geometry = self.geometry_type.name + + # Lines No. (e.g. "5 7 8 12") + self.clientObject.boundary_lines = ConvertToDlString(self.boundary_lines_no) + + # Thickness + if self.type == 'TYPE_STANDARD'or self.type == 'TYPE_MEMBRANE' or self.type == 'TYPE_WITHOUT_MEMBRANE_TENSION': + self.clientObject.thickness = self.thickness + + # Comment + self.clientObject.comment = self.comment + + # Adding optional parameters via dictionary + for key in self.params: + self.clientObject[key] = self.params[key] + + # Add Surface to client model + Model.clientModel.service.set_surface(self.clientObject) diff --git a/docs/RFEM/BasicObjects/surfaceSet.py b/docs/RFEM/BasicObjects/surfaceSet.py new file mode 100644 index 00000000..e3e3299f --- /dev/null +++ b/docs/RFEM/BasicObjects/surfaceSet.py @@ -0,0 +1,123 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SetType + +class SurfaceSet(): + def __init__(self, + no: int = 1, + surfaces_no: str = '2 4 7', + surface_set_type = SetType.SET_TYPE_GROUP, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surfaces Set Tag + surfaces_no (str): Tags of Surfaces Contained Within Surface Set + surfaces_set_type (enum): Surface Set Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface Set + clientObject = Model.clientModel.factory.create('ns0:surface_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Set No. + clientObject.no = no + + # Surfaces number + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Surface Set Type + clientObject.set_type = surface_set_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Set to client model + Model.clientModel.service.set_surface_set(clientObject) + + def ContinuousSurfaces(self, + no: int = 1, + surfaces_no: str = '2 4 7', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surfaces Set Tag + surfaces_no (str): Tags of Surfaces Contained Within Continuous Surface Set + surfaces_set_type (enum): Surface Set Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface Set + clientObject = Model.clientModel.factory.create('ns0:surface_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Set No. + clientObject.no = no + + # Surfaces number + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Surface Set Type + clientObject.set_type = SetType.SET_TYPE_CONTINUOUS.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Set to client model + Model.clientModel.service.set_surface_set(clientObject) + + def GroupOfSurfaces(self, + no: int = 1, + surfaces_no: str = '2 4 7', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Surfaces Set Tag + surfaces_no (str): Tags of Surfaces Contained Within Group of Surfaces Surface Set + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface Set + clientObject = Model.clientModel.factory.create('ns0:surface_set') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Set No. + clientObject.no = no + + # Surfaces number + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Surface Set Type + clientObject.set_type = SetType.SET_TYPE_GROUP.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Set to client model + Model.clientModel.service.set_surface_set(clientObject) diff --git a/docs/RFEM/BasicObjects/thickness.py b/docs/RFEM/BasicObjects/thickness.py new file mode 100644 index 00000000..9e6f420e --- /dev/null +++ b/docs/RFEM/BasicObjects/thickness.py @@ -0,0 +1,669 @@ +from RFEM.enums import ThicknessDirection, ThicknessType +from RFEM.enums import ThicknessOrthotropyType +from RFEM.enums import ThicknessShapeOrthotropySelfWeightDefinitionType +from RFEM.enums import ThicknessStiffnessMatrixSelfWeightDefinitionType +from RFEM.initModel import Model, CheckAddonStatus, clearAtributes, SetAddonStatus +from math import pi + +class Thickness(): + def __init__(self, + no: int = 1, + name: str = None, + material_no: int = 1, + uniform_thickness_d: float = 0.20, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + uniform_thickness_d (float): Magnitude of Thickness + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_UNIFORM.name + + # Material No. + clientObject.material = material_no + + # Uniform Thickness d + clientObject.uniform_thickness = uniform_thickness_d + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Uniform(self, + no: int = 1, + name: str = None, + material_no: int = 1, + properties = [0.2], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Magnitude of Thickness [Thickness] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_UNIFORM.name + + # Material No. + clientObject.material = material_no + + # Thickness Parameters + if properties is None: + raise Exception('WARNING: The properties parameter cannot be empty.') + clientObject.uniform_thickness = properties[0] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Variable_3Nodes(self, + no: int = 1, + name: str = None, + material_no: int = 1, + properties = None, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Properties for 3 Nodes Variable Thickness Definition + properties = [thickness_d1, node_no_1, thickness_d2, node_no_2, thickness_d3, node_no_3] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_VARIABLE_THREE_NODES.name + + # Material No. + clientObject.material = material_no + + # Thickness Properties + if properties is None: + raise Exception('WARNING: The properties parameter cannot be empty') + elif len(properties) != 6: + raise Exception('WARNING: The properties parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + clientObject.thickness_1 = properties[0] + clientObject.node_1 = properties[1] + clientObject.thickness_2 = properties[2] + clientObject.node_2 = properties[3] + clientObject.thickness_3 = properties[4] + clientObject.node_3 = properties[5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Variable_2NodesAndDirection(self, + no: int = 1, + name: str = None, + material_no: int = 1, + properties = [0.18, 1, 0.18, 2, ThicknessDirection.THICKNESS_DIRECTION_IN_X], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Properties for 2 Nodes and Direction Variable Thickness Definition + properties = [thickness_d1, node_no_1, thickness_d2, node_no_2, direction] + comment (str, optional): Comments + params (dict, optional): Parameters + + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_VARIABLE_TWO_NODES_AND_DIRECTION.name + + # Material No. + clientObject.material = material_no + + # Thickness Properties + if len(properties) != 5: + raise Exception('WARNING: The properties parameter needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.thickness_1 = properties[0] + clientObject.node_1 = properties[1] + clientObject.thickness_2 = properties[2] + clientObject.node_2 = properties[3] + clientObject.direction = properties[4].name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Variable_4SurfaceCorners(self, + no: int = 1, + name: str = None, + material_no: int = 1, + properties = None, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Properties for 4 Surface Corners Variable Definition + properties = [thickness_d1, node_no_1, thickness_d2, node_no_2, thickness_d3, node_no_3, thickness_d4, node_no_4] + comment (str, optional): Comments + params (dict, optional): Parameters + + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_VARIABLE_FOUR_SURFACE_CORNERS.name + + # Material No. + clientObject.material = material_no + + # Thickness Properties + if properties is None: + raise Exception('WARNING: The properties parameter cannot be empty') + elif len(properties) != 8: + raise Exception('WARNING: The properties parameter needs to be of length 8. Kindly check list inputs for completeness and correctness.') + clientObject.thickness_1 = properties[0] + clientObject.node_1 = properties[1] + clientObject.thickness_2 = properties[2] + clientObject.node_2 = properties[3] + clientObject.thickness_3 = properties[4] + clientObject.node_3 = properties[5] + clientObject.thickness_4 = properties[6] + clientObject.node_4 = properties[7] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Variable_Circle(self, + no: int = 1, + name: str = None, + material_no: int = 1, + properties = None, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Properties for Circular Thickness Definition + properties = [thickness_circle_center_dC, thickness_circle_line_dR] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_VARIABLE_CIRCLE.name + + # Material No. + clientObject.material = material_no + + # Thickness Properties + if properties is None: + raise Exception('WARNING: The properties parameter cannot be empty') + elif len(properties) != 2: + raise Exception('WARNING: The properties parameter needs to be of length 2. Kindly check list inputs for completeness and correctness.') + clientObject.thickness_circle_center = properties[0] + clientObject.thickness_circle_line = properties[1] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def Layers(self, + no: int = 1, + name: str = None, + layers = [[0, 1, 200, 0.0, '']], + comment: str = '', + params: dict = {}): + + ''' + NOTE: Available only for Special Solution Add-on Multilayer Surfaces. + + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + properties (list): Nested List of Layer Properties + properties: [[thickness_type, material, thickness, rotation, comment], ...] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Check if Multilayer Surfaces Add-on is ON. + if not CheckAddonStatus(Model.clientModel, "multilayer_surfaces_active"): + SetAddonStatus(Model.clientModel, "multilayer_surfaces_active", True) + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_LAYERS.name + + # Layers + clientObject.layers_reference_table = Model.clientModel.factory.create('ns0:thickness.layers_reference_table') + + for i,j in enumerate(layers): + tlrt = Model.clientModel.factory.create('ns0:thickness_layers_reference_table') + tlrt.no = no + tlrt.layer_no = i+1 + tlrt.layer_type = None + tlrt.thickness_type = layers[i][0] + tlrt.material = layers[i][1] + tlrt.thickness = layers[i][2] + tlrt.angle = layers[i][3] * (pi/180) + tlrt.connection_with_other_topological_elements = False + tlrt.comment = layers[i][4] + tlrt.specific_weight = 0 + tlrt.weight = 0 + + clientObject.layers_reference_table.thickness_layers_reference_table.append(tlrt) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def ShapeOrthotropy(self, + no: int = 1, + name: str = None, + material_no: int = 1, + orthotropy_type = ThicknessOrthotropyType.EFFECTIVE_THICKNESS, + rotation_beta: float = 0, + consideration_of_self_weight = [ThicknessShapeOrthotropySelfWeightDefinitionType.SELF_WEIGHT_COMPUTED_FROM_PARAMETERS, 0.18], + parameters = [0.18, 0.18], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + orthotropy_type (enum): Thickness Orthotropy Type + rotation_beta (float): Rotation + consideration_of_self_weight (list): Consideration of Self-Weight Parameters + for consideration_of_self_weight == 'parameter defined' + consideration_of_self_weight = [ThicknessShapeOrthotropySelfWeightDefinitionType.SELF_WEIGHT_COMPUTED_FROM_PARAMETERS, fictitious_thickness] + for consideration_of_self_weight == 'user-defined fictitious thickness' + consideration_of_self_weight = [ThicknessShapeOrthotropySelfWeightDefinitionType.SELF_WEIGHT_DEFINED_VIA_FICTITIOUS_THICKNESS, fictitious_thickness] + for consideration_of_self_weight == 'user-defined' + consideration_of_self_weight = [ThicknessShapeOrthotropySelfWeightDefinitionType.SELF_WEIGHT_DEFINED_VIA_WEIGHT, self_weight] + parameters (list): Parameters List of chosen Orthotropy Type + for orthotropy_type == ThicknessOrthotropyType.EFFECTIVE_THICKNESS: + parameters = [effective_thickness_x, effective_thickness_y] + for orthotropy_type == ThicknessOrthotropyType.COUPLING: + parameters = [coupling_thickness, coupling_spacing, coupling_width] + for orthotropy_type == ThicknessOrthotropyType.UNIDIRECTIONAL_RIBBED_PLATE: + parameters = [slab_thickness, rib_height, rib_spacing, rib_width] + for orthotropy_type == ThicknessOrthotropyType.BIDIRECTIONAL_RIBBED_PLATE: + parameters = [slab_thickness, rib_height_x, rib_height_y, rib_spacing_x, rib_spacing_y, rib_width_x, rib_width_y] + for orthotropy_type == ThicknessOrthotropyType.TRAPEZOIDAL_SHEET: + parameters = [sheet_thickness, total_profile_height, rib_spacing, top_flange_width, bottom_flange_width] + for orthotropy_type == ThicknessOrthotropyType.HOLLOW_CORE_SLAB: + parameters = [slab_thickness, void_spacing, void_diameter] + for orthotropy_type == ThicknessOrthotropyType.GRILLAGE: + parameters = [slab_thickness, rib_spacing_x, rib_spacing_y, rib_width_x, rib_width_y] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_SHAPE_ORTHOTROPY.name + + # Material No. + clientObject.material = material_no + + # Orthotropy Type + clientObject.orthotropy_type = 'ORTHOTROPIC_THICKNESS_TYPE_' + orthotropy_type.name + + # Rotation Beta + clientObject.orthotropy_rotation_beta = rotation_beta * (pi/180) + + # Consideration of Self-Weight + if len(consideration_of_self_weight) != 2: + raise Exception('WARNING: The consideration of self-weight parameter needs to be of length 2. Kindly check list inputs for completeness and correctness.') + clientObject.shape_orthotropy_self_weight_definition_type = consideration_of_self_weight[0].name + if consideration_of_self_weight[0].name == 'SELF_WEIGHT_COMPUTED_FROM_PARAMETERS' or consideration_of_self_weight[0].name == 'SELF_WEIGHT_DEFINED_VIA_FICTITIOUS_THICKNESS': + clientObject.orthotropy_fictitious_thickness = consideration_of_self_weight[1] + elif consideration_of_self_weight[0].name == 'SELF_WEIGHT_DEFINED_VIA_WEIGHT': + clientObject.shape_orthotropy_self_weight = consideration_of_self_weight[1] + + # Shape Orthotropy Parameters + if orthotropy_type.name == 'EFFECTIVE_THICKNESS': + if len(parameters) != 2: + raise Exception('WARNING: The parameters needs to be of length 2. Kindly check list inputs for completeness and correctness.') + clientObject.shape_orthotropy_effective_thickness_x = parameters[0] + clientObject.shape_orthotropy_effective_thickness_y = parameters[1] + elif orthotropy_type.name == 'COUPLING': + if len(parameters) != 3: + raise Exception('WARNING: The parameters needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.coupling_thickness = parameters[0] + clientObject.coupling_spacing = parameters[1] + clientObject.coupling_width = parameters[2] + elif orthotropy_type.name == 'UNIDIRECTIONAL_RIBBED_PLATE': + if len(parameters) != 4: + raise Exception('WARNING: The parameters needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.slab_thickness = parameters[0] + clientObject.rib_height = parameters[1] + clientObject.rib_spacing = parameters[2] + clientObject.rib_width = parameters[3] + elif orthotropy_type.name == 'BIDIRECTIONAL_RIBBED_PLATE': + if len(parameters) != 7: + raise Exception('WARNING: The parameters needs to be of length 7. Kindly check list inputs for completeness and correctness.') + clientObject.slab_thickness = parameters[0] + clientObject.rib_height_x = parameters[1] + clientObject.rib_height_y = parameters[2] + clientObject.rib_spacing_x = parameters[3] + clientObject.rib_spacing_y = parameters[4] + clientObject.rib_width_x = parameters[5] + clientObject.rib_width_y = parameters[6] + elif orthotropy_type.name == 'TRAPEZOIDAL_SHEET': + if len(parameters) != 5: + raise Exception('WARNING: The parameters needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.sheet_thickness = parameters[0] + clientObject.total_profile_height = parameters[1] + clientObject.rib_spacing = parameters[2] + clientObject.top_flange_width = parameters[3] + clientObject.bottom_flange_width = parameters[4] + elif orthotropy_type.name == 'HOLLOW_CORE_SLAB': + if len(parameters) != 3: + raise Exception('WARNING: The parameters needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.slab_thickness = parameters[0] + clientObject.void_spacing = parameters[1] + clientObject.void_diameter = parameters[2] + elif orthotropy_type.name == 'GRILLAGE': + if len(parameters) != 5: + raise Exception('WARNING: The parameters needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.slab_thickness = parameters[0] + clientObject.rib_spacing_x = parameters[1] + clientObject.rib_spacing_y = parameters[2] + clientObject.rib_width_x = parameters[3] + clientObject.rib_width_y = parameters[4] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) + + def StiffnessMatrix(self, + no: int = 1, + name: str = None, + material_no: int = 1, + rotation_beta: float = 0, + consideration_of_self_weight = [ThicknessStiffnessMatrixSelfWeightDefinitionType.SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_BULK_DENSITY, 0.2, 0.0], + coefficient_of_thermal_expansion: float = 0, + stiffness_matrix = [[0, 0, 0, 0, 0, 0],[0, 0, 0],[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Thickness Tag + name (str): Thickness Name + material_no (int): Tag of Material assigned to Thickness + rotation_beta (float): Rotation + consideration_of_self_weight (list): Self-Weight Consideration Parameters + for consideration_of_self_weight == 'fictitious thickness and bulk density' + consideration_of_self_weight = [ThicknessStiffnessMatrixSelfWeightDefinitionType.SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_BULK_DENSITY, fictitious_thickness, stiffness_matrix_bulk_density] + for consideration_of_self_weight == 'fictitious thickness and area density' + consideration_of_self_weight = [ThicknessStiffnessMatrixSelfWeightDefinitionType.SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_AREA_DENSITY, stiffness_matrix_bulk_density, stiffness_matrix_area_density] + for consideration_of_self_weight == 'bulk density and area density' + consideration_of_self_weight = [ThicknessStiffnessMatrixSelfWeightDefinitionType.SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_BULK_DENSITY_AND_AREA_DENSITY, fictitious_thickness, stiffness_matrix_area_density] + coefficient_of_thermal_expansion (float): Coefficient of Thermal Expansion + stiffness_matrix (list): Nested List of Stiffness Matrix Entries (See Below) + Element entry overview : [[Bending/Torsional Stiffness Elements (Nm)], + [Shear Stiffness Elements (N/m)], + [Membrane Stiffness Elements (N/m)], + [Eccentric Stiffness Elements (Nm/m)]] + Detailed element entry : [[D11, D12, D13, D22, D23, D33], + [D44, D45, D55], + [D66, D67, D68, D77, D78, D88], + [D16, D17, D18, D27, D28, D38]] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Thickness + clientObject = Model.clientModel.factory.create('ns0:thickness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Thickness No. + clientObject.no = no + + # Thickness Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Thickness Type + clientObject.type = ThicknessType.TYPE_STIFFNESS_MATRIX.name + + # Material No. + clientObject.material = material_no + + # Rotation Beta + clientObject.orthotropy_rotation_beta = rotation_beta * (pi/180) + + # Consideration of Self-Weight + clientObject.stiffness_matrix_self_weight_definition_type = consideration_of_self_weight[0].name + if consideration_of_self_weight[0].name == 'SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_BULK_DENSITY': + clientObject.orthotropy_fictitious_thickness = consideration_of_self_weight[1] + clientObject.stiffness_matrix_bulk_density = consideration_of_self_weight[2] + elif consideration_of_self_weight[0].name == 'SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_AREA_DENSITY': + clientObject.orthotropy_fictitious_thickness = consideration_of_self_weight[1] + clientObject.stiffness_matrix_area_density = consideration_of_self_weight[2] + elif consideration_of_self_weight[0].name == 'SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_BULK_DENSITY_AND_AREA_DENSITY': + clientObject.stiffness_matrix_bulk_density = consideration_of_self_weight[1] + clientObject.stiffness_matrix_area_density = consideration_of_self_weight[2] + + # Coefficient of Thermal Expansion + clientObject.stiffness_matrix_coefficient_of_thermal_expansion = coefficient_of_thermal_expansion + + # Stiffness Matrix - Bending/Torsional Stiffness Elements + array_count = [] + for item_length in stiffness_matrix: + array_count.append(len(item_length)) + if array_count != [6, 3, 6, 6]: + raise Exception('WARNING: Kindly check Stiffness Matrix inputs for completeness and correctness.') + clientObject.D11, clientObject.D12, clientObject.D13 = stiffness_matrix[0][0], stiffness_matrix[0][1], stiffness_matrix[0][2] + clientObject.D22, clientObject.D23, clientObject.D33 = stiffness_matrix[0][3], stiffness_matrix[0][4], stiffness_matrix[0][5] + + # Stiffness Matrix - Shear Stiffness Elements + clientObject.D44, clientObject.D45, clientObject.D55 = stiffness_matrix[1][0], stiffness_matrix[1][1], stiffness_matrix[1][2] + + # Stiffness Matrix - Membrane Stiffness Elements + clientObject.D66, clientObject.D67, clientObject.D68 = stiffness_matrix[2][0], stiffness_matrix[2][1], stiffness_matrix[2][2] + clientObject.D77, clientObject.D78, clientObject.D88 = stiffness_matrix[2][3], stiffness_matrix[2][4], stiffness_matrix[2][5] + + # Stiffness Matrix - Eccentric Stiffness Elements + clientObject.D16, clientObject.D17, clientObject.D18 = stiffness_matrix[3][0], stiffness_matrix[3][1], stiffness_matrix[3][2] + clientObject.D27, clientObject.D28, clientObject.D38 = stiffness_matrix[3][3], stiffness_matrix[3][4], stiffness_matrix[3][5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Thickness to client model + Model.clientModel.service.set_thickness(clientObject) diff --git a/docs/RFEM/ConcreteDesign/ConcreteServiceabilityConfigurations.py b/docs/RFEM/ConcreteDesign/ConcreteServiceabilityConfigurations.py new file mode 100644 index 00000000..1c822113 --- /dev/null +++ b/docs/RFEM/ConcreteDesign/ConcreteServiceabilityConfigurations.py @@ -0,0 +1,65 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import * + +class ConcreteServiceabilityConfiguration(): + + def __init__(self, + no: int = 1, + name: str = 'SLS', + members = '1', + member_sets = '', + surfaces = '', + surface_sets = '', + nodes = '', + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Configuration Tag + name (str): User Defined Name + members (str): Assigned Members + member_sets (str): Assigned Member Sets + surfaces (str): Assigned Surfaces + surface_sets (str): Assigned Surface Sets + nodes (str): Assigned Nodes + comment (str, optional): Comment + params (dict, optional): Parameters + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:sls_configuration') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Assigned Members + clientObject.assigned_to_members = ConvertToDlString(members) + + # Assigned Member Sets + clientObject.assigned_to_member_sets = ConvertToDlString(member_sets) + + # Assigned Surfaces + clientObject.assigned_to_surfaces = ConvertToDlString(surfaces) + + # Assigned Surface Sets + clientObject.assigned_to_surface_sets = ConvertToDlString(surface_sets) + + #Assinged Nodes + clientObject.assigned_to_nodes = ConvertToDlString(nodes) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_sls_configuration(clientObject) \ No newline at end of file diff --git a/docs/RFEM/ConcreteDesign/ConcreteUltimateConfigurations.py b/docs/RFEM/ConcreteDesign/ConcreteUltimateConfigurations.py new file mode 100644 index 00000000..7896e7c9 --- /dev/null +++ b/docs/RFEM/ConcreteDesign/ConcreteUltimateConfigurations.py @@ -0,0 +1,65 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import * + +class ConcreteUltimateConfiguration(): + + def __init__(self, + no: int = 1, + name: str = 'ULS', + members = '1', + member_sets = '', + surfaces = '', + surface_sets = '', + nodes = '', + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Configuration Tag + name (str): User Defined Name + members (str): Assigned Members + member_sets (str): Assigned Member Sets + surfaces (str): Assigned Surfaces + surface_sets (str): Assigned Surface Sets + nodes (str): Assigned Nodes + comment (str, optional): Comment + params (dict, optional): Parameters + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:uls_configuration') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Assigned Members + clientObject.assigned_to_members = ConvertToDlString(members) + + # Assigned Member Sets + clientObject.assigned_to_member_sets = ConvertToDlString(member_sets) + + # Assigned Surfaces + clientObject.assigned_to_surfaces = ConvertToDlString(surfaces) + + # Assigned Surface Sets + clientObject.assigned_to_surface_sets = ConvertToDlString(surface_sets) + + #Assinged Nodes + clientObject.assigned_to_nodes = ConvertToDlString(nodes) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_uls_configuration(clientObject) \ No newline at end of file diff --git a/docs/RFEM/ConcreteDesign/__init__.py b/docs/RFEM/ConcreteDesign/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/ConcreteDesign/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/Imperfections/__init__.py b/docs/RFEM/Imperfections/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/Imperfections/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/Imperfections/imperfectionCase.py b/docs/RFEM/Imperfections/imperfectionCase.py new file mode 100644 index 00000000..1366d131 --- /dev/null +++ b/docs/RFEM/Imperfections/imperfectionCase.py @@ -0,0 +1,37 @@ +from RFEM.initModel import Model, clearAtributes + +class ImperfectionCase(): + def __init__(self, + no: int = 1, + assigned_to_load_cases: str = '1', + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Imperfection Case Tag + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Imperfection Case + clientObject = Model.clientModel.factory.create('ns0:imperfection_case') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Imperfection Case No. + clientObject.no = no + + # Assign to Load Cases + clientObject.assigned_to_load_cases = assigned_to_load_cases + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Imperfection Case to client model + Model.clientModel.service.set_imperfection_case(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/__init__.py b/docs/RFEM/LoadCasesAndCombinations/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/LoadCasesAndCombinations/designSituation.py b/docs/RFEM/LoadCasesAndCombinations/designSituation.py new file mode 100644 index 00000000..626e0362 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/designSituation.py @@ -0,0 +1,83 @@ +from RFEM.initModel import Model,clearAtributes + +class DesignSituation(): + def __init__(self, + no: int = 1, + user_defined_name: bool = False, + name = None, + active: bool = True, + design_situation_type: int = 6122, + comment: str = '', + params: dict = {}): + + """ + Args: + no (int): Design Situation Tag + user_defined_name (bool): Enable/Disable User-Defined Name + name (str, optional): User-Defined Name (Applicable when user_defined_name = TRUE) + active (bool): Enable/Disable Design Situation Activity + design_situation_type (int): Design Situation Numeric Code (Variable key inputs, dependant on Standards defined in the model) + Applicable to Standard Group EN 1990 with National Annex CEN | 2010-04 (See Model Base Data > Standards I) + 6122 = ULS (EQU) - Permanent and transient, + 6993 = ULS (EQU) - Accidental - psi-1,1, + 6994 = ULS (EQU) - Accidental - psi-2,1, + 6997 = ULS (EQU) - Seismic, + 7007 = ULS (STR/GEO) - Permanent and transient - Eq. 6.10, + 7008 = ULS (STR/GEO) - Permanent and transient - Eq. 6.10a and 6.10b, + 7010 = ULS (STR/GEO) - Accidental - psi-1,1, + 7011 = ULS (STR/GEO) - Accidental - psi-2,1, + 7014 = ULS (STR/GEO) - Seismic, + 6193 = SLS - Characteristic, + 6194 = SLS - Frequent, + 6195 = SLS - Quasi-permanent. + Applicable to Standard Group EN 1990 with National Annex DIN | 2012-08 (See Model Base Data > Standards I) + 6122 = ULS (EQU) - Permanent and transient, + 6993 = ULS (EQU) - Accidental - psi-1,1, + 6994 = ULS (EQU) - Accidental - psi-2,1, + 6995 = ULS (EQU) - Accidental - Snow - psi-1,1, + 6996 = ULS (EQU) - Accidental - Snow - psi-2,1, + 6997 = ULS (EQU) - Seismic, + 7007 = ULS (STR/GEO) - Permanent and transient - Eq. 6.10, + 7010 = ULS (STR/GEO) - Accidental - psi-1,1, + 7011 = ULS (STR/GEO) - Accidental - psi-2,1, + 7012 = ULS (STR/GEO) - Accidental - Snow - psi-1,1, + 7013 = ULS (STR/GEO) - Accidental - Snow - psi-2,1, + 7014 = ULS (STR/GEO) - Seismic, + 6193 = SLS - Characteristic, + 6194 = SLS - Frequent, + 6195 = SLS - Quasi-permanent. + comment (str, optional): Comments + params (dict, optional): Parameters + """ + + # Client model | Design Situation + clientObject = Model.clientModel.factory.create('ns0:design_situation') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Design Situation No. + clientObject.no = no + + # Design Situation Name + clientObject.user_defined_name_enabled = user_defined_name + if user_defined_name: + if name is None: + raise Exception('WARNING: A user defined design situation name was requested. As such, the name parameter cannot be empty.') + clientObject.name = name + + # Design Situation Active + clientObject.active = active + + # Design Situation Type + clientObject.design_situation_type = design_situation_type + + # Design Situation Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Design Situation to client model + Model.clientModel.service.set_design_situation(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/loadCase.py b/docs/RFEM/LoadCasesAndCombinations/loadCase.py new file mode 100644 index 00000000..a11d02a3 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/loadCase.py @@ -0,0 +1,167 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import AnalysisType + +DIN_Action_Category = {'1A': 'Permanent | G', '1B': 'Permanent - small fluctuations | G*', '1C': 'Permanent/Imposed | Gq', '2': 'Prestress | P', + '3A': 'Imposed loads - category A: domestic, residential areas | QI A', '3B': 'Imposed loads - category B: office areas | QI B', + '3C': 'Imposed loads - category C: congregation areas | QI C', '3D': 'Imposed loads - category D: shopping areas | QI D', + '3E': 'Imposed loads - category E: storage areas | QI E', '3F': 'Imposed loads - category F: traffic area - vehicle weight <= 30 kN | QI F', + '3G': 'Imposed loads - category G: traffic area - vehicle weight <= 160 kN | QI G', '3H': 'Imposed loads - category H: roofs | QI H', + '4A': 'Snow / Ice loads - H <= 1000 m | Qs', '4B': 'Snow / Ice loads - H > 1000 m | Qs', '5': 'Wind | Qw', '6': 'Temperature (non-fire) | QT', + '7': 'Foundation subsidence | Qf', '8': 'Other actions | Qo', '9': 'Accidental actions | A', '10': 'Seismic actions | AE', 'None': 'None | None'} + +class LoadCase(): + + def __init__(self, + no: int = 1, + name: str = 'Self-weight', + self_weight: list = [True, 0.0, 0.0, 1.0], + comment: str = 'Comment', + params: dict = {}): + ''' + Args: + no (int): Load Case Tag + name (str): Load Case Name + self_weight (list): Self-Weight Parameters + self_weight = [self_weight_active, self_weight_factor_x, self_weight_factor_y, self_weight_factor_z] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Load Case + clientObject = Model.clientModel.factory.create('ns0:load_case') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Load Case No. + clientObject.no = no + + # Load Case Name + clientObject.name = name + + # To Solve + clientObject.to_solve = True + + # Analysis Type + clientObject.analysis_type = AnalysisType.ANALYSIS_TYPE_STATIC.name + clientObject.static_analysis_settings = 1 + + # Action Category + clientObject.action_category = 'Permanent | G' + + # Self-weight Considerations + clientObject.self_weight_active = self_weight[0] + if not isinstance(self_weight[0], bool): + raise Exception('WARNING: Entry at index 0 of Self-Weight parameter to be of type bool') + if self_weight[0]: + if len(self_weight) != 4: + raise Exception('WARNING: Self-weight is activated and therefore requires a list definition of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.self_weight_factor_x = self_weight[1] + clientObject.self_weight_factor_y = self_weight[2] + clientObject.self_weight_factor_z = self_weight[3] + else: + if len(self_weight) != 1: + raise Exception('WARNING: Self-weight is deactivated and therefore requires a list definition of length 1. Kindly check list inputs for completeness and correctness.') + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Case to client model + Model.clientModel.service.set_load_case(clientObject) + + def StaticAnalysis(self, + no: int = 1, + name: str = 'Self-weight', + to_solve: bool = True, + analysis_settings_no: int = 1, + action_category= DIN_Action_Category['1A'], + self_weight = [True, 0.0, 0.0, 10.0], + comment: str = 'Comment', + params: dict = {}): + ''' + Args: + no (int): Load Case Tag + name (str): Load Case Name + to_solve (bool): Enable/Disbale Load Case Solver Status + analysis_type (enum): Analysis Type Enumeration + analysis_settings_no (int): Analysis Settings Number + action_category (dict): Action Category Key + 1A = Permanent | G + 1B = Permanent - small fluctuations | G* + 1C = Permanent/Imposed | Gq + 2 = Prestress | P + 3A = Imposed loads - category A: domestic, residential areas | QI A + 3B = Imposed loads - category B: office areas | QI B + 3C = Imposed loads - category C: congregation areas | QI C + 3D = Imposed loads - category D: shopping areas | QI D + 3E = Imposed loads - category E: storage areas | QI E + 3F = Imposed loads - category F: traffic area - vehicle weight <= 30 kN | QI F + 3G = Imposed loads - category G: traffic area - vehicle weight <= 160 kN | QI G + 3H = Imposed loads - category H: roofs | QI H + 4A = Snow / Ice loads - H <= 1000 m | Qs + 4B = Snow / Ice loads - H > 1000 m | Qs + 5 = Wind | Qw + 6 = Temperature (non-fire) | QT + 7 = Foundation subsidence | Qf + 8 = Other actions | Qo + 9 = Accidental actions | A + 10 = Seismic actions | AE + None = None | None + self_weight (list): Self-weight Considerations + for self-weight considerations; + self_weight = [True, self_weight_factor_x, self_weight_factor_y, self_weight_factor_z] + for no self-weight considerations; + self_weight = [False] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Load Case + clientObject = Model.clientModel.factory.create('ns0:load_case') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Load Case No. + clientObject.no = no + + # Load Case Name + clientObject.name = name + + # To Solve + clientObject.to_solve = to_solve + + # Analysis Type + clientObject.analysis_type = AnalysisType.ANALYSIS_TYPE_STATIC.name + clientObject.static_analysis_settings = analysis_settings_no + + # Action Category + clientObject.action_category = action_category + + # Self-weight Considerations + clientObject.self_weight_active = self_weight[0] + if not isinstance(self_weight[0], bool): + raise Exception('WARNING: Entry at index 0 of Self-Weight parameter to be of type bool') + if self_weight[0]: + if len(self_weight) != 4: + raise Exception('WARNING: Self-weight is activated and therefore requires a list definition of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.self_weight_factor_x = self_weight[1] + clientObject.self_weight_factor_y = self_weight[2] + clientObject.self_weight_factor_z = self_weight[3] + else: + if len(self_weight) != 1: + raise Exception('WARNING: Self-weight is deactivated and therefore requires a list definition of length 1. Kindly check list inputs for completeness and correctness.') + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Case to client model + Model.clientModel.service.set_load_case(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/loadCombination.py b/docs/RFEM/LoadCasesAndCombinations/loadCombination.py new file mode 100644 index 00000000..ab89d363 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/loadCombination.py @@ -0,0 +1,96 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import AnalysisType + +class LoadCombination(): + def __init__(self, + no: int = 1, + analysis_type = AnalysisType.ANALYSIS_TYPE_STATIC, + design_situation: int = 1, + user_defined_name = [False], + static_analysis_settings: int = 1, + consider_imperfection: bool = False, + consider_initial_state: bool = False, + structure_modification: bool = False, + to_solve: bool = True, + combination_items = [[1.5, 1, 0, False]], + comment: str = '', + params: dict = {}): + + # Client model | Load Combination + clientObject = Model.clientModel.factory.create('ns0:load_combination') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Load Combination No. + clientObject.no = no + + # Analysis Type + clientObject.analysis_type = analysis_type.name + + # Design Situation Assignment + clientObject.design_situation = design_situation + + # Combination Name + clientObject.user_defined_name_enabled = user_defined_name[0] + if user_defined_name[0]: + clientObject.name = user_defined_name[1] + + # Analysis Settings Assignment + clientObject.static_analysis_settings = static_analysis_settings + + # Consider Imperfection Options + clientObject.consider_imperfection = consider_imperfection + + # Consider Initial State + clientObject.consider_initial_state = consider_initial_state + + # Structure Modification Enable + clientObject.structure_modification_enabled = structure_modification + + # Decide to Solve + clientObject.to_solve = to_solve + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Items + clientObject.items = Model.clientModel.factory.create('ns0:load_combination.items') + + for i,j in enumerate(combination_items): + mlvlp = Model.clientModel.factory.create('ns0:load_combination_items') + mlvlp.no = i+1 + mlvlp.factor = combination_items[i][0] + mlvlp.load_case = combination_items[i][1] + mlvlp.action = combination_items[i][2] + mlvlp.is_leading = combination_items[i][3] + mlvlp.gamma=0 + mlvlp.psi=0 + mlvlp.xi=0 + mlvlp.k_fi=0 + mlvlp.c_esl=0 + mlvlp.k_def=0 + mlvlp.psi_0=0 + mlvlp.psi_1=0 + mlvlp.psi_2=0 + mlvlp.fi=0 + mlvlp.gamma_0=0 + mlvlp.alfa=0 + mlvlp.k_f=0 + mlvlp.phi=0 + mlvlp.rho=0 + mlvlp.omega_0=0 + mlvlp.gamma_l_1=0 + mlvlp.k_creep=0 + mlvlp.shift=0 + mlvlp.amplitude_function_type = "CONSTANT" + + + clientObject.items.load_combination_items.append(mlvlp) + + # Add Load Combination to client model + Model.clientModel.service.set_load_combination(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/modalAnalysisSettings.py b/docs/RFEM/LoadCasesAndCombinations/modalAnalysisSettings.py new file mode 100644 index 00000000..b3bbae34 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/modalAnalysisSettings.py @@ -0,0 +1,77 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import ModalSolutionMethod, ModalMassConversionType, ModalMassMatrixType, ModalNeglectMasses + +class ModalAnalysisSettings(): + def __init__(self, + no: int = 1, + name: str = 'Modal Analysis Settings', + solution_method = ModalSolutionMethod.METHOD_LANCZOS, + mass_conversion_type = ModalMassConversionType.MASS_CONVERSION_TYPE_Z_COMPONENTS_OF_LOADS, + mass_matrix_type = ModalMassMatrixType.MASS_MATRIX_TYPE_CONSISTENT, + number_of_modes : int = 4, + acting_masses = [], + neglect_masses = ModalNeglectMasses.E_NEGLECT_MASSES_NO_NEGLECTION, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Setting Tag + name (str): Setting Name + solution_method (enum): Solution Method Enumeration + mass_conversion_type (enum): Mass Conversion Type Enumeration + mass_matrix_type (enum): Mass Matrix Type Enumeration + number_of_modes (int): Number of Modes + acting_masses (list): Acting Masses Directions List + neglect_masses (enum): Neglect Masses Enumeration + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:modal_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Analysis Type + clientObject.solution_method = solution_method.name + + # Mass Conversion Type + clientObject.mass_conversion_type = mass_conversion_type.name + + # Mass Matrix Type + clientObject.mass_matrix_type = mass_matrix_type.name + + # Number of Modes + clientObject.number_of_modes_method = "NUMBER_OF_MODES_METHOD_USER_DEFINED" + clientObject.number_of_modes = number_of_modes + + # Acting Masses + if len(acting_masses) == 6: + clientObject.acting_masses_about_axis_x_enabled = acting_masses[0] + clientObject.acting_masses_about_axis_y_enabled = acting_masses[1] + clientObject.acting_masses_about_axis_z_enabled = acting_masses[2] + clientObject.acting_masses_in_direction_x_enabled = acting_masses[3] + clientObject.acting_masses_in_direction_y_enabled = acting_masses[4] + clientObject.acting_masses_in_direction_z_enabled = acting_masses[5] + else: + raise Exception('WARNING: The acting masses array needs to be of length 6. Kindly check list inputs for completeness and correctness.') + + # Neglect Masses + clientObject.neglect_masses = neglect_masses.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Static Analysis Settings to client model + Model.clientModel.service.set_modal_analysis_settings(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/resultCombination.py b/docs/RFEM/LoadCasesAndCombinations/resultCombination.py new file mode 100644 index 00000000..4428fab8 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/resultCombination.py @@ -0,0 +1,33 @@ +from RFEM.initModel import Model, clearAtributes + +class ResultCombination(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Result Combination Tag + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Result Combination + clientObject = Model.clientModel.factory.create('ns0:result_combination') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Result Combination No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Result Combination to client model + Model.clientModel.service.set_result_combination(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/spectralAnalysisSettings.py b/docs/RFEM/LoadCasesAndCombinations/spectralAnalysisSettings.py new file mode 100644 index 00000000..77102190 --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/spectralAnalysisSettings.py @@ -0,0 +1,82 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import DirectionalComponentCombinationRule, PeriodicResponseCombinationRule, CqsDampingRule + +class SpectralAnalysisSettings(): + def __init__(self, + no: int = 1, + name: str = 'SRSS | SRSS', + periodic_combination = PeriodicResponseCombinationRule.SRSS, + directional_combination = DirectionalComponentCombinationRule.SRSS, + equivalent_linear_combination : bool = False, + save_mode_results : bool = False, + signed_dominant_mode_results : bool = False, + directional_component_scale_value : float = 0.3, + damping_for_cqc_rule = CqsDampingRule.CONSTANT_FOR_EACH_MODE, + constant_d_for_each_mode: float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Sprectral Analysis Settings Tag + name (str): Sprectral Analysis Settings Name + periodic_combination (enum): Periodic Combination Rule Enumeration + directional_combination (enum): Directional Component Combination Rule Enumeration + equivalent_linear_combination (bool): Equivalent Linear Combination Boolean + save_mode_results (bool): Save Mode Results Boolean + signed_dominant_mode_results (bool): Signed Dominant Mode Results Boolean + directional_component_scale_value (float): Directional Component Scale Value + damping_for_cqc_rule (enum): Cqs Damping Rule Enumeration + constant_d_for_each_mode (float): Constant d for Each Mode + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:spectral_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + clientObject.name = name + clientObject.user_defined_name_enabled = True + + # Periodic Combination + clientObject.combination_rule_for_periodic_responses = periodic_combination.name + + # Directional Component + clientObject.combination_rule_for_directional_components = directional_combination.name + + # Equivalent Linear Combination + clientObject.use_equivalent_linear_combination = equivalent_linear_combination + + # Save Results of All Selected Modes + clientObject.save_results_of_all_selected_modes = save_mode_results + + # Signed Results Using Dominant Mode + clientObject.signed_results_using_dominant_mode = signed_dominant_mode_results + + if signed_dominant_mode_results: + if directional_combination != DirectionalComponentCombinationRule.SCALED_SUM: + raise Exception("WARNING: Signed results using dominant mode is only available with Scaled Sum Directional Combination.") + + # Further Options + if directional_combination == DirectionalComponentCombinationRule.SCALED_SUM: + clientObject.combination_rule_for_directional_components_value = directional_component_scale_value + + if periodic_combination == PeriodicResponseCombinationRule.CQC: + clientObject.damping_for_cqc_rule = damping_for_cqc_rule.name + clientObject.constant_d_for_each_mode = constant_d_for_each_mode + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + # Add Static Analysis Settings to client model + Model.clientModel.service.set_spectral_analysis_settings(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/stabilityAnalysisSettings.py b/docs/RFEM/LoadCasesAndCombinations/stabilityAnalysisSettings.py new file mode 100644 index 00000000..529cedcb --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/stabilityAnalysisSettings.py @@ -0,0 +1,396 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import StabilityAnalysisSettingsAnalysisType +from RFEM.enums import StabilityAnalysisSettingsEigenvalueMethod +from RFEM.enums import StabilityAnalysisSettingsMatrixType + +class StabilityAnalysisSettings(): + def __init__(self, + no: int = 1, + name: str = None, + comment: str = '', + params: dict = {}): + ''' + Args: + no (int): Stability Analysis Setting Tag + name (str): Stability Analysis Setting Name + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Stability Analysis Settings + clientObject = Model.clientModel.factory.create('ns0:stability_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Stability Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Stability Analysis Type + clientObject.analysis_type = StabilityAnalysisSettingsAnalysisType.EIGENVALUE_METHOD.name + + # Number of Lowest Eigenvalues + clientObject.number_of_lowest_eigenvalues = 4 + + # Eigenvalue Method + clientObject.eigenvalue_method = StabilityAnalysisSettingsEigenvalueMethod.EIGENVALUE_METHOD_LANCZOS.name + + # Matrix Type + clientObject.matrix_type = StabilityAnalysisSettingsMatrixType.MATRIX_TYPE_STANDARD.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Stability Analysis Settings to client model + Model.clientModel.service.set_stability_analysis_settings(clientObject) + + def EigenvalueMethod(self, + no: int = 1, + name: str = None, + number_of_lowest_eigenvalues: int = 4, + considered_favored_effect: bool = True, + critical_load_factor = None, + minimum_initial_strain = 1e-05, + local_torsional_rotations = None, + eigenvalue_method = StabilityAnalysisSettingsEigenvalueMethod.EIGENVALUE_METHOD_LANCZOS, + matrix_type = StabilityAnalysisSettingsMatrixType.MATRIX_TYPE_STANDARD, + comment: str = '', + params: dict = {}): + ''' + Args: + no (int): Stability Analysis Setting Tag + name (str, optional): Stability Analysis Setting Name + number_of_lowest_eigenvalues (int): Number of Lowest Eigenvalues + considered_favored_effect (bool): Considered Favored Effect + critical_load_factor (int, optional): + for find_eigenvectors_beyond_critical_load_factor == False: + critical_load_factor = None + for find_eigenvectors_beyond_critical_load_factor == True: + critical_load_factor = int + minimum_initial_strain (optional): + for minimum initial strain application: + minimum_initial_strain != 0 or minimum_initial_strain is not None + for no minimum initial strain application: + minimum_initial_strain == 0 or minimum_initial_strain is None + local_torsional_rotations (optional): + for no local torsional rotations display: + local_torsional_rotations = None + for local torsional rotations display: + local_torsional_rotations = double + eigenvalue_method (enum): Eigenvalue Method Enumeration + matrix_type (enum): Matrix Type Enumeration + comment (str, optional): + params (dict, optional): + ''' + # Client model | Stability Analysis Settings + clientObject = Model.clientModel.factory.create('ns0:stability_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Stability Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Stability Analysis Type + clientObject.analysis_type = StabilityAnalysisSettingsAnalysisType.EIGENVALUE_METHOD.name + + # Number of Lowest Eigenvalues + clientObject.number_of_lowest_eigenvalues = number_of_lowest_eigenvalues + + # Considered Favored Effect + clientObject.considered_favored_effect = considered_favored_effect + + # Finding Eigenvectors Beyond Critical Load Factor + if critical_load_factor is not None: + clientObject.find_eigenvectors_beyond_critical_load_factor = True + clientObject.critical_load_factor = critical_load_factor + + # Minimum Initial Strain + if minimum_initial_strain in (None, 0): + clientObject.activate_minimum_initial_prestress = False + else: + clientObject.activate_minimum_initial_prestress = True + clientObject.minimum_initial_strain = minimum_initial_strain + + # Local Torsional Relations + if local_torsional_rotations is not None: + clientObject.display_local_torsional_rotations = True + + # Eigenvalue Method + clientObject.eigenvalue_method = eigenvalue_method.name + + # Matrix Type + clientObject.matrix_type = matrix_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Stability Analysis Settings to client model + Model.clientModel.service.set_stability_analysis_settings(clientObject) + + def IncrementalyMethodWithEigenvalue(self, + no: int = 1, + name: str = None, + number_of_lowest_eigenvalues: int = 4, + considered_favored_effect: bool = True, + critical_load_factor = None, + minimum_initial_strain = 1e-05, + local_torsional_rotations = None, + incrementally_increasing_loading = [1.0, 0.1, 10, 100], + stopping_of_load_increasing = None, + save_results_of_all_increments: bool = False, + eigenvalue_method = StabilityAnalysisSettingsEigenvalueMethod.EIGENVALUE_METHOD_LANCZOS, + matrix_type = StabilityAnalysisSettingsMatrixType.MATRIX_TYPE_STANDARD, + comment: str = '', + params: dict = {}): + ''' + Args: + no (int): Stability Analysis Setting Tag + name (str, optional): Stability Analysis Setting Name + number_of_lowest_eigenvalues (int): Number of Lowest Eigenvalues + considered_favored_effect (bool): Considered Favored Effect + critical_load_factor (int, optional): + for find_eigenvectors_beyond_critical_load_factor == False: + critical_load_factor = None + for find_eigenvectors_beyond_critical_load_factor == True: + critical_load_factor = int + minimum_initial_strain (optional): + for minimum initial strain application: + minimum_initial_strain != 0 or minimum_initial_strain is not None + for no minimum initial strain application: + minimum_initial_strain is None + local_torsional_rotations (optional): + for no local torsional rotations display: + local_torsional_rotations = None + for local torsional rotations display: + local_torsional_rotations = double + incrementally_increasing_loading (list): [initial_load_factor, load_factor_increment, refinement_of_the_last_load_increment, maximum_number_of_load_increments] + stopping_of_load_increasing (list, optional): + for stopping of load increasing deactivated: + stopping_of_load_increasing = None + for result u: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U, limit_result_displacement, limit_node] + for result uX: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_X, limit_result_displacement, limit_node] + for result uY: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_Y, limit_result_displacement, limit_node] + for result uZ: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_Z, limit_result_displacement, limit_node] + for result phi: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI, limit_result_rotation, limit_node] + for result phiX: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_X, limit_result_rotation, limit_node] + for result phiY: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_Y, limit_result_rotation, limit_node] + for result phiZ: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_Z, limit_result_rotation, limit_node] + save_results_of_all_increments (bool, optional): Save Results of All Increments + eigenvalue_method (enum): Eigenvalue Method Enumeration + matrix_type (enum): Matrix Type Enumeration + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + # Client model | Stability Analysis Settings + clientObject = Model.clientModel.factory.create('ns0:stability_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Stability Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Stability Analysis Type + clientObject.analysis_type = StabilityAnalysisSettingsAnalysisType.INCREMENTALY_METHOD_WITH_EIGENVALUE.name + + # Number of Lowest Eigenvalues + clientObject.number_of_lowest_eigenvalues = number_of_lowest_eigenvalues + + # Considered Favored Effect + clientObject.considered_favored_effect = considered_favored_effect + + # Finding Eigenvectors Beyond Critical Load Factor + if critical_load_factor is not None: + clientObject.find_eigenvectors_beyond_critical_load_factor = True + clientObject.critical_load_factor = critical_load_factor + + # Minimum Initial Strain + if minimum_initial_strain in (None, 0): + clientObject.activate_minimum_initial_prestress = False + else: + clientObject.activate_minimum_initial_prestress = True + clientObject.minimum_initial_strain = minimum_initial_strain + + # Local Torsional Relations + if local_torsional_rotations is not None: + clientObject.display_local_torsional_rotations = True + + # Increase Loading + if len(incrementally_increasing_loading) != 4: + raise Exception('WARNING: The incrementally increasing loading parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.initial_load_factor = incrementally_increasing_loading[0] + clientObject.load_factor_increment = incrementally_increasing_loading[1] + clientObject.refinement_of_the_last_load_increment = incrementally_increasing_loading[2] + clientObject.maximum_number_of_load_increments = incrementally_increasing_loading[3] + + # Stopping of Load-Increasing + if stopping_of_load_increasing is not None: + if len(stopping_of_load_increasing) != 3: + raise Exception('WARNING: For active stopping of load-increasing, the stopping of load increasing parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.activate_stopping_of_load_increasing = True + clientObject.stopping_of_load_increasing_result = stopping_of_load_increasing[0].name + if stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_X' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_Y' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_Z': + clientObject.stopping_of_load_increasing_limit_result_displacement = stopping_of_load_increasing[1] + elif stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_X' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_Y' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_Z': + clientObject.stopping_of_load_increasing_limit_result_rotation = stopping_of_load_increasing[1] + clientObject.stopping_of_load_increasing_limit_node = stopping_of_load_increasing[2] + + # Save Results of All Increments + clientObject.save_results_of_all_increments = save_results_of_all_increments + + # Eigenvalue Method + clientObject.eigenvalue_method = eigenvalue_method.name + + # Matrix Type + clientObject.matrix_type = matrix_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Stability Analysis Settings to client model + Model.clientModel.service.set_stability_analysis_settings(clientObject) + + def IncrementalyMethodWithoutEigenvalue(self, + no: int = 1, + name: str = None, + minimum_initial_strain = 1e-05, + local_torsional_rotations = None, + incrementally_increasing_loading = [1.0, 0.1, 10, 100], + stopping_of_load_increasing = None, + save_results_of_all_increments: bool = False, + comment: str = '', + params: dict = {}): + ''' + Args: + no (int): Stability Analysis Setting Tag + name (str, optional): Stability Analysis Setting Name + minimum_initial_strain (optional): + for minimum initial strain application: + minimum_initial_strain != 0 or minimum_initial_strain is not None + for no minimum initial strain application: + minimum_initial_strain == 0 or minimum_initial_strain is None + local_torsional_rotations (optional): + for no local torsional rotations display: + local_torsional_rotations = None + for local torsional rotations display: + local_torsional_rotations = double + incrementally_increasing_loading (list): [initial_load_factor, load_factor_increment, refinement_of_the_last_load_increment, maximum_number_of_load_increments] + stopping_of_load_increasing (list, optional): + for stopping of load increasing deactivated: + stopping_of_load_increasing = None + for result u: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U, limit_result_displacement, limit_node] + for result uX: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_X, limit_result_displacement, limit_node] + for result uY: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_Y, limit_result_displacement, limit_node] + for result uZ: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_DISPLACEMENT_U_Z, limit_result_displacement, limit_node] + for result phi: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI, limit_result_rotation, limit_node] + for result phiX: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_X, limit_result_rotation, limit_node] + for result phiY: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_Y, limit_result_rotation, limit_node] + for result phiZ: + stopping_of_load_increasing = [StabilityAnalysisSettingsStoppingOfLoadIncreasingResult.RESULT_TYPE_ROTATION_PHI_Z, limit_result_rotation, limit_node] + save_results_of_all_increments (bool, optional): Save Results of All Increments + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + # Client model | Stability Analysis Settings + clientObject = Model.clientModel.factory.create('ns0:stability_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Stability Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Stability Analysis Type + clientObject.analysis_type = StabilityAnalysisSettingsAnalysisType.INCREMENTALY_METHOD_WITHOUT_EIGENVALUE.name + + # Minimum Initial Strain + if minimum_initial_strain in (None, 0): + clientObject.activate_minimum_initial_prestress = False + else: + clientObject.activate_minimum_initial_prestress = True + clientObject.minimum_initial_strain = minimum_initial_strain + + # Local Torsional Relations + if local_torsional_rotations is not None: + clientObject.display_local_torsional_rotations = True + + # Increase Loading + if len(incrementally_increasing_loading) != 4: + raise Exception('WARNING: The incrementally increasing loading parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.initial_load_factor = incrementally_increasing_loading[0] + clientObject.load_factor_increment = incrementally_increasing_loading[1] + clientObject.refinement_of_the_last_load_increment = incrementally_increasing_loading[2] + clientObject.maximum_number_of_load_increments = incrementally_increasing_loading[3] + + # Stopping of Load-Increasing + if stopping_of_load_increasing is not None: + if len(stopping_of_load_increasing) != 3: + raise Exception('WARNING: For active stopping of load-increasing, the stopping of load increasing parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.activate_stopping_of_load_increasing = True + clientObject.stopping_of_load_increasing_result = stopping_of_load_increasing[0].name + if stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_X' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_Y' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_DISPLACEMENT_U_Z': + clientObject.stopping_of_load_increasing_limit_result_displacement = stopping_of_load_increasing[1] + elif stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_X' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_Y' or stopping_of_load_increasing[0].name == 'RESULT_TYPE_ROTATION_PHI_Z': + clientObject.stopping_of_load_increasing_limit_result_rotation = stopping_of_load_increasing[1] + clientObject.stopping_of_load_increasing_limit_node = stopping_of_load_increasing[2] + + # Save Results of All Increments + clientObject.save_results_of_all_increments = save_results_of_all_increments + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Stability Analysis Settings to client model + Model.clientModel.service.set_stability_analysis_settings(clientObject) diff --git a/docs/RFEM/LoadCasesAndCombinations/staticAnalysisSettings.py b/docs/RFEM/LoadCasesAndCombinations/staticAnalysisSettings.py new file mode 100644 index 00000000..3e2cabdc --- /dev/null +++ b/docs/RFEM/LoadCasesAndCombinations/staticAnalysisSettings.py @@ -0,0 +1,493 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import StaticAnalysisSettingsIterativeMethodForNonlinearAnalysis +from RFEM.enums import StaticAnalysisSettingsMethodOfEquationSystem +from RFEM.enums import StaticAnalysisSettingsPlateBendingTheory, StaticAnalysisType + +class StaticAnalysisSettings(): + def __init__(self, + no: int = 1, + name: str = None, + analysis_type=StaticAnalysisType.GEOMETRICALLY_LINEAR, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Static Analysis Setting Tag + name (str): Static Analysis Setting Name + analysis_type (enum): Analysis Type Enumeration + comment (str): Comments + params (dict): Parameters + """ + # Client model | Surface + clientObject = Model.clientModel.factory.create('ns0:static_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Analysis Type + clientObject.analysis_type = analysis_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Static Analysis Settings to client model + Model.clientModel.service.set_static_analysis_settings(clientObject) + + def GeometricallyLinear(self, + no: int = 1, + name: str = None, + load_modification = [False, 1, False], + bourdon_effect: bool = False, + nonsymmetric_direct_solver: bool = False, + method_of_equation_system = StaticAnalysisSettingsMethodOfEquationSystem.METHOD_OF_EQUATION_SYSTEM_DIRECT, + plate_bending_theory = StaticAnalysisSettingsPlateBendingTheory.PLATE_BENDING_THEORY_MINDLIN, + mass_conversion = [False, 0, 0, 0], + comment: str = '', + params: dict = {}): + + """ + Args: + no (int): Static Analysis Setting Tag + name (str, optional): Static Analysis Setting Name + load_modification (list, optional): Load Modification Parameters + load_modification = [loading_by_multiplier_factor, multiplier_factor, dividing_results] + bourdon_effect (bool, optional): Bourdon Effect Boolean + nonsymmetric_direct_solver (bool, optional): Nonsymmetric Direct Solver Boolean + method_of_equation_system (enum): Static Analysis Settings Method of Equation System Enumeration + plate_bending_theory (enum): Static Analysis Settings Plate Bending Theory Enumeration + mass_conversion (list, optional): Mass Conversion Parameters + mass_conversion = [mass_conversion_enabled, mass_conversion_factor_in_direction_x, mass_conversion_factor_in_direction_y, mass_conversion_factor_in_direction_z] + comment (str, optional): + params (dict, optional): + """ + + # Client model + clientObject = Model.clientModel.factory.create('ns0:static_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Static Analysis Type + clientObject.analysis_type = StaticAnalysisType.GEOMETRICALLY_LINEAR.name + + # Bourdon Effect Displacement + clientObject.displacements_due_to_bourdon_effect = bourdon_effect + + # Nonsymetric Direct Solver + clientObject.nonsymmetric_direct_solver = nonsymmetric_direct_solver + + # Equation System + clientObject.method_of_equation_system = method_of_equation_system.name + + # Plate Bending Theory + clientObject.plate_bending_theory = plate_bending_theory.name + # Load Modification + if len(load_modification) != 3: + raise Exception('WARNING: The load modification parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + + # if type(load_modification[0]) != bool : + # raise Exception ('WARNING: Load multiplier factor parameter at index 0 to be of type "int"') + # if type(load_modification[1]) != int : + # raise Exception ('WARNING: Multiplier factor parameter at index 1 to be of type "int"') + # if type(load_modification[2]) != bool : + # raise Exception ('WARNING: Dividing results parameter at index 2 to be of type "bool"') + + if load_modification[0]: + clientObject.modify_loading_by_multiplier_factor = True + clientObject.loading_multiplier_factor = load_modification[1] + clientObject.divide_results_by_loading_factor = load_modification[2] + + # mass_conversion_enabled = mass_conversion[0] + # mass_conversion_factor_in_direction_x = mass_conversion[1] + # mass_conversion_factor_in_direction_y = mass_conversion[2] + # mass_conversion_factor_in_direction_z = mass_conversion[3] + + # mass_conversion_factor_in_direction_x = float + # mass_conversion_acceleration_in_direction_y = float + # mass_conversion_acceleration_in_direction_z = float + + # Mass Conversion + if len(mass_conversion) != 4: + raise Exception('WARNING: The mass conversion parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + # if type(mass_conversion[0]) != bool : + # raise Exception ('WARNING: Enabling the mass conversion at index 0 has to be of type "bool"') + # if type(mass_conversion[1]) != float or type(mass_conversion[1]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction x at index 1 has to be of type "float" or "int"') + # if type(mass_conversion[2]) != float or type(mass_conversion[2]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction y at index 2 has to be of type "float" or "int"') + # if type(mass_conversion[3]) != float or type(mass_conversion[3]) != int : + # raise Exception ('WARNING: Mass conversion factor in direction z at index 3 has to be of type "float" or "int"') + + clientObject.mass_conversion_enabled = mass_conversion[0] + if mass_conversion[0]: + clientObject.mass_conversion_factor_in_direction_x = mass_conversion[1] + clientObject.mass_conversion_factor_in_direction_y = mass_conversion[2] + clientObject.mass_conversion_factor_in_direction_z = mass_conversion[3] + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Static Analysis Settings to client model + Model.clientModel.service.set_static_analysis_settings(clientObject) + + def LargeDeformation(self, + no: int = 1, + name: str = None, + iterative_method = StaticAnalysisSettingsIterativeMethodForNonlinearAnalysis.NEWTON_RAPHSON, + standard_precision_and_tolerance_settings = [False, 1.0, 1.0, 1.0], + control_nonlinear_analysis = [100, 1], + load_modification = [False, 1, False], + instabil_structure_calculation : bool = True, + bourdon_effect: bool = True, + nonsymmetric_direct_solver: bool = True, + method_of_equation_system = StaticAnalysisSettingsMethodOfEquationSystem.METHOD_OF_EQUATION_SYSTEM_DIRECT, + plate_bending_theory = StaticAnalysisSettingsPlateBendingTheory.PLATE_BENDING_THEORY_MINDLIN, + mass_conversion = [False, 0, 0, 1], + comment: str = '', + params: dict = {}): + + """ + Args: + no (int): Static Analysis Setting Tag + name (str, optional): Static Analysis Setting Name + iterative_method (enum): Static Analysis Settings Iterative Method for Non-linear Analysis Enumeration + standard_precision_and_tolerance_settings (list, optional): [standard_precision_and_tolerance_settings_enabled, precision_of_convergence_criteria_for_nonlinear_calculation, tolerance_for_detection_of_instability, robustness_of_iterative_calculation] + control_nonlinear_analysis (list): [max_number_of_iterations, number_of_load_increments] + for iterative_method == "NEWTON_RAPHSON" or iterative_method.name == "NEWTON_RAPHSON_COMBINED_WITH_PICARD" or iterative_method.name == "PICARD" or iterative_method.name == "NEWTON_RAPHSON_WITH_POSTCRITICAL_ANALYSIS": + control_nonlinear_analysis = [max_number_of_iterations = int, number_of_load_increments = int] + for iterative_method == "DYNAMIC_RELAXATION": + control_nonlinear_analysis = [max_number_of_iterations = None, number_of_load_increments = None] + load_modification (list, optional): Load Modification Parameters + load_modification = [loading_by_multiplier_factor, multiplier_factor, dividing_results] + instabil_structure_calculation (bool, optional): Instabil Structure Calculation Boolean + bourdon_effect (bool, optional): Bourdon Effect Boolean + nonsymmetric_direct_solver (bool, optional): Nonsymmetric Direct Solver Boolean + method_of_equation_system (enum): Static Analysis Settings Method of Equation System Enumeration + plate_bending_theory (enum): Static Analysis Settings Plate Bending Theory Enumeration + mass_conversion (list, optional): Mass Conversion Parameters + mass_conversion = [mass_conversion_enabled, mass_conversion_factor_in_direction_x, mass_conversion_factor_in_direction_y, mass_conversion_factor_in_direction_z] + comment (str, optional): Comments + params (dict, optional): Parameters + """ + + # Client model + clientObject = Model.clientModel.factory.create('ns0:static_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Static Analysis Type + clientObject.analysis_type = StaticAnalysisType.LARGE_DEFORMATIONS.name + + # Iterative Method + clientObject.iterative_method_for_nonlinear_analysis = iterative_method.name + # not used anywhere + #if iterative_method.name == "NEWTON_RAPHSON" or iterative_method.name == "NEWTON_RAPHSON_COMBINED_WITH_PICARD" or iterative_method.name == "PICARD" or iterative_method.name == "NEWTON_RAPHSON_WITH_POSTCRITICAL_ANALYSIS": + # max_number_of_iterations = int + # number_of_load_increments = int + #elif iterative_method.name == "DYNAMIC_RELAXATION": + # max_number_of_iterations = None + # number_of_load_increments = None + + # Standard Precision and Tolerance + # if standard_precision_and_tolerance_settings_enabled != False: + # clientObject.precision_of_convergence_criteria_for_nonlinear_calculation = float + # clientObject.instability_detection_tolerance = float + # clientObject.iterative_calculation_robustness = float + if len(standard_precision_and_tolerance_settings) != 4: + raise Exception('WARNING: The standard precision and tolerance settings parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + + if not isinstance(standard_precision_and_tolerance_settings[0], bool): + raise Exception ('WARNING: Enabling the standard precision and tolerance settings at index 0 to be of type "bool"') + # if type(standard_precision_and_tolerance_settings[1]) != float or type(standard_precision_and_tolerance_settings[1]) != int: + # raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculation factor at index 1 to be of type "float" or "int"') + # if type(standard_precision_and_tolerance_settings[2]) != float or type(standard_precision_and_tolerance_settings[2]) != int: + # raise Exception ('WARNING: Tolerance for detection of instability factor at index 2 to be of type "float" or "int"') + # if type(standard_precision_and_tolerance_settings[3]) != float or type(standard_precision_and_tolerance_settings[3]) != int: + # raise Exception ('WARNING: Robustness of iterative calculation factor at index 3 to be of type "float" or "int"') + + # while not float(standard_precision_and_tolerance_settings[1]) or not int(standard_precision_and_tolerance_settings[1]) in range(0.01,100): + # raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculations at index 1 is out of range. Input has to be in the range [0.01 ... 100].') + + # while not float(standard_precision_and_tolerance_settings[2]) or not int(standard_precision_and_tolerance_settings[2]) in range(0.01,100): + # raise Exception ('WARNING: Tolerance for detection of instability at index 2 is out of range. Input has to be in the range [0.01 ... 100].') + + # while not float(standard_precision_and_tolerance_settings[3]) or not int(standard_precision_and_tolerance_settings[3]) in range(1.00,100): + # raise Exception ('WARNING: Robustness of iterative calculation at index 3 is out of range. Input has to be in the range [1.00 ... 100].') + if standard_precision_and_tolerance_settings[0]: + clientObject.standard_precision_and_tolerance_settings_enabled = True + clientObject.precision_of_convergence_criteria_for_nonlinear_calculation = standard_precision_and_tolerance_settings[1] + clientObject.instability_detection_tolerance = standard_precision_and_tolerance_settings[2] + clientObject.iterative_calculation_robustness = standard_precision_and_tolerance_settings[3] + + # Control nonlinear Analysis + if len(control_nonlinear_analysis) != 2: + raise Exception('WARNING: The nonlinear analysis control parameter needs to be of length 2. Kindly check list inputs for completeness and correctness.') + + if not isinstance(control_nonlinear_analysis[0],int): + raise Exception ('WARNING: Enabling the standard precision and tolerance settings at index 0 has to be of type "int"') + if not isinstance(control_nonlinear_analysis[1], int): + raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculation factor at index 1 has to be of type "int"') + + clientObject.max_number_of_iterations = control_nonlinear_analysis[0] + clientObject.number_of_load_increments = control_nonlinear_analysis[1] + ## Load Modification + if len(load_modification) != 3: + raise Exception('WARNING: The load modification parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + + # if type(load_modification[0]) != bool : + # raise Exception ('WARNING: Load multiplier factor parameter at index 0 to be of type "int"') + # if type(load_modification[1]) != int : + # raise Exception ('WARNING: Multiplier factor parameter at index 1 to be of type "int"') + # if type(load_modification[2]) != bool : + # raise Exception ('WARNING: Dividing results parameter at index 2 to be of type "bool"') + + if load_modification[0]: + clientObject.modify_loading_by_multiplier_factor = True + clientObject.loading_multiplier_factor = load_modification[1] + clientObject.divide_results_by_loading_factor = load_modification[2] + + # Instabil Structure + clientObject.try_to_calculate_instabil_structure = instabil_structure_calculation + + # Bourdon Effect Displacement + clientObject.displacements_due_to_bourdon_effect = bourdon_effect + + # Nonsymetric Direct Solver + clientObject.nonsymmetric_direct_solver = nonsymmetric_direct_solver + + # Equation System + clientObject.method_of_equation_system = method_of_equation_system.name + + # Plate Bending Theory + clientObject.plate_bending_theory = plate_bending_theory.name + + # Mass Conversion + if len(mass_conversion) != 4: + raise Exception('WARNING: The mass conversion parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + # if type(mass_conversion[0]) != bool : + # raise Exception ('WARNING: Enabling the mass conversion at index 0 has to be of type "bool"') + # if type(mass_conversion[1]) != float or type(mass_conversion[1]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction x at index 1 has to be of type "float" or "int"') + # if type(mass_conversion[2]) != float or type(mass_conversion[2]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction y at index 2 has to be of type "float" or "int"') + # if type(mass_conversion[3]) != float or type(mass_conversion[3]) != int : + # raise Exception ('WARNING: Mass conversion factor in direction z at index 3 has to be of type "float" or "int"') + + clientObject.mass_conversion_enabled = mass_conversion[0] + if mass_conversion[0]: + clientObject.mass_conversion_factor_in_direction_x = mass_conversion[1] + clientObject.mass_conversion_factor_in_direction_y = mass_conversion[2] + clientObject.mass_conversion_factor_in_direction_z = mass_conversion[3] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Static Analysis Settings to client model + Model.clientModel.service.set_static_analysis_settings(clientObject) + + def SecondOrderPDelta(self, + no: int = 1, + name: str = None, + iterative_method = StaticAnalysisSettingsIterativeMethodForNonlinearAnalysis.NEWTON_RAPHSON, + standard_precision_and_tolerance_settings = [False, 1.0, 1.0, 1.0], + control_nonlinear_analysis = [100, 1], + load_modification = [False, 0, False], + favorable_effect_due_to_tension_in_members : bool = False, + bourdon_effect: bool = True, + nonsymmetric_direct_solver: bool = True, + internal_forces_to_deformed_structure = [True, True, True, True], + method_of_equation_system = StaticAnalysisSettingsMethodOfEquationSystem.METHOD_OF_EQUATION_SYSTEM_DIRECT, + plate_bending_theory = StaticAnalysisSettingsPlateBendingTheory.PLATE_BENDING_THEORY_MINDLIN, + mass_conversion = [False, 0, 0, 1], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Static Analysis Setting Tag + name (str, optional): Static Analysis Setting Name + iterative_method (enum): Static Analysis Settings Iterative Method for Non-linear Analysis Enumeration + standard_precision_and_tolerance_settings (list, optional): [Standard Precision and Tolerance Settings List + standard_precision_and_tolerance_settings = [standard_precision_and_tolerance_settings_enabled, precision_of_convergence_criteria_for_nonlinear_calculation, tolerance_for_detection_of_instability, robustness_of_iterative_calculation] + control_nonlinear_analysis (list): Nonlinear Analysis Control Parameters + control_nonlinear_analysis = [max_number_of_iterations, number_of_load_increments] + favorable_effect_due_to_tension_in_members (bool, optional): Favorable Effect due to Tension In Members Boolean + bourdon_effect (bool, optional): Bourdon Effect Boolean + nonsymmetric_direct_solver (bool, optional): Nonsymmetric Direct Solver Boolean + internal_forces_to_deformed_structure (list, optional): Internal Forces to Deformed Structure List + internal_forces_to_deformed_structure = [refer_internal_forces_to_deformed_structure, internal_forces_to_deformed_structure_for_moments, internal_forces_to_deformed_structure_for_normal_forces, internal_forces_to_deformed_structure_for_shear_forces] + method_of_equation_system (enum): Static Analysis Settings Method of Equation System Enumeration + plate_bending_theory (enum): Static Analysis Settings Plate Bending Theory Enumeration + mass_conversion (list, optional): Mass Conversion Parameters + mass_conversion = [mass_conversion_enabled, mass_conversion_factor_in_direction_x, mass_conversion_factor_in_direction_y, mass_conversion_factor_in_direction_z] + comment (str, optional): + params (dict, optional): + """ + + # Client model + clientObject = Model.clientModel.factory.create('ns0:static_analysis_settings') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Static Analysis Settings No. + clientObject.no = no + + # Name + if name is not None: + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Static Analysis Type + clientObject.analysis_type = StaticAnalysisType.SECOND_ORDER_P_DELTA.name + + # Iterative Method + clientObject.iterative_method_for_nonlinear_analysis = iterative_method.name + + # Standard Precision and Tolerance + # if standard_precision_and_tolerance_settings_enabled != False: + # clientObject.precision_of_convergence_criteria_for_nonlinear_calculation = float + # clientObject.instability_detection_tolerance = float + # clientObject.iterative_calculation_robustness = float + if len(standard_precision_and_tolerance_settings) != 4: + raise Exception('WARNING: The standard precision and tolerance settings parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + + if not isinstance(standard_precision_and_tolerance_settings[0], bool): + raise Exception ('WARNING: Enabling the standard precision and tolerance settings at index 0 to be of type "bool"') + # if type(standard_precision_and_tolerance_settings[1]) != float or type(standard_precision_and_tolerance_settings[1]) != int: + # raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculation factor at index 1 to be of type "float" or "int"') + # if type(standard_precision_and_tolerance_settings[2]) != float or type(standard_precision_and_tolerance_settings[2]) != int: + # raise Exception ('WARNING: Tolerance for detection of instability factor at index 2 to be of type "float" or "int"') + # if type(standard_precision_and_tolerance_settings[3]) != float or type(standard_precision_and_tolerance_settings[3]) != int: + # raise Exception ('WARNING: Robustness of iterative calculation factor at index 3 to be of type "float" or "int"') + + # while not float(standard_precision_and_tolerance_settings[1]) or not int(standard_precision_and_tolerance_settings[1]) in range(0.01,100): + # raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculations at index 1 is out of range. Input has to be in the range [0.01 ... 100].') + + # while not float(standard_precision_and_tolerance_settings[2]) or not int(standard_precision_and_tolerance_settings[2]) in range(0.01,100): + # raise Exception ('WARNING: Tolerance for detection of instability at index 2 is out of range. Input has to be in the range [0.01 ... 100].') + + # while not float(standard_precision_and_tolerance_settings[3]) or not int(standard_precision_and_tolerance_settings[3]) in range(1.00,100): + # raise Exception ('WARNING: Robustness of iterative calculation at index 3 is out of range. Input has to be in the range [1.00 ... 100].') + if standard_precision_and_tolerance_settings[0]: + clientObject.standard_precision_and_tolerance_settings_enabled = True + clientObject.precision_of_convergence_criteria_for_nonlinear_calculation = standard_precision_and_tolerance_settings[1] + clientObject.instability_detection_tolerance = standard_precision_and_tolerance_settings[2] + clientObject.iterative_calculation_robustness = standard_precision_and_tolerance_settings[3] + + # Control nonlinear Analysis + if len(control_nonlinear_analysis) != 2: + raise Exception('WARNING: The nonlinear analysis control parameter needs to be of length 2. Kindly check list inputs for completeness and correctness.') + + if not isinstance(control_nonlinear_analysis[0], int): + raise Exception ('WARNING: Enabling the standard precision and tolerance settings at index 0 has to be of type "int"') + if not isinstance(control_nonlinear_analysis[1], int): + raise Exception ('WARNING: Precision of convergence criteria for nonlinear calculation factor at index 1 has to be of type "int"') + + clientObject.max_number_of_iterations = control_nonlinear_analysis[0] + clientObject.number_of_load_increments = control_nonlinear_analysis[1] + + ## Load Modification + if len(load_modification) != 3: + raise Exception('WARNING: The load modification parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + + # if type(load_modification[0]) != bool : + # raise Exception ('WARNING: Load multiplier factor parameter at index 0 to be of type "int"') + # if type(load_modification[1]) != int : + # raise Exception ('WARNING: Multiplier factor parameter at index 1 to be of type "int"') + # if type(load_modification[2]) != bool : + # raise Exception ('WARNING: Dividing results parameter at index 2 to be of type "bool"') + + if load_modification[0]: + clientObject.modify_loading_by_multiplier_factor = True + clientObject.loading_multiplier_factor = load_modification[1] + clientObject.divide_results_by_loading_factor = load_modification[2] + # Effect due to Tension in Members + clientObject.consider_favorable_effect_due_to_tension_in_members = favorable_effect_due_to_tension_in_members + # Bourdon Effect Displacement + clientObject.displacements_due_to_bourdon_effect = bourdon_effect + # Nonsymetric Direct Solver + clientObject.nonsymmetric_direct_solver = nonsymmetric_direct_solver + if len(internal_forces_to_deformed_structure) != 4: + raise Exception('WARNING: The internal forces to deformed structure parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + # if type(mass_conversion[0]) != bool : + # raise Exception ('WARNING: Refering internal forces to deformed structure at index 0 to be of type "bool"') + # if type(mass_conversion[1]) != bool : + # raise Exception ('WARNING: Internal forces to deformed structure for moments at index 1 to be of type "bool"') + # if type(mass_conversion[2]) != bool : + # raise Exception ('WARNING: Internal forces to deformed structure for normal forces at index 2 to be of type "bool"') + # if type(mass_conversion[3]) != bool : + # raise Exception ('WARNING: Internal forces to deformed structure for shear forces at index 3 to be of type "bool"') + # Internal Forces to Deformed Structure + if internal_forces_to_deformed_structure[0]: + clientObject.refer_internal_forces_to_deformed_structure = internal_forces_to_deformed_structure[0] + clientObject.refer_internal_forces_to_deformed_structure_for_moments = internal_forces_to_deformed_structure[1] + clientObject.refer_internal_forces_to_deformed_structure_for_normal_forces = internal_forces_to_deformed_structure[2] + clientObject.refer_internal_forces_to_deformed_structure_for_shear_forces = internal_forces_to_deformed_structure[3] + + # Equation System + clientObject.method_of_equation_system = method_of_equation_system.name + + # Plate Bending Theory + clientObject.plate_bending_theory = plate_bending_theory.name + + # Mass Conversion + if len(mass_conversion) != 4: + raise Exception('WARNING: The mass conversion parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + # if type(mass_conversion[0]) != bool : + # raise Exception ('WARNING: Enabling the mass conversion at index 0 has to be of type "bool"') + # if type(mass_conversion[1]) != float or type(mass_conversion[1]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction x at index 1 has to be of type "float" or "int"') + # if type(mass_conversion[2]) != float or type(mass_conversion[2]) != int: + # raise Exception ('WARNING: Mass conversion factor in direction y at index 2 has to be of type "float" or "int"') + # if type(mass_conversion[3]) != float or type(mass_conversion[3]) != int : + # raise Exception ('WARNING: Mass conversion factor in direction z at index 3 has to be of type "float" or "int"') + + clientObject.mass_conversion_enabled = mass_conversion[0] + if mass_conversion[0]: + clientObject.mass_conversion_factor_in_direction_x = mass_conversion[1] + clientObject.mass_conversion_factor_in_direction_y = mass_conversion[2] + clientObject.mass_conversion_factor_in_direction_z = mass_conversion[3] + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Static Analysis Settings to client model + Model.clientModel.service.set_static_analysis_settings(clientObject) diff --git a/docs/RFEM/Loads/__init__.py b/docs/RFEM/Loads/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/Loads/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/Loads/freeLoad.py b/docs/RFEM/Loads/freeLoad.py new file mode 100644 index 00000000..3812f214 --- /dev/null +++ b/docs/RFEM/Loads/freeLoad.py @@ -0,0 +1,616 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import FreeConcentratedLoadLoadType, FreeConcentratedLoadLoadDirection, FreeLoadLoadProjection +from RFEM.enums import FreeLineLoadLoadDistribution, FreeLineLoadLoadDirection, FreeRectangularLoadLoadDistribution +from RFEM.enums import FreeRectangularLoadLoadDirection, FreeRectangularLoadLoadLocationRectangle, FreeCircularLoadLoadDistribution +from RFEM.enums import FreeCircularLoadLoadDirection, FreePolygonLoadLoadDistribution, FreePolygonLoadLoadDirection +from math import pi + +class FreeLoad(): + + def ConcentratedLoad(self, + no: int = 1, + load_case_no: int = 1, + surfaces_no = '1', + load_type = FreeConcentratedLoadLoadType.LOAD_TYPE_FORCE, + load_projection = FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + load_direction = FreeConcentratedLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z, + load_parameter = [1000, 0, 0], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surfaces_no (int): Assigned Surface(s) + load_type (enum): Load Type Enumeration + load_projection (enum): Load Projection Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_projection == FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV: + load_parameter = [magnitude, X, Y] + for load_projection == FreeLoadLoadProjection.LOAD_PROJECTION_YZ_OR_VW: + load_parameter = [magnitude, Y, Z] + for load_projection == FreeLoadLoadProjection.LOAD_PROJECTION_XZ_OR_UW: + load_parameter = [magnitude, X, Z] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Free Concentrated Load + clientObject = Model.clientModel.factory.create('ns0:free_concentrated_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Surfaces No. + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Load Projection + clientObject.load_projection = load_projection.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Parameter + if len(load_parameter) != 3: + raise Exception('WARNING: The load parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude = load_parameter[0] + clientObject.load_location_x = load_parameter[1] + clientObject.load_location_y = load_parameter[2] + + # Load Type + clientObject.load_type = load_type.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Free Concentrated Load to client model + Model.clientModel.service.set_free_concentrated_load(load_case_no, clientObject) + + def LineLoad(self, + no: int = 1, + load_case_no: int = 1, + surfaces_no = '1', + load_distribution = FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_projection = FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + load_direction = FreeLineLoadLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surfaces_no (int): Assigned Surface(s) + load_distribution (enum): Load Distribution Enumeration + load_projection (enum): Load Projection Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude_uniform, load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y] + for load_distribution == FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_first, magnitude_second, load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Free Concentrated Load + clientObject = Model.clientModel.factory.create('ns0:free_line_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Surfaces No. + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Projection + clientObject.load_projection = load_projection.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Parameter + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM': + if len(load_parameter) != 5: + raise Exception('WARNING: The load parameter needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_uniform = load_parameter[0] + clientObject.load_location_first_x = load_parameter[1] + clientObject.load_location_first_y = load_parameter[2] + clientObject.load_location_second_x = load_parameter[3] + clientObject.load_location_second_y = load_parameter[4] + elif load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR': + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_first = load_parameter[0] + clientObject.magnitude_second = load_parameter[1] + clientObject.load_location_first_x = load_parameter[2] + clientObject.load_location_first_y = load_parameter[3] + clientObject.load_location_second_x = load_parameter[4] + clientObject.load_location_second_y = load_parameter[5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Free Concentrated Load to client model + Model.clientModel.service.set_free_line_load(load_case_no, clientObject) + + def RectangularLoad(self, + no: int = 1, + load_case_no: int = 1, + surfaces_no = '1', + load_distribution = FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_projection = FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + load_direction = FreeRectangularLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + load_magnitude_parameter = [], + load_location = FreeRectangularLoadLoadLocationRectangle.LOAD_LOCATION_RECTANGLE_CORNER_POINTS, + load_location_parameter = [], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surfaces_no (int): Assigned Surface(s) + load_distribution (enum): Load Distribution Enumeration + load_projection (enum): Load Projection Enumeration + load_direction (enum): Load Direction Enumeration + load_magnitude_parameter (list): Load Magnitude Parameter + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_magnitude_parameter = [magnitude_uniform] + for load_distribution == FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_FIRST or FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_SECOND: + load_magnitude_parameter = [magnitude_linear_first, magnitude_linear_second] + load_location (enum): Load Location Enumeration + load_location_parameter (list): Load Location Parameters + for load_location == FreeRectangularLoadLoadLocationRectangle.LOAD_LOCATION_RECTANGLE_CORNER_POINTS: + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM or FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_FIRST or FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_SECOND: + load_location_parameter = [load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y, axis_start_angle] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + load_location_parameter = [load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y, [[distance, factor], ...] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER: + load_location_parameter = [load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y, [axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z], [axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z], axis_start_angle,[[alpha, factor], ...] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER: + load_location_parameter = [load_location_first_x, load_location_first_y, load_location_second_x, load_location_second_y, [[distance, factor], ...], [axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z], [axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z], axis_start_angle,[[alpha, factor], ...] + for load_location == FreeRectangularLoadLoadLocationRectangle.LOAD_LOCATION_RECTANGLE_CENTER_AND_SIDES: + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM or FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_FIRST or FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_SECOND: + load_location_parameter = [load_location_center_x, load_location_center_y, load_location_center_side_a, load_location_center_side_b, axis_start_angle] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + load_location_parameter = [load_location_center_x, load_location_center_y, load_location_center_side_a, load_location_center_side_b, [[distance, factor], ...] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER: + load_location_parameter = [load_location_center_x, load_location_center_y, load_location_center_side_a, load_location_center_side_b, [axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z], [axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z], axis_start_angle,[[alpha, factor], ...] + for load_distribution == FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER: + load_location_parameter = [load_location_center_x, load_location_center_y, load_location_center_side_a, load_location_center_side_b, [[distance, factor], ...], [axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z], [axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z], axis_start_angle,[[alpha, factor], ...] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Free Concentrated Load + clientObject = Model.clientModel.factory.create('ns0:free_rectangular_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Surfaces No. + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Projection + clientObject.load_projection = load_projection.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude Parameter + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM' or load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z' or load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER' or load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER': + if len(load_magnitude_parameter) != 1: + raise Exception('WARNING: The load parameter for the selected distribution needs to be of length 1. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_uniform = load_magnitude_parameter[0] + + elif load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_FIRST' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_SECOND': + if len(load_magnitude_parameter) != 2: + raise Exception('WARNING: The load parameter for the selected distribution needs to be of length 2. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_linear_first = load_magnitude_parameter[0] + clientObject.magnitude_linear_second = load_magnitude_parameter[1] + + # Load Location Parameter + clientObject.load_location_rectangle = load_location.name + + if load_location.name == 'LOAD_LOCATION_RECTANGLE_CORNER_POINTS': + + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_FIRST' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_SECOND': + if len(load_location_parameter) != 5: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_first_x = load_location_parameter[0] + clientObject.load_location_first_y = load_location_parameter[1] + clientObject.load_location_second_x = load_location_parameter[2] + clientObject.load_location_second_y = load_location_parameter[3] + clientObject.axis_start_angle = load_location_parameter[4] * (pi/180) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z': + if len(load_location_parameter) != 5: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_first_x = load_location_parameter[0] + clientObject.load_location_first_y = load_location_parameter[1] + clientObject.load_location_second_x = load_location_parameter[2] + clientObject.load_location_second_y = load_location_parameter[3] + + clientObject.load_varying_in_z_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_in_z_parameters') + varying_in_z = load_location_parameter[4] + for i,j in enumerate(varying_in_z): + frllvp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_in_z_parameters') + frllvp.no = i+1 + frllvp.distance = varying_in_z[i][0] + frllvp.factor = varying_in_z[i][1] + clientObject.load_varying_in_z_parameters.free_rectangular_load_load_varying_in_z_parameters.append(frllvp) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER': + if len(load_location_parameter) != 8: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 9. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_first_x = load_location_parameter[0] + clientObject.load_location_first_y = load_location_parameter[1] + clientObject.load_location_second_x = load_location_parameter[2] + clientObject.load_location_second_y = load_location_parameter[3] + clientObject.axis_definition_p1_x = load_location_parameter[4][0] + clientObject.axis_definition_p1_y = load_location_parameter[4][1] + clientObject.axis_definition_p1_z = load_location_parameter[4][2] + clientObject.axis_definition_p2_x = load_location_parameter[5][0] + clientObject.axis_definition_p2_y = load_location_parameter[5][1] + clientObject.axis_definition_p2_z = load_location_parameter[5][2] + clientObject.axis_start_angle = load_location_parameter[6] + + clientObject.load_varying_along_perimeter_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_along_perimeter_parameters') + varying_along_perimeter = load_location_parameter[7] + for i,j in enumerate(varying_along_perimeter): + frllvapp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_along_perimeter_parameters') + frllvapp.no = i+1 + frllvapp.alpha = varying_along_perimeter[i][0] * (pi/180) + frllvapp.factor = varying_along_perimeter[i][1] + clientObject.load_varying_along_perimeter_parameters.free_rectangular_load_load_varying_along_perimeter_parameters.append(frllvapp) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER': + if len(load_location_parameter) != 9: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 9. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_first_x = load_location_parameter[0] + clientObject.load_location_first_y = load_location_parameter[1] + clientObject.load_location_second_x = load_location_parameter[2] + clientObject.load_location_second_y = load_location_parameter[3] + + clientObject.load_varying_in_z_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_in_z_parameters') + varying_in_z = load_location_parameter[4] + for i,j in enumerate(varying_in_z): + frllvp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_in_z_parameters') + frllvp.no = i+1 + frllvp.distance = varying_in_z[i][0] + frllvp.factor = varying_in_z[i][1] + clientObject.load_varying_in_z_parameters.free_rectangular_load_load_varying_in_z_parameters.append(frllvp) + + clientObject.axis_definition_p1_x = load_location_parameter[5][0] + clientObject.axis_definition_p1_y = load_location_parameter[5][1] + clientObject.axis_definition_p1_z = load_location_parameter[5][2] + clientObject.axis_definition_p2_x = load_location_parameter[6][0] + clientObject.axis_definition_p2_y = load_location_parameter[6][1] + clientObject.axis_definition_p2_z = load_location_parameter[6][2] + clientObject.axis_start_angle = load_location_parameter[7] + + clientObject.load_varying_along_perimeter_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_along_perimeter_parameters') + varying_along_perimeter = load_location_parameter[8] + for i,j in enumerate(varying_along_perimeter): + frllvapp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_along_perimeter_parameters') + frllvapp.no = i+1 + frllvapp.alpha = varying_along_perimeter[i][0] * (pi/180) + frllvapp.factor = varying_along_perimeter[i][1] + clientObject.load_varying_along_perimeter_parameters.free_rectangular_load_load_varying_along_perimeter_parameters.append(frllvapp) + + elif load_location.name == 'LOAD_LOCATION_RECTANGLE_CENTER_AND_SIDES': + + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_FIRST' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_SECOND': + if len(load_location_parameter) != 5: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_center_x = load_location_parameter[0] + clientObject.load_location_center_y = load_location_parameter[1] + clientObject.load_location_center_side_a = load_location_parameter[2] + clientObject.load_location_center_side_b = load_location_parameter[3] + clientObject.axis_start_angle = load_location_parameter[4] * (pi/180) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z': + if len(load_location_parameter) != 5: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_center_x = load_location_parameter[0] + clientObject.load_location_center_y = load_location_parameter[1] + clientObject.load_location_center_side_a = load_location_parameter[2] + clientObject.load_location_center_side_b = load_location_parameter[3] + + clientObject.load_varying_in_z_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_in_z_parameters') + varying_in_z = load_location_parameter[4] + for i,j in enumerate(varying_in_z): + frllvp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_in_z_parameters') + frllvp.no = i+1 + frllvp.distance = varying_in_z[i][0] + frllvp.factor = varying_in_z[i][1] + clientObject.load_varying_in_z_parameters.free_rectangular_load_load_varying_in_z_parameters.append(frllvp) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER': + if len(load_location_parameter) != 8: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 9. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_center_x = load_location_parameter[0] + clientObject.load_location_center_y = load_location_parameter[1] + clientObject.load_location_center_side_a = load_location_parameter[2] + clientObject.load_location_center_side_b = load_location_parameter[3] + clientObject.axis_definition_p1_x = load_location_parameter[4][0] + clientObject.axis_definition_p1_y = load_location_parameter[4][1] + clientObject.axis_definition_p1_z = load_location_parameter[4][2] + clientObject.axis_definition_p2_x = load_location_parameter[5][0] + clientObject.axis_definition_p2_y = load_location_parameter[5][1] + clientObject.axis_definition_p2_z = load_location_parameter[5][2] + clientObject.axis_start_angle = load_location_parameter[6] + + clientObject.load_varying_along_perimeter_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_along_perimeter_parameters') + varying_along_perimeter = load_location_parameter[7] + for i,j in enumerate(varying_along_perimeter): + frllvapp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_along_perimeter_parameters') + frllvapp.no = i+1 + frllvapp.alpha = varying_along_perimeter[i][0] * (pi/180) + frllvapp.factor = varying_along_perimeter[i][1] + clientObject.load_varying_along_perimeter_parameters.free_rectangular_load_load_varying_along_perimeter_parameters.append(frllvapp) + + elif load_distribution.name == 'LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER': + if len(load_location_parameter) != 9: + raise Exception('WARNING: The load location parameter for the designated location and distribution type needs to be of length 9. Kindly check list inputs for completeness and correctness.') + clientObject.load_location_center_x = load_location_parameter[0] + clientObject.load_location_center_y = load_location_parameter[1] + clientObject.load_location_center_side_a = load_location_parameter[2] + clientObject.load_location_center_side_b = load_location_parameter[3] + + clientObject.load_varying_in_z_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_in_z_parameters') + varying_in_z = load_location_parameter[4] + for i,j in enumerate(varying_in_z): + frllvp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_in_z_parameters') + frllvp.no = i+1 + frllvp.distance = varying_in_z[i][0] + frllvp.factor = varying_in_z[i][1] + clientObject.load_varying_in_z_parameters.free_rectangular_load_load_varying_in_z_parameters.append(frllvp) + + clientObject.axis_definition_p1_x = load_location_parameter[5][0] + clientObject.axis_definition_p1_y = load_location_parameter[5][1] + clientObject.axis_definition_p1_z = load_location_parameter[5][2] + clientObject.axis_definition_p2_x = load_location_parameter[6][0] + clientObject.axis_definition_p2_y = load_location_parameter[6][1] + clientObject.axis_definition_p2_z = load_location_parameter[6][2] + clientObject.axis_start_angle = load_location_parameter[7] + + clientObject.load_varying_along_perimeter_parameters = Model.clientModel.factory.create('ns0:free_rectangular_load.load_varying_along_perimeter_parameters') + varying_along_perimeter = load_location_parameter[8] + for i,j in enumerate(varying_along_perimeter): + frllvapp = Model.clientModel.factory.create('ns0:free_rectangular_load_load_varying_along_perimeter_parameters') + frllvapp.no = i+1 + frllvapp.alpha = varying_along_perimeter[i][0] * (pi/180) + frllvapp.factor = varying_along_perimeter[i][1] + clientObject.load_varying_along_perimeter_parameters.free_rectangular_load_load_varying_along_perimeter_parameters.append(frllvapp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Free Concentrated Load to client model + Model.clientModel.service.set_free_rectangular_load(load_case_no, clientObject) + + def CircularLoad(self, + no: int = 1, + load_case_no: int = 1, + surfaces_no = '1', + load_distribution = FreeCircularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_projection = FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + load_direction = FreeCircularLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + load_parameter = [], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surfaces_no (int): Assigned Surface(s) + load_distribution (enum): Load Distribution Enumeration + load_projection (enum): Load Projection Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter + for load_distribution == FreeCircularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude_uniform, load_location_x, load_location_y, load_location_radius] + for load_distribution == FreeCircularLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_center, magnitude_radius, load_location_x, load_location_y, load_location_radius] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Free Concentrated Load + clientObject = Model.clientModel.factory.create('ns0:free_circular_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Surfaces No. + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Projection + clientObject.load_projection = load_projection.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Parameter + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM': + if len(load_parameter) != 4: + raise Exception('WARNING: The load parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_uniform = load_parameter[0] + clientObject.load_location_x = load_parameter[1] + clientObject.load_location_y = load_parameter[2] + clientObject.load_location_radius = load_parameter[3] + + elif load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR': + if len(load_parameter) != 5: + raise Exception('WARNING: The load parameter needs to be of length 5. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_center = load_parameter[0] + clientObject.magnitude_radius = load_parameter[1] + clientObject.load_location_x = load_parameter[2] + clientObject.load_location_y = load_parameter[3] + clientObject.load_location_radius = load_parameter[4] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Free Concentrated Load to client model + Model.clientModel.service.set_free_circular_load(load_case_no, clientObject) + + def PolygonLoad(self, + no: int = 1, + load_case_no: int = 1, + surfaces_no = '1', + load_distribution = FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_projection = FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + load_direction = FreePolygonLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + load_location = [], + load_parameter = [], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surfaces_no (int): Assigned Surface(s) + load_distribution (enum): Load Distribution Enumeration + load_projection (enum): Load Projection Enumeration + load_direction (enum): Load Direction Enumeration + load_location (list): Load Location Parameter + load_parameter (list): Load Parameter + for load_distribution == FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_location = [[first_coordinate, second_coordinate], ...] + load_parameter = [magnitude_uniform] + for load_distribution == FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_location = [[first_coordinate, second_coordinate], ...] + load_parameter = [magnitude_linear_1, magnitude_linear_2, magnitude_linear_3, magnitude_linear_location_1, magnitude_linear_location_2, magnitude_linear_location_3] + for load_distribution == FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_FIRST: + load_location = [[first_coordinate, second_coordinate], ...] + load_parameter = [magnitude_linear_1, magnitude_linear_2, magnitude_linear_location_1, magnitude_linear_location_2] + for load_distribution == FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_LINEAR_SECOND: + load_location = [[first_coordinate, second_coordinate], ...] + load_parameter = [magnitude_linear_1, magnitude_linear_2, magnitude_linear_location_1, magnitude_linear_location_2] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Free Concentrated Load + clientObject = Model.clientModel.factory.create('ns0:free_polygon_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Surfaces No. + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Projection + clientObject.load_projection = load_projection.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Location + clientObject.load_location = Model.clientModel.factory.create('ns0:free_polygon_load.load_location') + for i,j in enumerate(load_location): + fplld = Model.clientModel.factory.create('ns0:free_polygon_load_load_location') + fplld.no = i+1 + fplld.first_coordinate = load_location[i][0] + fplld.second_coordinate = load_location[i][1] + clientObject.load_location.free_polygon_load_load_location.append(fplld) + + # Load Parameter + if load_distribution.name == 'LOAD_DISTRIBUTION_UNIFORM': + if len(load_parameter) != 1: + raise Exception('WARNING: The load parameter needs to be of length 1. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_uniform = load_parameter[0] + + elif load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR': + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_linear_1 = load_parameter[0] + clientObject.magnitude_linear_2 = load_parameter[1] + clientObject.magnitude_linear_3 = load_parameter[2] + clientObject.magnitude_linear_location_1 = load_parameter[3] + clientObject.magnitude_linear_location_2 = load_parameter[4] + clientObject.magnitude_linear_location_3 = load_parameter[5] + + elif load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_FIRST' or load_distribution.name == 'LOAD_DISTRIBUTION_LINEAR_SECOND': + if len(load_parameter) != 4: + raise Exception('WARNING: The load parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_linear_1 = load_parameter[0] + clientObject.magnitude_linear_2 = load_parameter[1] + clientObject.magnitude_linear_location_1 = load_parameter[2] + clientObject.magnitude_linear_location_2 = load_parameter[3] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Free Concentrated Load to client model + Model.clientModel.service.set_free_polygon_load(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/imposedLineDeformation.py b/docs/RFEM/Loads/imposedLineDeformation.py new file mode 100644 index 00000000..f7ea8567 --- /dev/null +++ b/docs/RFEM/Loads/imposedLineDeformation.py @@ -0,0 +1,44 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString + +class ImposedLineDeformation(): + + LineDeformationParams = {'imposed_displacement_line_start_x' : 0.0, + 'imposed_displacement_line_start_y' : 0.0, + 'imposed_displacement_line_start_z': 0.003, + 'imposed_rotation_line_start' : 0.0, + 'imposed_displacement_line_end_x': 0.0, + 'imposed_displacement_line_end_y': 0.0, + 'imposed_displacement_line_end_z': 0.0002, + 'imposed_rotation_line_end': 0.0} + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + line_no: str = '1', + comment: str = '', + params: dict = LineDeformationParams): + + # Client model | Imposed Line Deformation + clientObject = Model.clientModel.factory.create('ns0:imposed_line_deformation') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Line No. + clientObject.lines = ConvertToDlString(line_no) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Nodal Support to client model + Model.clientModel.service.set_imposed_line_deformation(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/imposedNodalDeformation.py b/docs/RFEM/Loads/imposedNodalDeformation.py new file mode 100644 index 00000000..da5d7679 --- /dev/null +++ b/docs/RFEM/Loads/imposedNodalDeformation.py @@ -0,0 +1,49 @@ +from RFEM.initModel import Model, clearAtributes + +class ImposedNodalDeformation(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + node_no: str = '1', + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + load_parameter = [imposed_displacement_x, imposed_displacement_y, imposed_displacement_z, imposed_rotation_x, imposed_rotation_y imposed_rotation_z] + ''' + # Client model | Imposed Nodal Deformation + clientObject = Model.clientModel.factory.create('ns0:imposed_nodal_deformation') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Node No. + #clientObject.node_no = ConvertToDlString(node_no() + clientObject.nodes = node_no + + # Load Parameter + clientObject.imposed_displacement_x = load_parameter[0] + clientObject.imposed_displacement_y = load_parameter[1] + clientObject.imposed_displacement_z = load_parameter[2] + + clientObject.imposed_rotation_x = load_parameter[3] + clientObject.imposed_rotation_y = load_parameter[4] + clientObject.imposed_rotation_z = load_parameter[5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Imposed Nodal Deformation to client model + Model.clientModel.service.set_imposed_nodal_deformation(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/lineLoad.py b/docs/RFEM/Loads/lineLoad.py new file mode 100644 index 00000000..bf1b9c38 --- /dev/null +++ b/docs/RFEM/Loads/lineLoad.py @@ -0,0 +1,638 @@ +from RFEM.initModel import Model, ConvertToDlString, clearAtributes +from RFEM.enums import * + +class LineLoad(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + lines_no: str = '1', + load_direction = LoadDirectionType.LOAD_DIRECTION_LOCAL_Z, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + lines_no (str): Assigned Line(s) + load_direction (enum): Load Direction Enumeration + magnitude (float): Magnitude of Line Load + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Load + clientObject = Model.clientModel.factory.create('ns0:line_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Line No. (e.g. '5 6 7 12') + clientObject.lines = ConvertToDlString(lines_no) + + # Line Load Type + load_type = LineLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Line Load Distribution + load_distribution = LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM + clientObject.load_distribution = load_distribution.name + + # Line Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Line Load to client model + Model.clientModel.service.set_line_load(load_case_no, clientObject) + + def Force(self, + no: int = 1, + load_case_no: int = 1, + lines_no: str = '1', + load_distribution= LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction= LineLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = None, + list_reference: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + lines_no (str): Assigned Line(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter: Load Parameter + for load_distribution == LOAD_DISTRIBUTION_UNIFORM: + load_parameter = magnitude + for load_distribution == LOAD_DISTRIBUTION_UNIFORM_TOTAL: + load_parameter = magnitude + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): List Reference Bool + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Load + clientObject = Model.clientModel.factory.create('ns0:line_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Line Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Lines No. (e.g. '5 6 7 12') + clientObject.lines = ConvertToDlString(lines_no) + + # Line Load Type + load_type = LineLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Line Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude and Parameters + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM" or load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM_TOTAL": + clientObject.magnitude = load_parameter + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + if len(load_parameter) != 3: + raise Exception('WARNING: The load parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool): + raise Exception ('WARNING: Load parameter at index 0 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if not load_parameter[0]: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool): + raise Exception ('WARNING: Load parameter at index 0 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + if len(load_parameter) != 7: + raise Exception('WARNING: The load parameter needs to be of length 7. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool) or not isinstance(load_parameter[2], bool): + raise Exception ('WARNING: Load parameter at index 0, 1 and 2 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if not load_parameter[2]: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: LineLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:line_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + if len(load_parameter[i]) != 3: + raise Exception('WARNING: The load parameter sub-lists need to be of length 3. Kindly check sub-list inputs for completeness and correctness.') + mlvlp = Model.clientModel.factory.create('ns0:line_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + + clientObject.varying_load_parameters.line_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + if len(load_parameter) != 3: + raise Exception('WARNING: The load parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: LineLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:line_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + if len(load_parameter[i]) != 3: + raise Exception('WARNING: The load parameter sub-lists need to be of length 3. Kindly check sub-list inputs for completeness and correctness.') + mlvlp = Model.clientModel.factory.create('ns0:line_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + + clientObject.varying_load_parameters.line_load_varying_load_parameters.append(mlvlp) + + # Line Load Direction + clientObject.load_direction = load_direction.name + + # Reference to List of Lines + clientObject.reference_to_list_of_lines = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Line Load to client model + Model.clientModel.service.set_line_load(load_case_no, clientObject) + + def Moment(self, + no: int = 1, + load_case_no: int = 1, + lines_no: str = '1', + load_distribution = LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = LineLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = None, + list_reference: bool = False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + lines_no (str): Assigned Line(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter: Load Parameter + load_parameter == LOAD_DISTRIBUTION_UNIFORM: + load_parameter = magnitude + load_parameter == LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + load_parameter == LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + load_parameter == LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + load_parameter == LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + load_parameter == LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + load_parameter == LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + load_parameter == LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + load_parameter == LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + load_parameter == LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): List Reference Bool + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Load + clientObject = Model.clientModel.factory.create('ns0:line_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Line Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Lines No. (e.g. '5 6 7 12') + clientObject.lines = ConvertToDlString(lines_no) + + # Line Load Type + load_type = LineLoadType.LOAD_TYPE_MOMENT + clientObject.load_type = load_type.name + + # Line Load Distribution + clientObject.load_distribution= load_distribution.name + + #Load Magnitude and Parameters + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.magnitude = load_parameter + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + if len(load_parameter) != 3: + raise Exception('WARNING: The load parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool): + raise Exception ('WARNING: Load parameter at index 0 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if not load_parameter[0]: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + if len(load_parameter) != 7: + raise Exception('WARNING: The load parameter needs to be of length 7. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool) or not isinstance(load_parameter[2], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if not load_parameter[2]: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: LineLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:line_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + if len(load_parameter[i]) != 3: + raise Exception('WARNING: The load parameter sub-lists need to be of length 3. Kindly check sub-list inputs for completeness and correctness.') + mlvlp = Model.clientModel.factory.create('ns0:line_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + + clientObject.varying_load_parameters.line_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + if len(load_parameter) != 6: + raise Exception('WARNING: The load parameter needs to be of length 6. Kindly check list inputs for completeness and correctness.') + if not isinstance(load_parameter[0], bool) or not isinstance(load_parameter[1], bool): + raise Exception ('WARNING: Load parameter at index 0 and 1 to be of type "bool"') + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if not load_parameter[0]: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if not load_parameter[1]: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + if len(load_parameter) != 3: + raise Exception('WARNING: The load parameter needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: LineLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:line_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + if len(load_parameter[i]) != 3: + raise Exception('WARNING: The load parameter sub-lists need to be of length 3. Kindly check sub-list inputs for completeness and correctness.') + mlvlp = Model.clientModel.factory.create('ns0:line_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + + clientObject.varying_load_parameters.line_load_varying_load_parameters.append(mlvlp) + + # Line Load Direction + clientObject.load_direction = load_direction.name + + #Reference to List of Lines + clientObject.reference_to_list_of_lines = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Line Load to client model + Model.clientModel.service.set_line_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + lines_no: str = '1', + individual_mass_components: bool=True, + mass_components = None, + comment: str = '', + params: dict = {}): + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + lines_no (str): Assigned Line(s) + individual_mass_components (bool): Individual Mass Components Boolean + mass_components (list): Mass Components + for individual_mass_components == False: + mass_components = [mass_global] + for individual_mass_components == True: + mass_components = [mass_x, mass_y, mass_z] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Line Load + clientObject = Model.clientModel.factory.create('ns0:line_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Lines No. (e.g. '5 6 7 12') + clientObject.lines = ConvertToDlString(lines_no) + + # Line Load Type + load_type = LineLoadType.E_TYPE_MASS + clientObject.load_type = load_type.name + + # Line Load Distribution + load_distribution= LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM + clientObject.load_distribution= load_distribution.name + + # Individual Mass Components + if not isinstance(individual_mass_components, bool): + raise Exception('WARNING: Input to be of type "bool"') + clientObject.individual_mass_components = individual_mass_components + + # Mass magnitude + if not individual_mass_components: + if len(mass_components) != 1: + raise Exception('WARNING: The mass components parameter for global mass assignment needs to be of length 1. Kindly check list inputs for completeness and correctness.') + clientObject.mass_global = mass_components[0] + else: + if len(mass_components) != 3: + raise Exception('WARNING: The mass components parameter for individual mass component assignment needs to be of length 3. Kindly check list inputs for completeness and correctness.') + clientObject.mass_x = mass_components[0] + clientObject.mass_y = mass_components[1] + clientObject.mass_z = mass_components[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Line Load to client model + Model.clientModel.service.set_line_load(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/memberLoad.py b/docs/RFEM/Loads/memberLoad.py new file mode 100644 index 00000000..2312dfe5 --- /dev/null +++ b/docs/RFEM/Loads/memberLoad.py @@ -0,0 +1,2114 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import LoadDirectionType, MemberLoadType, MemberLoadDistribution, MemberLoadDirection, MemberLoadDirectionOrientation +from RFEM.enums import MemberLoadEccentricityHorizontalAlignment, MemberLoadEccentricityVerticalAlignment, MemberLoadEccentricitySectionMiddle +from RFEM.enums import MemberLoadAxisDefinitionType, MemberLoadAxisDefinitionAxisOrientation, MemberLoadAxisDefinition + +class MemberLoad(): + def __init__(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_direction = LoadDirectionType.LOAD_DIRECTION_LOCAL_Z, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Members + load_direction (enum): Load Directin Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Member Load Distribution + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Force(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution= MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction= MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + force_eccentricity: bool= False, + list_reference: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distribution == LOAD_DISTRIBUTION_UNIFORM_TOTAL: + load_parameter = [magnitude] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == LOAD_DISTRIBUTION_VARYING_IN_Z: + load_parameter = [[distance, delta_distance, magnitude], ...] + force_eccentricity (bool): Enable/Disable Force Eccentricity Option + list_reference (bool): Enable/Disable List Reference Option + comment (str, optional): Comments + params (dict, optional): Parameters + for force_eccentricity == True: + {'eccentricity_horizontal_alignment': MemberLoadEccentricityHorizontalAlignment.ALIGN_NONE, + 'eccentricity_vertical_alignment': MemberLoadEccentricityVerticalAlignment.ALIGN_NONE, + 'eccentricity_section_middle': MemberLoadEccentricitySectionMiddle.LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, + 'is_eccentricity_at_end_different_from_start': False, + 'eccentricity_y_at_end': 0.0, + 'eccentricity_y_at_start': 0.0, + 'eccentricity_z_at_end': 0.0, + 'eccentricity_z_at_start': 0.0} + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution= load_distribution.name + + #Load Magnitude and Parameters + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM" or load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM_TOTAL": + clientObject.magnitude = load_parameter + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if load_parameter[0] == False: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if load_parameter[2] == False: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING_IN_Z": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Reference to List of Members + clientObject.reference_to_list_of_members = list_reference + + #Force Eccentiricity + clientObject.has_force_eccentricity = force_eccentricity + + if force_eccentricity == True: + + params_ecc = {'eccentricity_horizontal_alignment': MemberLoadEccentricityHorizontalAlignment.ALIGN_NONE, + 'eccentricity_vertical_alignment': MemberLoadEccentricityVerticalAlignment.ALIGN_NONE, + 'eccentricity_section_middle': MemberLoadEccentricitySectionMiddle.LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, + 'is_eccentricity_at_end_different_from_start': False, + 'eccentricity_y_at_end': 0.0, + 'eccentricity_y_at_start': 0.0, + 'eccentricity_z_at_end': 0.0, + 'eccentricity_z_at_start': 0.0} + + params_ecc.update(params) + + if params_ecc['is_eccentricity_at_end_different_from_start'] == False: + + clientObject.eccentricity_horizontal_alignment= params_ecc['eccentricity_horizontal_alignment'].name + clientObject.eccentricity_vertical_alignment= params_ecc['eccentricity_vertical_alignment'].name + clientObject.eccentricity_section_middle = params_ecc['eccentricity_section_middle'].name + clientObject.eccentricity_y_at_end= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_y_at_start= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_z_at_end= params_ecc['eccentricity_z_at_start'] + clientObject.eccentricity_z_at_start= params_ecc['eccentricity_z_at_start'] + + elif params_ecc['is_eccentricity_at_end_different_from_start'] == True: + + clientObject.eccentricity_horizontal_alignment= params_ecc['eccentricity_horizontal_alignment'] + clientObject.eccentricity_vertical_alignment= params_ecc['eccentricity_vertical_alignment'] + clientObject.eccentricity_section_middle = params_ecc['eccentricity_section_middle'] + clientObject.eccentricity_y_at_end= params_ecc['eccentricity_y_at_end'] + clientObject.eccentricity_y_at_start= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_z_at_end= params_ecc['eccentricity_z_at_end'] + clientObject.eccentricity_z_at_start= params_ecc['eccentricity_z_at_start'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'eccentricity_horizontal_alignment' or 'eccentricity_vertical_alignment' or 'eccentricity_section_middle' or 'is_eccentricity_at_end_different_from_start' or 'eccentricity_y_at_end' or 'eccentricity_y_at_start' or 'eccentricity_z_at_end' or 'eccentricity_z_at_start': + pass + else: + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Moment(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution= MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction= MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == LOAD_DISTRIBUTION_UNIFORM: + load_parameter = magnitude + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for load_distribution == LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_MOMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution= load_distribution.name + + #Load Magnitude and Parameters + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.magnitude = load_parameter[0] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if load_parameter[0] == False: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if load_parameter[2] == False: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Reference to List of Members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + individual_mass_components: bool=False, + mass_components = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str):Assigned Member(s) + individual_mass_components (bool): Enable/Disable Individual Mass Components Option + mass_components (list): Mass Components List + if individual_mass_components == False: + mass_components = [M] + else: + mass_components = [Mx, My, Mz, Ix, Iy, Iz] + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + clientObject.load_type = MemberLoadType.E_TYPE_MASS.name + + # Member Load Distribution + clientObject.load_distribution= MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Individual Mass Components + clientObject.individual_mass_components = individual_mass_components + + # Mass magnitude + if individual_mass_components == False: + clientObject.mass_global = mass_components[0] + else: + clientObject.mass_x = mass_components[0] + clientObject.mass_y = mass_components[1] + clientObject.mass_z = mass_components[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [tt, tb] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + for load_over_total_length == False: + load_parameter = [tt1, tt2, tb1, tb2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_over_total_length == True: + load_parameter = [tt1, tt2, tb1, tb2] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [tt1, tt2, tb1, tb2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [tb1, tb2, tb3, tt1, tt2, tt3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): List Reference Boolean + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_TEMPERATURE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude_t_b = load_parameter[0] + clientObject.magnitude_t_t = load_parameter[1] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_t_1 = load_parameter[2] + clientObject.magnitude_t_t_2 = load_parameter[3] + + if load_over_total_length == False: + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_t_1 = load_parameter[2] + clientObject.magnitude_t_t_2 = load_parameter[3] + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_b_3 = load_parameter[2] + clientObject.magnitude_t_t_1 = load_parameter[3] + clientObject.magnitude_t_t_2 = load_parameter[4] + clientObject.magnitude_t_t_3 = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==4 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = load_parameter[i][2] + mlvlp.magnitude_delta_t = load_parameter[i][3] + mlvlp.magnitude_t_t = load_parameter[i][2] + mlvlp.magnitude_t_b = load_parameter[i][3] + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def TemperatureChange(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [tc, delta_t] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + for load_over_total_length == False: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_over_total_length == True: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [delta_t_1, delta_t_2, delta_t_3, t_c_1, t_c_2, t_c_3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_TEMPERATURE_CHANGE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude_delta_t = load_parameter[0] + clientObject.magnitude_t_c = load_parameter[1] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_t_c_1 = load_parameter[2] + clientObject.magnitude_t_c_2 = load_parameter[3] + + if load_over_total_length == False: + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_t_c_1 = load_parameter[2] + clientObject.magnitude_t_c_2 = load_parameter[3] + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_delta_t_3 = load_parameter[2] + clientObject.magnitude_t_c_1 = load_parameter[3] + clientObject.magnitude_t_c_2 = load_parameter[4] + clientObject.magnitude_t_c_3 = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==4 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = load_parameter[i][2] + mlvlp.magnitude_delta_t = load_parameter[i][3] + mlvlp.magnitude_t_t = load_parameter[i][2] + mlvlp.magnitude_t_b = load_parameter[i][3] + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def AxialStrain(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [epsilon] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [epsilon1, epsilon2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [epsilon1, epsilon2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [epsilon1, epsilon2, epsilon3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_AXIAL_STRAIN + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_over_total_length == False: + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def AxialDisplacement(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, + magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_direction (enum): Load Direction Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_AXIAL_DISPLACEMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Precamber(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum):Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_PRECAMBER + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_over_total_length == False: + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def InitialPrestress(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, + magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_direction (enum): Load Direction Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_INITIAL_PRESTRESS + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Displacement(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_a] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_c_is_defined_as_relative = False, distance_a, distance_b, distance_c] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [magnitude_1, magnitude_2, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_DISPLACEMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[2] + else: + clientObject.distance_a_absolute = load_parameter[2] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[3] + else: + clientObject.distance_a_absolute = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[4] + else: + clientObject.distance_b_absolute = load_parameter[4] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + clientObject.distance_c_is_defined_as_relative = load_parameter[3] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + if load_parameter[3]: + clientObject.distance_c_relative = load_parameter[6] + else: + clientObject.distance_c_absolute = load_parameter[6] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_over_total_length == False: + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def Rotation(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + list_reference: bool= False, + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter List + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_a] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_c_is_defined_as_relative = False, distance_a, distance_b, distance_c] + for load_distrubition == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [magnitude_1, magnitude_2, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + list_reference (bool): Enable/Disable List Reference Option + load_over_total_length (bool): Enable/Disable Load Over Total Length Option + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_ROTATION + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[2] + else: + clientObject.distance_a_absolute = load_parameter[2] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[3] + else: + clientObject.distance_a_absolute = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[4] + else: + clientObject.distance_b_absolute = load_parameter[4] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + clientObject.distance_c_is_defined_as_relative = load_parameter[3] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + if load_parameter[3]: + clientObject.distance_c_relative = load_parameter[6] + else: + clientObject.distance_c_absolute = load_parameter[6] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_over_total_length == False: + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution == MemberLoadDistribution.LOAD_DISTRIBUTION_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_load_varying_load_parameters.append(mlvlp) + + # Reference to list of members + clientObject.reference_to_list_of_members = list_reference + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def PipeContentFull(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_direction_orientation = MemberLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, + specific_weight : float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_direction_orientation (enum): Load Direction Enumeration + specific_weight (float): Specific Weight + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_PIPE_CONTENT_FULL + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + #Member Load Orientation + clientObject.load_direction_orientation = load_direction_orientation.name + + #Load Magnitude + clientObject.magnitude = specific_weight + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def PipeContentPartial(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + load_direction_orientation = MemberLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, + specific_weight : float = 0.0, + filling_height : float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + load_direction_orientation (enum): Load Direction Enumeration + specific_weight (float): Specific Weight + filling_height (float): Filling Height + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_PIPE_CONTENT_PARTIAL + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + #Member Load Orientation + clientObject.load_direction_orientation = load_direction_orientation.name + + #Load Magnitude + clientObject.magnitude = specific_weight + + #Filling Height + clientObject.filling_height = filling_height + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def PipeInternalPressure(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + pressure : float = 0.0, + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + pressure (float): Pressure + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_PIPE_INTERNAL_PRESSURE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberLoadDirection.LOAD_DIRECTION_LOCAL_X.name + + #Load Magnitude + clientObject.magnitude = pressure + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) + + def RotaryMotion(self, + no: int = 1, + load_case_no: int = 1, + members_no: str = '1', + angular_acceleration : float = 1.0, + angular_velocity : float = 2.0, + axis_definition_type = MemberLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS, + axis_orientation = MemberLoadAxisDefinitionAxisOrientation.AXIS_POSITIVE, + axis_definition = MemberLoadAxisDefinition.AXIS_X, + axis_definition_p1 = [1,0,1], + axis_definition_p2 = [0,1,0], + comment: str = '', + params: dict = {}): + + ''' + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + members_no (str): Assigned Member(s) + angular_acceleration (float): Angular Acceleration + angular_velocity (float): Angular Velocity + axis_definition_type (enum): Axis Definition Type Enumeration + axis_orientation (enum): Axis Orientation Enumeration + axis_definition (enum): Axis Definition Enumeration + axis_definition_p1 (list): P1 List [X, Y, Z] + axis_definition_p2 (list): P2 List [X, Y, Z] + comment (str, optional): Comments + params (dict, optional): Parameters + ''' + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.members = ConvertToDlString(members_no) + + # Member Load Type + load_type = MemberLoadType.LOAD_TYPE_ROTARY_MOTION + clientObject.load_type = load_type.name + + #Angular Acceleration + clientObject.angular_acceleration = angular_acceleration + + #Angular Velocity + clientObject.angular_velocity = angular_velocity + + #Axis Definition Type + clientObject.axis_definition_type = axis_definition_type.name + + #Axis definition + if axis_definition_type == MemberLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS.name: + clientObject.axis_definition_p1_x = axis_definition_p1[0] + clientObject.axis_definition_p1_y = axis_definition_p1[1] + clientObject.axis_definition_p1_z = axis_definition_p1[2] + + clientObject.axis_definition_p2_x = axis_definition_p2[0] + clientObject.axis_definition_p2_y = axis_definition_p2[1] + clientObject.axis_definition_p2_z = axis_definition_p2[2] + + elif axis_definition_type == MemberLoadAxisDefinitionType.AXIS_DEFINITION_POINT_AND_AXIS.name: + clientObject.axis_definition_p1_x = axis_definition_p1[0] + clientObject.axis_definition_p1_y = axis_definition_p1[1] + clientObject.axis_definition_p1_z = axis_definition_p1[2] + + clientObject.axis_definition_axis = axis_definition.name + clientObject.axis_definition_axis_orientation = axis_orientation.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_load(load_case_no, clientObject) \ No newline at end of file diff --git a/docs/RFEM/Loads/membersetload.py b/docs/RFEM/Loads/membersetload.py new file mode 100644 index 00000000..1fc24163 --- /dev/null +++ b/docs/RFEM/Loads/membersetload.py @@ -0,0 +1,2270 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import MemberSetLoadType, LoadDirectionType, MemberSetLoadDistribution, MemberSetLoadDirection, MemberSetLoadDirectionOrientation +from RFEM.enums import MemberSetLoadEccentricityHorizontalAlignment, MemberSetLoadEccentricityVerticalAlignment, MemberSetLoadEccentricitySectionMiddle +from RFEM.enums import MemberSetLoadAxisDefinitionType, MemberSetLoadAxisDefinitionAxisOrientation, MemberSetLoadAxisDefinition + +class MemberSetLoad(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_direction = LoadDirectionType.LOAD_DIRECTION_LOCAL_Z, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_direction (enum): Load Case Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Member Sets No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Member Load Distribution + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Force(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution= MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction= MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + force_eccentricity: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameter + force_eccentricity (bool): Force Eccentricity Option + comment (str, optional): Comments + params (dict, optional): Parameters + + for LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for LOAD_DISTRIBUTION_UNIFORM_TOTAL: + load_parameter = [magnitude] + for LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + for LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + for LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + for LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for LOAD_DISTRIBUTION_VARYING_IN_Z: + load_parameter = [[distance, delta_distance, magnitude], ...] + + params: + {'eccentricity_horizontal_alignment': MemberSetLoadEccentricityHorizontalAlignment.ALIGN_NONE, + 'eccentricity_vertical_alignment': MemberSetLoadEccentricityVerticalAlignment.ALIGN_NONE, + 'eccentricity_section_middle': MemberSetLoadEccentricitySectionMiddle.LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, + 'is_eccentricity_at_end_different_from_start': False, + 'eccentricity_y_at_end': 0.0, + 'eccentricity_y_at_start': 0.0, + 'eccentricity_z_at_end': 0.0, + 'eccentricity_z_at_start': 0.0} + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution= load_distribution.name + + #Load Magnitude and Parameters + if load_parameter == []: + raise Exception("WARNING: Load parameter cannot be empty. Kindly check list inputs completeness and correctness.") + else: + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM" or load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM_TOTAL": + if len(load_parameter) == 1: + clientObject.magnitude = load_parameter[0] + else: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + if len(load_parameter) == 3: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if load_parameter[0] == False: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + else: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_CONCENTRATED_1. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + if len(load_parameter) == 6: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + else: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_N. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + if len(load_parameter) == 7: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if load_parameter[2] == False: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + else: + raise Exception("WARNING: Load parameter array length should be 7 for LOAD_DISTRIBUTION_CONCENTRATED_N. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + if len(load_parameter) == 6: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + else: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_2. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + if len(load_parameter) == 6: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + else: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + if len(load_parameter)==6: + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + else: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + if len(load_parameter)==3: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + else: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING_IN_Z": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Force Eccentiricity + clientObject.has_force_eccentricity = force_eccentricity + + if force_eccentricity == True: + if 'eccentricity_horizontal_alignment' and 'eccentricity_vertical_alignment' and 'eccentricity_section_middle' \ + 'is_eccentricity_at_end_different_from_start' and 'eccentricity_y_at_end' and 'eccentricity_y_at_start' \ + 'eccentricity_z_at_end' and 'eccentricity_z_at_start' in params: + pass + else: + raise Exception("WARNING: Params does not contain all the necessary parameters. Kindly check dictionary") + + params_ecc = {'eccentricity_horizontal_alignment': MemberSetLoadEccentricityHorizontalAlignment.ALIGN_NONE, + 'eccentricity_vertical_alignment': MemberSetLoadEccentricityVerticalAlignment.ALIGN_NONE, + 'eccentricity_section_middle': MemberSetLoadEccentricitySectionMiddle.LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, + 'is_eccentricity_at_end_different_from_start': False, + 'eccentricity_y_at_end': 0.0, + 'eccentricity_y_at_start': 0.0, + 'eccentricity_z_at_end': 0.0, + 'eccentricity_z_at_start': 0.0} + + params_ecc.update(params) + + if params_ecc['is_eccentricity_at_end_different_from_start'] == False: + + clientObject.eccentricity_horizontal_alignment= params_ecc['eccentricity_horizontal_alignment'].name + clientObject.eccentricity_vertical_alignment= params_ecc['eccentricity_vertical_alignment'].name + clientObject.eccentricity_section_middle = params_ecc['eccentricity_section_middle'].name + clientObject.eccentricity_y_at_end= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_y_at_start= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_z_at_end= params_ecc['eccentricity_z_at_start'] + clientObject.eccentricity_z_at_start= params_ecc['eccentricity_z_at_start'] + + elif params_ecc['is_eccentricity_at_end_different_from_start'] == True: + + clientObject.eccentricity_horizontal_alignment= params_ecc['eccentricity_horizontal_alignment'] + clientObject.eccentricity_vertical_alignment= params_ecc['eccentricity_vertical_alignment'] + clientObject.eccentricity_section_middle = params_ecc['eccentricity_section_middle'] + clientObject.eccentricity_y_at_end= params_ecc['eccentricity_y_at_end'] + clientObject.eccentricity_y_at_start= params_ecc['eccentricity_y_at_start'] + clientObject.eccentricity_z_at_end= params_ecc['eccentricity_z_at_end'] + clientObject.eccentricity_z_at_start= params_ecc['eccentricity_z_at_start'] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'eccentricity_horizontal_alignment' or 'eccentricity_vertical_alignment' or 'eccentricity_section_middle' or 'is_eccentricity_at_end_different_from_start' or 'eccentricity_y_at_end' or 'eccentricity_y_at_start' or 'eccentricity_z_at_end' or 'eccentricity_z_at_start': + pass + else: + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Moment(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution= MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction= MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + comment (str, optional): Comments + params (dict, optional): Parameters + + for LOAD_DISTRIBUTION_UNIFORM: + load_parameter = magnitude + for LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [relative_distance = False, magnitude, distance_a] + for LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude, count_n, distance_a, distance_b] + for LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, relative_distance_c = False, magnitude, distance_a, distance_b, distance_c] + for LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [relative_distance_a = False, relative_distance_b = False, magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for LOAD_DISTRIBUTION_TRAPEZOIDAL: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_TAPERED: + load_parameter = [relative_distance_a = False, relative_distance_b = False,magnitude_1, magnitude_2, distance_a, distance_b] + for LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_MOMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution= load_distribution.name + + #Load Magnitude and Parameters + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + try: + len(load_parameter)==1 + except: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_1": + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_CONCENTRATED_1. Kindly check list inputs completeness and correctness.") + + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + if load_parameter[0] == False: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_absolute = load_parameter[2] + else: + clientObject.magnitude = load_parameter[1] + clientObject.distance_a_relative = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_N": + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_N. Kindly check list inputs completeness and correctness.") + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude = load_parameter[2] + clientObject.count_n = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2x2": + try: + len(load_parameter)==7 + except: + raise Exception("WARNING: Load parameter array length should be 7 for LOAD_DISTRIBUTION_CONCENTRATED_2x2. Kindly check list inputs completeness and correctness.") + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.distance_c_is_defined_as_relative = load_parameter[2] + clientObject.magnitude = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + if load_parameter[2] == False: + clientObject.distance_c_absolute = load_parameter[6] + else: + clientObject.distance_c_relative = load_parameter[6] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_2": + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_2. Kindly check list inputs completeness and correctness.") + + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_CONCENTRATED_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + elif load_distribution.name == "LOAD_DISTRIBUTION_TRAPEZOIDAL": + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_TAPERED": + try: + len(load_parameter)==4 + except: + raise Exception("WARNING: Load parameter array length should be 4 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.distance_a_is_defined_as_relative = load_parameter[0] + clientObject.distance_b_is_defined_as_relative = load_parameter[1] + clientObject.magnitude_1 = load_parameter[2] + clientObject.magnitude_2 = load_parameter[3] + + if load_parameter[0] == False: + clientObject.distance_a_absolute = load_parameter[4] + else: + clientObject.distance_a_relative = load_parameter[4] + + if load_parameter[1] == False: + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.distance_b_relative = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_PARABOLIC": + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Member Load Direction + clientObject.load_direction = load_direction.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + individual_mass_components: bool=False, + mass_components = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + individual_mass_components (bool): Individiual Mass Components Option + mass_components (list): Mass Components + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + clientObject.load_type = MemberSetLoadType.E_TYPE_MASS.name + + # Member Load Distribution + clientObject.load_distribution= MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Individual Mass Components + if not isinstance(individual_mass_components, bool): + raise Exception("WARNING: Type of individual mass components should be bool. Kindly check inputs correctness.") + clientObject.individual_mass_components = individual_mass_components + + # Mass magnitude + if individual_mass_components == False: + clientObject.mass_global = mass_components[0] + else: + clientObject.mass_x = mass_components[0] + clientObject.mass_y = mass_components[1] + clientObject.mass_z = mass_components[2] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + load_over_total_length (bool): Load Over Total Length Option + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [tt, tb] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + for load_over_total_length: bool= False: + load_parameter = [tt1, tt2, tb1, tb2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_over_total_length: bool= True: + load_parameter = [tt1, tt2, tb1, tb2] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [tt1, tt2, tb1, tb2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [tb1, tb2, tb3, tt1, tt2, tt3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_TEMPERATURE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==2 + except: + raise Exception("WARNING: Load parameter array length should be 2 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_t_b = load_parameter[0] + clientObject.magnitude_t_t = load_parameter[1] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter)==8 + except: + raise Exception("WARNING: Load parameter array length should be 8 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_t_1 = load_parameter[2] + clientObject.magnitude_t_t_2 = load_parameter[3] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter)==8 + except: + raise Exception("WARNING: Load parameter array length should be 8 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_t_1 = load_parameter[2] + clientObject.magnitude_t_t_2 = load_parameter[3] + + if not isinstance(load_parameter[4], bool): + raise Exception("WARNING: Type of the fourth load parameter should be bool. Kindly check inputs correctness.") + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if not isinstance(load_parameter[5], bool): + raise Exception("WARNING: Type of the fifth load parameter should be bool. Kindly check inputs correctness.") + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_t_b_1 = load_parameter[0] + clientObject.magnitude_t_b_2 = load_parameter[1] + clientObject.magnitude_t_b_3 = load_parameter[2] + clientObject.magnitude_t_t_1 = load_parameter[3] + clientObject.magnitude_t_t_2 = load_parameter[4] + clientObject.magnitude_t_t_3 = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==4 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = load_parameter[i][2] + mlvlp.magnitude_delta_t = load_parameter[i][3] + mlvlp.magnitude_t_t = load_parameter[i][2] + mlvlp.magnitude_t_b = load_parameter[i][3] + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def TemperatureChange(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + load_over_total_length (bool): Load Over Total Length Option + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [tc, delta_t] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + for load_over_total_length: bool= False: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_over_total_length: bool= True: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [delta_t_1, delta_t_2, t_c_1, t_c_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [delta_t_1, delta_t_2, delta_t_3, t_c_1, t_c_2, t_c_3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_TEMPERATURE_CHANGE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==2 + except: + raise Exception("WARNING: Load parameter array length should be 2 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_delta_t = load_parameter[0] + clientObject.magnitude_t_c = load_parameter[1] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter)==8 + except: + raise Exception("WARNING: Load parameter array length should be 8 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_t_c_1 = load_parameter[2] + clientObject.magnitude_t_c_2 = load_parameter[3] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of the load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter)==8 + except: + raise Exception("WARNING: Load parameter array length should be 8 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_t_c_1 = load_parameter[2] + clientObject.magnitude_t_c_2 = load_parameter[3] + + if load_parameter[4] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[6] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[6] + + if load_parameter[5] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[7] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[7] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_delta_t_1 = load_parameter[0] + clientObject.magnitude_delta_t_2 = load_parameter[1] + clientObject.magnitude_delta_t_3 = load_parameter[2] + clientObject.magnitude_t_c_1 = load_parameter[3] + clientObject.magnitude_t_c_2 = load_parameter[4] + clientObject.magnitude_t_c_3 = load_parameter[5] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==4 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = load_parameter[i][2] + mlvlp.magnitude_delta_t = load_parameter[i][3] + mlvlp.magnitude_t_t = load_parameter[i][2] + mlvlp.magnitude_t_b = load_parameter[i][3] + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def AxialStrain(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_X, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + load_over_total_length (bool): Load Over Total Length Option + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [epsilon] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [epsilon1, epsilon2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [epsilon1, epsilon2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [epsilon1, epsilon2, epsilon3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_AXIAL_STRAIN + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==1 + except: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of the load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def AxialDisplacement(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_X, + magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Set + load_direction (enum): Load Direction Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_AXIAL_DISPLACEMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Precamber(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (enum): Load Parameters + load_over_total_length (bool): Load Over Total Lenth Option + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_PRECAMBER + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==1 + except: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of the load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if load_parameter[2] == True: + clientObject.distance_a_is_defined_as_relative = True + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_is_defined_as_relative = False + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3] == True: + clientObject.distance_b_is_defined_as_relative = True + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_is_defined_as_relative = False + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution.name == "LOAD_DISTRIBUTION_VARYING": + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def InitialPrestress(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_X, + magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_direction (enum): Load Direction Enumeration + magnitude (float): Load Magnitude + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_INITIAL_PRESTRESS + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + clientObject.magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Displacement(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + load_over_total_length (bool): Load Over Total Length Option + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_a] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_c_is_defined_as_relative = False, distance_a, distance_b, distance_c] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [magnitude_1, magnitude_2, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_DISPLACEMENT + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==1 + except: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_CONCENTRATED_1. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[2] + else: + clientObject.distance_a_absolute = load_parameter[2] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + try: + len(load_parameter)==5 + except: + raise Exception("WARNING: Load parameter array length should be 5 for LOAD_DISTRIBUTION_CONCENTRATED_N. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[3] + else: + clientObject.distance_a_absolute = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[4] + else: + clientObject.distance_b_absolute = load_parameter[4] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + try: + len(load_parameter)==7 + except: + raise Exception("WARNING: Load parameter array length should be 7 for LOAD_DISTRIBUTION_CONCENTRATED_2x2. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + clientObject.distance_c_is_defined_as_relative = load_parameter[3] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + if load_parameter[3]: + clientObject.distance_c_relative = load_parameter[6] + else: + clientObject.distance_c_absolute = load_parameter[6] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_2. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of the load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter)==6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter)==3 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def Rotation(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_Z, + load_parameter = [], + load_over_total_length: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_distribution (enum): Load Distribution Enumeration + load_direction (enum): Load Direction Enumeration + load_parameter (list): Load Parameters + load_over_total_length (bool): Load Over Total Length + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_a] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + load_parameter = [magnitude, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_c_is_defined_as_relative = False, distance_a, distance_b, distance_c] + for load_distrubition = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + load_parameter = [magnitude_1, magnitude_2, distance_a_is_defined_as_relative = False, distance_b_is_defined_as_relative = False, distance_a, distance_b] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZIODAL: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + load_parameter = [magnitude_1, magnitude_2, distance_a_relative = False, distance_a_relative = False, a_distance, b_distance] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + load_parameter = [magnitude_1, magnitude_2, magnitude_3] + for load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + load_parameter = [[distance, delta_distance, magnitude], ...] + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_ROTATION + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = load_distribution.name + + # Member Load Direction + clientObject.load_direction = load_direction.name + + #Load Magnitude + if load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + try: + len(load_parameter)==1 + except: + raise Exception("WARNING: Load parameter array length should be 1 for LOAD_DISTRIBUTION_UNIFORM. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_1: + try: + len(load_parameter) == 3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_CONCENTRATED_1. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[2] + else: + clientObject.distance_a_absolute = load_parameter[2] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_N: + try: + len(load_parameter) == 5 + except: + raise Exception("WARNING: Load parameter array length should be 5 for LOAD_DISTRIBUTION_CONCENTRATED_N. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[3] + else: + clientObject.distance_a_absolute = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[4] + else: + clientObject.distance_b_absolute = load_parameter[4] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2x2: + try: + len(load_parameter) == 7 + except: + raise Exception("WARNING: Load parameter array length should be 7 for LOAD_DISTRIBUTION_CONCENTRATED_2x2. Kindly check list inputs completeness and correctness.") + clientObject.magnitude = load_parameter[0] + clientObject.distance_a_is_defined_as_relative = load_parameter[1] + clientObject.distance_b_is_defined_as_relative = load_parameter[2] + clientObject.distance_c_is_defined_as_relative = load_parameter[3] + + if load_parameter[1]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[2]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + if load_parameter[3]: + clientObject.distance_c_relative = load_parameter[6] + else: + clientObject.distance_c_absolute = load_parameter[6] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_2: + try: + len(load_parameter) == 6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_CONCENTRATED_2. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_CONCENTRATED_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TRAPEZOIDAL: + try: + len(load_parameter) == 6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TRAPEZOIDAL. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + if not isinstance(load_over_total_length, bool): + raise Exception("WARNING: Type of the load over total length should be bool. Kindly check inputs correctness.") + + if load_over_total_length == False: + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + else: + clientObject.load_is_over_total_length = True + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_TAPERED: + try: + len(load_parameter) == 6 + except: + raise Exception("WARNING: Load parameter array length should be 6 for LOAD_DISTRIBUTION_TAPERED. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.distance_a_is_defined_as_relative = load_parameter[2] + clientObject.distance_b_is_defined_as_relative = load_parameter[3] + + if load_parameter[2]: + clientObject.distance_a_relative = load_parameter[4] + else: + clientObject.distance_a_absolute = load_parameter[4] + + if load_parameter[3]: + clientObject.distance_b_relative = load_parameter[5] + else: + clientObject.distance_b_absolute = load_parameter[5] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_PARABOLIC: + try: + len(load_parameter) == 3 + except: + raise Exception("WARNING: Load parameter array length should be 3 for LOAD_DISTRIBUTION_PARABOLIC. Kindly check list inputs completeness and correctness.") + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + elif load_distribution == MemberSetLoadDistribution.LOAD_DISTRIBUTION_VARYING: + try: + len(load_parameter[0])==3 + except: + print("WARNING: MemberSetLoad no: %x, load case: %x - Wrong data input." % (no, load_case_no)) + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:member_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:member_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + mlvlp.magnitude_t_c = 0.0 + mlvlp.magnitude_delta_t = 0.0 + mlvlp.magnitude_t_t = 0.0 + mlvlp.magnitude_t_b = 0.0 + + clientObject.varying_load_parameters.member_set_load_varying_load_parameters.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def PipeContentFull(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_direction_orientation = MemberSetLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, + specific_weight : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_direction_orientation (enum): Load Direction Orientation Enumeration + specific_weight (float): Specific Weight + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_PIPE_CONTENT_FULL + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + #Member Load Orientation + clientObject.load_direction_orientation = load_direction_orientation.name + + #Load Magnitude + clientObject.magnitude = specific_weight + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def PipeContentPartial(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + load_direction_orientation = MemberSetLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, + specific_weight : float = 0.0, + filling_height : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + load_direction_orientation (enum): Load Direction Orientation Enumeration + specific_weight (float): Specific Weight + filling_height (float): Filling Height + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_PIPE_CONTENT_PARTIAL + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + #Member Load Orientation + clientObject.load_direction_orientation = load_direction_orientation.name + + #Load Magnitude + clientObject.magnitude = specific_weight + + #Filling Height + clientObject.filling_height = filling_height + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def PipeInternalPressure(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + pressure : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + pressure (float): Pressure + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_PIPE_INTERNAL_PRESSURE + clientObject.load_type = load_type.name + + # Member Load Distribution + clientObject.load_distribution = MemberSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Member Load Direction + clientObject.load_direction = MemberSetLoadDirection.LOAD_DIRECTION_LOCAL_X.name + + #Load Magnitude + clientObject.magnitude = pressure + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) + + def RotaryMotion(self, + no: int = 1, + load_case_no: int = 1, + member_sets: str = '1', + angular_acceleration : float = 0.0, + angular_velocity : float = 0.0, + axis_definition_type = MemberSetLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS, + axis_orientation = MemberSetLoadAxisDefinitionAxisOrientation.AXIS_POSITIVE, + axis_definition = MemberSetLoadAxisDefinition.AXIS_X, + axis_definition_p1 = [], + axis_definition_p2 = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + member_sets (str): Assigned Member Sets + angular_acceleration (float): Angular Acceleration + angular_velocity (float): Angular Velocity + axis_definition_type (enum): Axis Definition Type Enumeration + axis_orientation (enum): Axis Orientation Enumeration + axis_definition (enum): Axis Definition Enumeration + axis_definition_p1 (list):Axis Definition First Point + axis_definition_p2 (list): Axis Definition Second Point + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Member Load + clientObject = Model.clientModel.factory.create('ns0:member_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Members No. (e.g. '5 6 7 12') + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Load Type + load_type = MemberSetLoadType.LOAD_TYPE_ROTARY_MOTION + clientObject.load_type = load_type.name + + #Angular Acceleration + clientObject.angular_acceleration = angular_acceleration + + #Angular Velocity + clientObject.angular_velocity = angular_velocity + + #Axis Definition Type + clientObject.axis_definition_type = axis_definition_type.name + + #Axis definition + if clientObject.axis_definition_type == "AXIS_DEFINITION_TWO_POINTS": + clientObject.axis_definition_p1_x = axis_definition_p1[0] + clientObject.axis_definition_p1_y = axis_definition_p1[1] + clientObject.axis_definition_p1_z = axis_definition_p1[2] + + clientObject.axis_definition_p2_x = axis_definition_p2[0] + clientObject.axis_definition_p2_y = axis_definition_p2[1] + clientObject.axis_definition_p2_z = axis_definition_p2[2] + + elif clientObject.axis_definition_type == "AXIS_DEFINITION_POINT_AND_AXIS": + clientObject.axis_definition_p1_x = axis_definition_p1[0] + clientObject.axis_definition_p1_y = axis_definition_p1[1] + clientObject.axis_definition_p1_z = axis_definition_p1[2] + + clientObject.axis_definition_axis = axis_definition.name + clientObject.axis_definition_axis_orientation = axis_orientation.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Load Member Load to client model + Model.clientModel.service.set_member_set_load(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/nodalLoad.py b/docs/RFEM/Loads/nodalLoad.py new file mode 100644 index 00000000..9f2f2227 --- /dev/null +++ b/docs/RFEM/Loads/nodalLoad.py @@ -0,0 +1,525 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import LoadDirectionType, NodalLoadType, NodalLoadSpecificDirectionType + +class NodalLoad(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + nodes_no: str= '1', + load_direction= LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, + magnitude: float = 0.0, + comment: str= '', + params: dict= {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + nodes_no (str): Assigned Nodes + load_direction (enum): Load Direction Enumeration + magnitude (float): Force Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Nodal Force + clientObject = Model.clientModel.factory.create('ns0:nodal_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Nodal Force No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Nodes No. (e.g. '5 6 7 12') + clientObject.nodes = ConvertToDlString(nodes_no) + + # Force Direction + clientObject.load_direction = load_direction.name + + # Load Type + load_type = NodalLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + # Magnitude + clientObject.force_magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Nodal Force to client model + Model.clientModel.service.set_nodal_load(load_case_no, clientObject) + + def Force(self, + no: int= 1, + load_case_no: int = 1, + nodes_no: str= '1', + load_direction= LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, + magnitude: float= 0.0, + force_eccentricity: bool = False, + specific_direction: bool = False, + shifted_display: bool = False, + comment: str= '', + params= {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + nodes_no (str): Assigned Nodes + load_direction (enum): Load Direction Enumeration + magnitude (float): Force Magnitude + force_eccentricity (bool): Enable/Disable Force Eccentricity Option + specific_direction (bool): Enable/Disable Specific Direction Option + shifted_display (bool): Enable/Disable Shifted Display Option + comment (str, optional): Comments + params (dict, optional): + + For specific_direction type DIRECTION_TYPE_ROTATED_VIA_3_ANGLES; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES, NodalLoadAxesSequence, angle_1, angle_2, angle_3, angle_x, angle_y, angle_z]} + For specific_direction type DIRECTION_TYPE_DIRECTED_TO_NODE; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_DIRECTED_TO_NODE, nodes_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_TWO_NODES; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_TWO_NODES, nodes_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE, line_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER, member_no]} + For force_eccentricity; + params={'force_eccentricity' : [ex, ey, ez]} + For shifted_display; + params={'shifted_display' : [offset_x, offset_y, offset_y, distance]} + """ + # Client model | Nodal Force + clientObject = Model.clientModel.factory.create('ns0:nodal_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Nodal Force No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Nodes No. (e.g. '5 6 7 12') + clientObject.nodes = ConvertToDlString(nodes_no) + + # Force Direction + clientObject.load_direction = load_direction.name + + # Load Type + load_type = NodalLoadType.LOAD_TYPE_FORCE + clientObject.load_type = load_type.name + + ## Force Magnitude + clientObject.force_magnitude = magnitude + + #Option Check + if force_eccentricity and shifted_display: + raise Exception("Only one of force_eccentiricity and shifted_display could be TRUE") + + # Specific Direction + if specific_direction: + + if 'specific_direction' not in list(params.keys()): + raise Exception("Required key is missing") + + params_s = params['specific_direction'] + + clientObject.has_specific_direction = specific_direction + clientObject.specific_direction_type = params_s[0].name + + if params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES: + clientObject.axes_sequence = params_s[1].name + clientObject.rotated_about_angle_1 = params_s[2] + clientObject.rotated_about_angle_2 = params_s[3] + clientObject.rotated_about_angle_3 = params_s[4] + clientObject.rotated_about_angle_x = params_s[5] + clientObject.rotated_about_angle_y = params_s[6] + clientObject.rotated_about_angle_z = params_s[7] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_DIRECTED_TO_NODE: + clientObject.directed_to_node_direction_node = params_s[1] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_TWO_NODES: + clientObject.parallel_to_two_nodes_first_node = params_s[1] + clientObject.parallel_to_two_nodes_second_node = params_s[2] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE: + clientObject.parallel_to_line = params_s[1] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER: + clientObject.parallel_to_member = params_s[1] + + #Force Eccentiricity + if force_eccentricity: + + if 'force_eccentricity' not in list(params.keys()): + raise Exception("Required key is missing") + + params_e = params['force_eccentricity'] + + clientObject.has_force_eccentricity = True + + clientObject.force_eccentricity_x = params_e[0] + clientObject.force_eccentricity_y = params_e[1] + clientObject.force_eccentricity_z = params_e[2] + + #Shifted Display + if shifted_display: + + if 'shifted_display' not in list(params.keys()): + raise Exception("Required key is missing") + + params_d = params['shifted_display'] + + clientObject.has_shifted_display = shifted_display + + clientObject.offset_x = params_d[0] + clientObject.offset_y = params_d[1] + clientObject.offset_z = params_d[2] + clientObject.size_or_distance = params_d[3] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'specific_direction' or 'force_eccentricity' or 'force_eccentricity' in params.keys(): + pass + else: + for key in params: + clientObject[key] = params[key] + + # Add Nodal Force to client model + Model.clientModel.service.set_nodal_load(load_case_no, clientObject) + + def Moment(self, + no: int= 1, + load_case_no: int= 1, + nodes_no: str= '1', + load_direction= LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, + moment_magnitude: float= 0.0, + specific_direction: bool= False, + shifted_display: bool= False, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + nodes_no (str): Assigned Nodes + load_direction (enum): Load Direction Enumeration + moment_magnitude (float): Moment Magnitude + specific_direction (bool): Enable/Disable Specific Direction Option + shifted_display (bool): Enable/Disable Shifted Display Option + comment (str, optional): Comments + params (dict, optional): + For specific_direction type DIRECTION_TYPE_ROTATED_VIA_3_ANGLES; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES, NodalLoadAxesSequence, angle_1, angle_2, angle_3, angle_x, angle_y, angle_z]} + For specific_direction type DIRECTION_TYPE_DIRECTED_TO_NODE; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_DIRECTED_TO_NODE, nodes_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_TWO_NODES; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_TWO_NODES, nodes_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE, line_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER, member_no]} + For shifted_display; + params={'shifted_display' : [offset_x, offset_y, offset_y, distance]} + """ + # Client model | Nodal Force + clientObject = Model.clientModel.factory.create('ns0:nodal_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Nodal Force No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Nodes No. (e.g. '5 6 7 12') + clientObject.nodes = ConvertToDlString(nodes_no) + + # Force Direction + clientObject.load_direction = load_direction.name + + # Load Type + load_type = NodalLoadType.LOAD_TYPE_MOMENT + clientObject.load_type = load_type.name + + ## Force Magnitude + clientObject.moment_magnitude = moment_magnitude + + # Specific Direction + if specific_direction: + + if 'specific_direction' not in list(params.keys()): + raise Exception("Required key is missing") + + params_s = params['specific_direction'] + + clientObject.has_specific_direction = specific_direction + clientObject.specific_direction_type = params_s[0].name + + if params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES: + clientObject.axes_sequence = params_s[1].name + clientObject.rotated_about_angle_1 = params_s[2] + clientObject.rotated_about_angle_2 = params_s[3] + clientObject.rotated_about_angle_3 = params_s[4] + clientObject.rotated_about_angle_x = params_s[5] + clientObject.rotated_about_angle_y = params_s[6] + clientObject.rotated_about_angle_z = params_s[7] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_DIRECTED_TO_NODE: + clientObject.directed_to_node_direction_node = params_s[1] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_TWO_NODES: + clientObject.parallel_to_two_nodes_first_node = params_s[1] + clientObject.parallel_to_two_nodes_second_node = params_s[2] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE: + clientObject.parallel_to_line = params_s[1] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER: + clientObject.parallel_to_member = params_s[1] + + #Shifted Display + if shifted_display: + + if 'shifted_display' not in list(params.keys()): + raise Exception("Required key is missing") + + params_d = params['shifted_display'] + + clientObject.has_shifted_display = shifted_display + + clientObject.offset_x = params_d[0] + clientObject.offset_y = params_d[1] + clientObject.offset_z = params_d[2] + clientObject.size_or_distance = params_d[3] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'specific_direction' or 'force_eccentricity' in params.keys(): + pass + else: + for key in params: + clientObject[key] = params[key] + + # Add Nodal Force to client model + Model.clientModel.service.set_nodal_load(load_case_no, clientObject) + + def Components(self, + no: int= 1, + load_case_no: int= 1, + nodes_no: str= '1', + components = [], + specific_direction: bool= False, + force_eccentricity: bool= False, + shifted_display: bool= False, + comment: str= '', + params: dict= {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + nodes_no (str): Assigned Nodes + components (list): Component Magnitude List + specific_direction (bool): Enable/Disable Specific Direction Option + force_eccentricity(bool): Enable/Disable Force Direction Option + shifted_display(bool): Enable/Disable Shifted Display Option + comment (str, optional): Comments + params (dict, optional): + For specific_direction type DIRECTION_TYPE_ROTATED_VIA_3_ANGLES; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES, NodalLoadAxesSequence, angle_1, angle_2, angle_3, angle_x, angle_y, angle_z]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE, line_no]} + For specific_direction type DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER; + params={'specific_direction' : [NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER, member_no]} + For force_eccentricity; + params={'force_eccentricity' : [ex, ey, ez]} + + For shifted_display; + params={'shifted_display' : [offset_x, offset_y, offset_y, distance]} + """ + # Client model | Nodal Force + clientObject = Model.clientModel.factory.create('ns0:nodal_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Nodal Force No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Nodes No. (e.g. '5 6 7 12') + clientObject.nodes = ConvertToDlString(nodes_no) + + # Load Type + load_type = NodalLoadType.LOAD_TYPE_COMPONENTS + clientObject.load_type = load_type.name + + #Load Magnitudes + if len(components) == 6: + clientObject.components_force_x = components[0] + clientObject.components_force_y = components[1] + clientObject.components_force_z = components[2] + + clientObject.components_moment_x = components[3] + clientObject.components_moment_y = components[4] + clientObject.components_moment_z = components[5] + else: + raise Exception("WARNING: The components must contain 6 elements. Kindly check list inputs for completeness and correctness.") + + #Option Check + if force_eccentricity and shifted_display: + raise Exception("WARNING: Only one of force_eccentiricity and shifted_display could be TRUE") + + # Specific Direction + if specific_direction: + + if 'specific_direction' not in list(params.keys()): + raise Exception("Required key is missing") + + params_s = params['specific_direction'] + + clientObject.has_specific_direction = specific_direction + clientObject.specific_direction_type = params_s[0].name + + if params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_ROTATED_VIA_3_ANGLES: + clientObject.axes_sequence = params_s[1].name + clientObject.rotated_about_angle_1 = params_s[2] + clientObject.rotated_about_angle_2 = params_s[3] + clientObject.rotated_about_angle_3 = params_s[4] + clientObject.rotated_about_angle_x = params_s[5] + clientObject.rotated_about_angle_y = params_s[6] + clientObject.rotated_about_angle_z = params_s[7] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE: + clientObject.parallel_to_line = params_s[1] + + elif params_s[0] == NodalLoadSpecificDirectionType.DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER: + clientObject.parallel_to_member = params_s[1] + + #Force Eccentiricity + if force_eccentricity: + + if 'force_eccentricity' not in list(params.keys()): + raise Exception("Required key is missing") + + params_e = params['force_eccentricity'] + + clientObject.has_force_eccentricity = force_eccentricity + + clientObject.force_eccentricity_x = params_e[0] + clientObject.force_eccentricity_y = params_e[1] + clientObject.force_eccentricity_z = params_e[2] + + #Shifted Display + if shifted_display: + + if 'shifted_display' not in list(params.keys()): + raise Exception("Required key is missing") + + params_d = params['shifted_display'] + + clientObject.has_shifted_display = shifted_display + + clientObject.offset_x = params_d[0] + clientObject.offset_y = params_d[1] + clientObject.offset_z = params_d[2] + clientObject.size_or_distance = params_d[3] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'specific_direction' or 'force_eccentricity' or 'force_eccentricity' in params.keys(): + pass + else: + for key in params: + clientObject[key] = params[key] + + # Add Nodal Force to client model + Model.clientModel.service.set_nodal_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + nodes_no: str = '1', + individual_mass_components : bool = False, + mass = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Load Case Number + nodes_no (str): Assigned Nodes + individual_mass_components (bool): Enable/Disable Mass Component Option + mass (list): + if individual_mass_components == False: + mass = [M] + elif individual_mass_components == True: + mass = [Mx, My, Mz, Ix, Iy, Iz] + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Nodal Force + clientObject = Model.clientModel.factory.create('ns0:nodal_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Nodal Force No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Nodes No. (e.g. '5 6 7 12') + clientObject.nodes = ConvertToDlString(nodes_no) + + # Load Type + load_type = NodalLoadType.LOAD_TYPE_MASS + clientObject.load_type = load_type.name + + # Magnitude + if individual_mass_components: + + clientObject.individual_mass_components = individual_mass_components + clientObject.mass_x = mass[0] + clientObject.mass_y = mass[1] + clientObject.mass_z = mass[2] + + clientObject.mass_moment_of_inertia_x = mass[3] + clientObject.mass_moment_of_inertia_y = mass[4] + clientObject.mass_moment_of_inertia_z = mass[5] + + else: + clientObject.individual_mass_components = individual_mass_components + + clientObject.mass_global = mass[0] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + if 'individual_mass_components' not in params.keys(): + for key in params: + clientObject[key] = params[key] + + # Add Nodal Force to client model + Model.clientModel.service.set_nodal_load(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/solidLoad.py b/docs/RFEM/Loads/solidLoad.py new file mode 100644 index 00000000..5749247c --- /dev/null +++ b/docs/RFEM/Loads/solidLoad.py @@ -0,0 +1,277 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SolidLoadType, SolidLoadDistribution, SolidLoadDirection + +class SolidLoad(): + + def __init__(self, + no: int =1, + load_case_no: int = 1, + solids_no: str= '1', + load_type = SolidLoadType.LOAD_TYPE_FORCE, + load_distribution = SolidLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = SolidLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solids = ConvertToDlString(solids_no) + + # Load Type + clientObject.load_type = load_type.name + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_load(load_case_no, clientObject) + + def Force(self, + no: int =1, + load_case_no: int = 1, + solids_no: str= '1', + load_direction = SolidLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solids = ConvertToDlString(solids_no) + + # Load Type + clientObject.load_type = SolidLoadType.LOAD_TYPE_FORCE.name + + # Load Distribution + clientObject.load_distribution = SolidLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + solids_no: str= '1', + load_distribution = SolidLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + LOAD_DISTRIBUTION_UNIFORM: load_parameter = magnitude + LOAD_DISTRIBUTION_LINEAR_IN_X: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Y: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Z: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solids = ConvertToDlString(solids_no) + + # Load Type + clientObject.load_type = SolidLoadType.LOAD_TYPE_TEMPERATURE.name + + # Load Distribution + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.uniform_magnitude = load_parameter + else: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + clientObject.load_distribution = load_distribution.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_load(load_case_no, clientObject) + + def Strain(self, + no: int = 1, + load_case_no: int = 1, + solids_no: str= '1', + load_distribution = SolidLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + LOAD_DISTRIBUTION_UNIFORM: load_parameter = [strain_uniform_magnitude_x, strain_uniform_magnitude_y, strain_uniform_magnitude_z] + LOAD_DISTRIBUTION_LINEAR_IN_X: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Y: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Z: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solids = ConvertToDlString(solids_no) + + # Load Type + clientObject.load_type = SolidLoadType.LOAD_TYPE_STRAIN.name + + # Load Distribution + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.strain_uniform_magnitude_x = load_parameter[0] + clientObject.strain_uniform_magnitude_y = load_parameter[1] + clientObject.strain_uniform_magnitude_z = load_parameter[2] + else: + clientObject.strain_magnitude_x1 = load_parameter[0] + clientObject.strain_magnitude_y1 = load_parameter[1] + clientObject.strain_magnitude_z1 = load_parameter[2] + clientObject.strain_magnitude_x2 = load_parameter[3] + clientObject.strain_magnitude_y2 = load_parameter[4] + clientObject.strain_magnitude_z2 = load_parameter[6] + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + + clientObject.load_distribution = load_distribution.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_load(load_case_no, clientObject) + + def Motion(self, + no: int = 1, + load_case_no: int = 1, + solids_no: str= '1', + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + load_parameter = [angular_velocity, angular_acceleration, axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z, axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solids = ConvertToDlString(solids_no) + + # Load Type + clientObject.load_type = SolidLoadType.LOAD_TYPE_ROTARY_MOTION.name + + # Velocity + clientObject.angular_velocity = load_parameter[0] + + # Acceleration + clientObject.angular_acceleration = load_parameter[1] + + # Axis Definition + clientObject.axis_definition_p1_x = load_parameter[2] + clientObject.axis_definition_p1_y = load_parameter[3] + clientObject.axis_definition_p1_z = load_parameter[4] + clientObject.axis_definition_p2_x = load_parameter[5] + clientObject.axis_definition_p2_y = load_parameter[6] + clientObject.axis_definition_p2_z = load_parameter[7] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_load(load_case_no, clientObject) + + #def Buoyancy(): + # print('The function Buoyancy() is not implemented yet.') + + #def Gas(): + # print('The function Gas() is not implemented yet.') diff --git a/docs/RFEM/Loads/solidSetLoad.py b/docs/RFEM/Loads/solidSetLoad.py new file mode 100644 index 00000000..90faa5d3 --- /dev/null +++ b/docs/RFEM/Loads/solidSetLoad.py @@ -0,0 +1,278 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SolidSetLoadType, SolidSetLoadDistribution, SolidSetLoadDirection + +class SolidSetLoad(): + + def __init__(self, + no: int =1, + load_case_no: int = 1, + solid_sets_no: str= '1', + load_type = SolidSetLoadType.LOAD_TYPE_FORCE, + load_distribution = SolidSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_direction = SolidSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_set_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solid_sets = ConvertToDlString(solid_sets_no) + + # Load Type + clientObject.load_type = load_type.name + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_set_load(load_case_no, clientObject) + + + def Force(self, + no: int =1, + load_case_no: int = 1, + solid_sets_no: str= '1', + load_direction = SolidSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + magnitude: float = 0, + comment: str = '', + params: dict = {}): + + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_set_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solid_sets = ConvertToDlString(solid_sets_no) + + # Load Type + clientObject.load_type = SolidSetLoadType.LOAD_TYPE_FORCE.name + + # Load Distribution + clientObject.load_distribution = SolidSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_set_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + solid_sets_no: str= '1', + load_distribution = SolidSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + LOAD_DISTRIBUTION_UNIFORM: load_parameter = magnitude + LOAD_DISTRIBUTION_LINEAR_IN_X: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Y: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Z: load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_set_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solid_sets = ConvertToDlString(solid_sets_no) + + # Load Type + clientObject.load_type = SolidSetLoadType.LOAD_TYPE_TEMPERATURE.name + + # Load Distribution + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.uniform_magnitude = load_parameter + else: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + clientObject.load_distribution = load_distribution.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_set_load(load_case_no, clientObject) + + def Strain(self, + no: int = 1, + load_case_no: int = 1, + solid_sets_no: str= '1', + load_distribution = SolidSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + LOAD_DISTRIBUTION_UNIFORM: load_parameter = [strain_uniform_magnitude_x, strain_uniform_magnitude_y, strain_uniform_magnitude_z] + LOAD_DISTRIBUTION_LINEAR_IN_X: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Y: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + LOAD_DISTRIBUTION_LINEAR_IN_Z: load_parameter = [strain_magnitude_x1, strain_magnitude_y1, strain_magnitude_z1, strain_magnitude_x2, strain_magnitude_y2, strain_magnitude_z2, node_1, node_2] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_set_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solid_sets = ConvertToDlString(solid_sets_no) + + # Load Type + clientObject.load_type = SolidSetLoadType.LOAD_TYPE_STRAIN.name + + # Load Distribution + if load_distribution.name == "LOAD_DISTRIBUTION_UNIFORM": + clientObject.strain_uniform_magnitude_x = load_parameter[0] + clientObject.strain_uniform_magnitude_y = load_parameter[1] + clientObject.strain_uniform_magnitude_z = load_parameter[2] + else: + clientObject.strain_magnitude_x1 = load_parameter[0] + clientObject.strain_magnitude_y1 = load_parameter[1] + clientObject.strain_magnitude_z1 = load_parameter[2] + clientObject.strain_magnitude_x2 = load_parameter[3] + clientObject.strain_magnitude_y2 = load_parameter[4] + clientObject.strain_magnitude_z2 = load_parameter[5] + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + + clientObject.load_distribution = load_distribution.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_set_load(load_case_no, clientObject) + + def Motion(self, + no: int = 1, + load_case_no: int = 1, + solid_sets_no: str= '1', + load_parameter = None, + comment: str = '', + params: dict = {}): + ''' + load_parameter: + load_parameter = [angular_velocity, angular_acceleration, axis_definition_p1_x, axis_definition_p1_y, axis_definition_p1_z, axis_definition_p2_x, axis_definition_p2_y, axis_definition_p2_z] + params: + {''} + ''' + # Client model | Solid Load + clientObject = Model.clientModel.factory.create('ns0:solid_set_load') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Load No. + clientObject.no = no + + # Load Case No. + clientObject.load_case = load_case_no + + # Assigned Solid No. + clientObject.solid_sets = ConvertToDlString(solid_sets_no) + + # Load Type + clientObject.load_type = SolidSetLoadType.LOAD_TYPE_ROTARY_MOTION.name + + # Velocity + clientObject.angular_velocity = load_parameter[0] + + # Acceleration + clientObject.angular_acceleration = load_parameter[1] + + # Axis Definition + clientObject.axis_definition_p1_x = load_parameter[2] + clientObject.axis_definition_p1_y = load_parameter[3] + clientObject.axis_definition_p1_z = load_parameter[4] + clientObject.axis_definition_p2_x = load_parameter[5] + clientObject.axis_definition_p2_y = load_parameter[6] + clientObject.axis_definition_p2_z = load_parameter[7] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Load to client model + Model.clientModel.service.set_solid_set_load(load_case_no, clientObject) + + #def Buoyancy(): + # print('The function Buoyancy() is not implemented yet.') + + #def Gas(): + # print('The function Gas() is not implemented yet.') diff --git a/docs/RFEM/Loads/surfaceLoad.py b/docs/RFEM/Loads/surfaceLoad.py new file mode 100644 index 00000000..756c5010 --- /dev/null +++ b/docs/RFEM/Loads/surfaceLoad.py @@ -0,0 +1,567 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SurfaceLoadType, SurfaceLoadDirection, SurfaceLoadDistribution, SurfaceLoadAxisDefinitionType + +class SurfaceLoad(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + magnitude: float = 1.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigend Surfaces + magnitude (float): Load Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_FORCE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Direction + clientObject.load_direction = SurfaceLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Load Distribution + clientObject.load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def Force(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + load_direction = SurfaceLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + load_direction (enum): Load Direction Enumeration + load_distribution (enum): Load Distribution Enumeration + load_parameter (list): + + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_1, magnitude_2, magnitude_3, node_1, node_2, node_3] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + if SurfaceLoadAxisDefinitionType == AXIS_DEFINITION_TWO_POINTS: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2, SurfaceLoadAxisDefinitionType, axis_definition_p1, axis_definition_p2] + if SurfaceLoadAxisDefinitionType == AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, axis_definition_p1] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + load_parameter = [[distance_1, delta_distance_1, magnitude_1], [distance_2, delta_distance_2, magnitude_2]...] + + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_FORCE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.uniform_magnitude = load_parameter[0] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + clientObject.node_1 = load_parameter[3] + clientObject.node_2 = load_parameter[4] + clientObject.node_3 = load_parameter[5] + + elif load_distribution in (SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y, \ + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + clientObject.axis_definition_type = load_parameter[4].name + if load_parameter[4] == SurfaceLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[5][0] + clientObject.axis_definition_p1_y = load_parameter[5][1] + clientObject.axis_definition_p1_z = load_parameter[5][2] + clientObject.axis_definition_p2_x = load_parameter[6][0] + clientObject.axis_definition_p2_y = load_parameter[6][1] + clientObject.axis_definition_p2_z = load_parameter[6][2] + + else: + clientObject.axis_definition_axis = load_parameter[5].name + clientObject.axis_definition_p1_x = load_parameter[6][0] + clientObject.axis_definition_p1_y = load_parameter[6][1] + clientObject.axis_definition_p1_z = load_parameter[6][2] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:surface_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:surface_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + clientObject.varying_load_parameters.surface_load_varying_load_parameters.append(mlvlp) + clientObject.varying_load_parameters_sorted = True + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + load_distribution (enum): Load Distribution Enumeration + load_parameter (list): + + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [t_c, delta_t] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, t_c_3, delta_t_3, node_1, node_2, node_3] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + if SurfaceLoadAxisDefinitionType == AXIS_DEFINITION_TWO_POINTS: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2, SurfaceLoadAxisDefinitionType, axis_definition_p1, axis_definition_p2] + if SurfaceLoadAxisDefinitionType == AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, axis_definition_p1] + + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_TEMPERATURE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.uniform_magnitude_t_c = load_parameter[0] + clientObject.uniform_magnitude_delta_t = load_parameter[1] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + clientObject.magnitude_t_c_3 = load_parameter[4] + clientObject.magnitude_delta_t_3 = load_parameter[5] + + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + clientObject.node_3 = load_parameter[8] + + elif load_distribution in (SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y,\ + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + clientObject.axis_definition_type = load_parameter[6].name + if load_parameter[6] == SurfaceLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[7] + clientObject.axis_definition_p1_y = load_parameter[8] + clientObject.axis_definition_p1_z = load_parameter[9] + + else: + clientObject.axis_definition_axis = load_parameter[7] + clientObject.axis_definition_p1 = load_parameter[8] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def AxialStrain(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + load_distribution (enum):Load Distribution Enumeration + load_parameter (list): + + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [axial_strain_x, axial_strain_y] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_axial_strain_1x, magnitude_axial_strain_1y, magnitude_axial_strain_2x, magnitude_axial_strain_2y, magnitude_axial_strain_3x, magnitude_axial_strain_3y, node_1, node_2, node_3] + for load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [magnitude_axial_strain_1x, magnitude_axial_strain_1y, magnitude_axial_strain_2x, magnitude_axial_strain_2y, node_1, node_2] + + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_AXIAL_STRAIN.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude_axial_strain_x = load_parameter[0] + clientObject.magnitude_axial_strain_y = load_parameter[1] + + elif load_distribution == SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_axial_strain_1x = load_parameter[0] + clientObject.magnitude_axial_strain_1y = load_parameter[1] + clientObject.magnitude_axial_strain_2x = load_parameter[2] + clientObject.magnitude_axial_strain_2y = load_parameter[3] + clientObject.magnitude_axial_strain_3x = load_parameter[4] + clientObject.magnitude_axial_strain_3y = load_parameter[5] + + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + clientObject.node_3 = load_parameter[8] + + elif load_distribution in (SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y,\ + SurfaceLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + clientObject.magnitude_axial_strain_1x = load_parameter[0] + clientObject.magnitude_axial_strain_1y = load_parameter[1] + clientObject.magnitude_axial_strain_2x = load_parameter[2] + clientObject.magnitude_axial_strain_2y = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def Precamber(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + uniform_magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + uniform_magnitude (float): Magnitude + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_PRECAMBER.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Distribution + clientObject.load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + #Load Direction + clientObject.load_direction = SurfaceLoadDirection.LOAD_DIRECTION_LOCAL_Z.name + + # Load Magnitude + clientObject.uniform_magnitude = uniform_magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def RotaryMotion(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + load_parameter (list): + + for axis_definition_type = SurfaceLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + load_parameter = [angular_velocity, angular_acceleration, SurfaceLoadAxisDefinitionType, [x1, y1, z1], [x2, y2, z2]] + for axis_definition_type = SurfaceLoadAxisDefinitionType.AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [angular_velocity, angular_acceleration, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, SurfaceLoadAxisDirectionType; [x1, y1, z1]] + + comment (str, optional): Comments + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_ROTARY_MOTION.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Magnitude + clientObject.angular_acceleration = load_parameter[0] + clientObject.angular_velocity = load_parameter[1] + clientObject.axis_definition_type = load_parameter[2].name + + if load_parameter[2] == SurfaceLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[3][0] + clientObject.axis_definition_p1_y = load_parameter[3][1] + clientObject.axis_definition_p1_z = load_parameter[3][2] + + clientObject.axis_definition_p1_x = load_parameter[4][0] + clientObject.axis_definition_p1_y = load_parameter[4][1] + clientObject.axis_definition_p1_z = load_parameter[4][2] + + else: + clientObject.axis_definition_axis = load_parameter[3].name + clientObject.axis_definition_axis_orientation = load_parameter[4].name + clientObject.axis_definition_p1_x = load_parameter[5][0] + clientObject.axis_definition_p1_y = load_parameter[5][1] + clientObject.axis_definition_p1_z = load_parameter[5][2] + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + surface_no: str = '1', + individual_mass_components : bool = False, + mass_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_no (str): Assigned Surfaces + individual_mass_components (bool): Enable/Disable Individual Mass Components Option + mass_parameter (list): + + if individual_mass_components == True: + mass_parameter = [mass_global] + elif individual_mass_components == False: + mass_parameter = [mass_x, mass_y, mass_z] + + comment (str, optional): + params (dict, optional): + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceLoadType.LOAD_TYPE_MASS.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surfaces = ConvertToDlString(surface_no) + + # Load Distribution + clientObject.load_distribution = SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + #Load Direction + clientObject.load_direction = SurfaceLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + #Individual Mass Components + clientObject.individual_mass_components = individual_mass_components + + # Load Magnitude + if individual_mass_components: + clientObject.magnitude_mass_x = mass_parameter[0] + clientObject.magnitude_mass_y = mass_parameter[1] + clientObject.magnitude_mass_z = mass_parameter[2] + else: + clientObject.magnitude_mass_global = mass_parameter[0] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_load(load_case_no, clientObject) diff --git a/docs/RFEM/Loads/surfacesetload.py b/docs/RFEM/Loads/surfacesetload.py new file mode 100644 index 00000000..d58b2d2c --- /dev/null +++ b/docs/RFEM/Loads/surfacesetload.py @@ -0,0 +1,561 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SurfaceSetLoadType, SurfaceSetLoadDirection, SurfaceSetLoadDistribution, SurfaceSetLoadAxisDefinitionType + +class SurfaceSetLoad(): + + def __init__(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + magnitude: float = 1.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + magnitude (float): Load Magnitude + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_FORCE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Direction + clientObject.load_direction = SurfaceSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE.name + + # Load Magnitude + clientObject.uniform_magnitude = magnitude + + # Load Distribution + clientObject.load_distribution = SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def Force(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + load_direction = SurfaceSetLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, + load_distribution = SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + load_direction (enum): Load Direction Enumeration + load_distribution (enum): Load Distribution Enumeration + load_parameter (list): Load Parameters + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [magnitude] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_1, magnitude_2, magnitude_3, node_1, node_2, node_3] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + if SurfaceSetLoadAxisDefinitionType == AXIS_DEFINITION_TWO_POINTS: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2, SurfaceLoadAxisDefinitionType, axis_definition_p1, axis_definition_p2] + if SurfaceSetLoadAxisDefinitionType == AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [magnitude_1, magnitude_2, node_1, node_2, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, axis_definition_p1] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + load_parameter = [[distance_1, delta_distance_1, magnitude_1], [distance_2, delta_distance_2, magnitude_2]...] + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_FORCE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Direction + clientObject.load_direction = load_direction.name + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.uniform_magnitude = load_parameter[0] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + clientObject.magnitude_3 = load_parameter[2] + + clientObject.node_1 = load_parameter[3] + clientObject.node_2 = load_parameter[4] + clientObject.node_3 = load_parameter[5] + + elif load_distribution in (SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + clientObject.magnitude_1 = load_parameter[0] + clientObject.magnitude_2 = load_parameter[1] + + clientObject.node_1 = load_parameter[2] + clientObject.node_2 = load_parameter[3] + + clientObject.axis_definition_type = load_parameter[4].name + if load_parameter[4] == SurfaceSetLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[5][0] + clientObject.axis_definition_p1_y = load_parameter[5][1] + clientObject.axis_definition_p1_z = load_parameter[5][2] + clientObject.axis_definition_p2_x = load_parameter[6][0] + clientObject.axis_definition_p2_y = load_parameter[6][1] + clientObject.axis_definition_p2_z = load_parameter[6][2] + + else: + clientObject.axis_definition_axis = load_parameter[5].name + clientObject.axis_definition_p1_x = load_parameter[6][0] + clientObject.axis_definition_p1_y = load_parameter[6][1] + clientObject.axis_definition_p1_z = load_parameter[6][2] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_VARYING_IN_Z: + + clientObject.varying_load_parameters = Model.clientModel.factory.create('ns0:surface_set_load.varying_load_parameters') + for i,j in enumerate(load_parameter): + mlvlp = Model.clientModel.factory.create('ns0:surface_set_load_varying_load_parameters') + mlvlp.no = i+1 + mlvlp.distance = load_parameter[i][0] + mlvlp.delta_distance = load_parameter[i][1] + mlvlp.magnitude = load_parameter[i][2] + mlvlp.note = None + clientObject.varying_load_parameters.surface_set_load_varying_load_parameters.append(mlvlp) + clientObject.varying_load_parameters_sorted = True + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def Temperature(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + load_distribution = SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = None, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + load_distribution (enum): Load Distribution Enumeration + load_parameter (enum): Load Parameter Enumeration + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [t_c, delta_t] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, t_c_3, delta_t_3, node_1, node_2, node_3] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2] + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + if SurfaceSetLoadAxisDefinitionType == AXIS_DEFINITION_TWO_POINTS: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2, SurfaceLoadAxisDefinitionType, axis_definition_p1, axis_definition_p2] + if SurfaceSetLoadAxisDefinitionType == AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [t_c_1, delta_t_1, t_c_2, delta_t_2, node_1, node_2, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, axis_definition_p1] + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_TEMPERATURE.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.uniform_magnitude_t_c = load_parameter[0] + clientObject.uniform_magnitude_delta_t = load_parameter[1] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + clientObject.magnitude_t_c_3 = load_parameter[4] + clientObject.magnitude_delta_t_3 = load_parameter[5] + + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + clientObject.node_3 = load_parameter[8] + + elif load_distribution in (SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_RADIAL: + clientObject.magnitude_t_c_1 = load_parameter[0] + clientObject.magnitude_delta_t_1 = load_parameter[1] + + clientObject.magnitude_t_c_2 = load_parameter[2] + clientObject.magnitude_delta_t_2 = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + clientObject.axis_definition_type = load_parameter[6].name + if load_parameter[6] == SurfaceSetLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[7] + clientObject.axis_definition_p1_y = load_parameter[8] + clientObject.axis_definition_p1_z = load_parameter[9] + + else: + clientObject.axis_definition_axis = load_parameter[7] + clientObject.axis_definition_p1 = load_parameter[8] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def AxialStrain(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + load_distribution = SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + load_distribution (enum): Load Distribution Enumeration + load_parameter (list): Load Parameter + comment (str, optional): Comment + params (dict, optional): Parameters + + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + load_parameter = [axial_strain_x, axial_strain_y] + + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + load_parameter = [magnitude_axial_strain_1x, magnitude_axial_strain_1y, magnitude_axial_strain_2x, magnitude_axial_strain_2y, magnitude_axial_strain_3x, magnitude_axial_strain_3y, node_1, node_2, node_3] + + for load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_X: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Y: + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_Z: + load_parameter = [magnitude_axial_strain_1x, magnitude_axial_strain_1y, magnitude_axial_strain_2x, magnitude_axial_strain_2y, node_1, node_2] + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_AXIAL_STRAIN.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Distribution + clientObject.load_distribution = load_distribution.name + + # Load Magnitude + if load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM: + clientObject.magnitude_axial_strain_x = load_parameter[0] + clientObject.magnitude_axial_strain_y = load_parameter[1] + + elif load_distribution == SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR: + clientObject.magnitude_axial_strain_1x = load_parameter[0] + clientObject.magnitude_axial_strain_1y = load_parameter[1] + clientObject.magnitude_axial_strain_2x = load_parameter[2] + clientObject.magnitude_axial_strain_2y = load_parameter[3] + clientObject.magnitude_axial_strain_3x = load_parameter[4] + clientObject.magnitude_axial_strain_3y = load_parameter[5] + + clientObject.node_1 = load_parameter[6] + clientObject.node_2 = load_parameter[7] + clientObject.node_3 = load_parameter[8] + + elif load_distribution in (SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_X, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Y, + SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_LINEAR_IN_Z): + clientObject.magnitude_axial_strain_1x = load_parameter[0] + clientObject.magnitude_axial_strain_1y = load_parameter[1] + clientObject.magnitude_axial_strain_2x = load_parameter[2] + clientObject.magnitude_axial_strain_2y = load_parameter[3] + + clientObject.node_1 = load_parameter[4] + clientObject.node_2 = load_parameter[5] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def Precamber(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + uniform_magnitude : float = 0.0, + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + uniform_magnitude (float): Load Magnitude + comment (str, optional): Comment + params (dict, optional): Parameters + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_PRECAMBER.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Distribution + clientObject.load_distribution = SurfaceSetLoadDistribution.LOAD_DISTRIBUTION_UNIFORM.name + + #Load Direction + clientObject.load_direction = SurfaceSetLoadDirection.LOAD_DIRECTION_LOCAL_Z.name + + # Load Magnitude + clientObject.uniform_magnitude = uniform_magnitude + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def RotaryMotion(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + load_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + load_parameter (list): Load Parameters + comment (str, optional): Comment + params (dict, optional): Parameters + + for axis_definition_type = SurfaceSetLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + load_parameter = [angular_velocity, angular_acceleration, SurfaceLoadAxisDefinitionType, [x1, y1, z1], [x2, y2, z2]] + for axis_definition_type = SurfaceSetLoadAxisDefinitionType.AXIS_DEFINITION_POINT_AND_AXIS: + load_parameter = [angular_velocity, angular_acceleration, SurfaceLoadAxisDefinitionType, SurfaceLoadAxisDefinitionAxis, SurfaceLoadAxisDirectionType; [x1, y1, z1]] + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_ROTARY_MOTION.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + # Load Magnitude + clientObject.angular_acceleration = load_parameter[0] + clientObject.angular_velocity = load_parameter[1] + clientObject.axis_definition_type = load_parameter[2].name + + if load_parameter[2] == SurfaceSetLoadAxisDefinitionType.AXIS_DEFINITION_TWO_POINTS: + clientObject.axis_definition_p1_x = load_parameter[3][0] + clientObject.axis_definition_p1_y = load_parameter[3][1] + clientObject.axis_definition_p1_z = load_parameter[3][2] + + clientObject.axis_definition_p1_x = load_parameter[4][0] + clientObject.axis_definition_p1_y = load_parameter[4][1] + clientObject.axis_definition_p1_z = load_parameter[4][2] + + else: + clientObject.axis_definition_axis = load_parameter[3].name + clientObject.axis_definition_axis_orientation = load_parameter[4].name + clientObject.axis_definition_p1_x = load_parameter[5][0] + clientObject.axis_definition_p1_y = load_parameter[5][1] + clientObject.axis_definition_p1_z = load_parameter[5][2] + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) + + def Mass(self, + no: int = 1, + load_case_no: int = 1, + surface_sets: str = '1', + individual_mass_components : bool = False, + mass_parameter = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Load Tag + load_case_no (int): Assigned Load Case + surface_sets (str): Assigned Surface Sets + individual_mass_components (bool): Individiual Mass Components Option + mass_parameter (list): Mass Parameters + comment (str, optional): Comment + params (dict, optional): Parameters + + for individual_mass_components == True: + mass_parameter = [mass_global] + for individual_mass_components == False: + mass_parameter = [mass_x, mass_y, mass_z] + """ + # Client model | Surface Load + clientObject = Model.clientModel.factory.create('ns0:surface_set_load') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Load No. + clientObject.no = no + + # Load Type + clientObject.load_type = SurfaceSetLoadType.LOAD_TYPE_MASS.name + # Load Case No. + clientObject.load_case = load_case_no + + # Surfaces No. (e.g. '5 6 7 12') + clientObject.surface_sets = ConvertToDlString(surface_sets) + + #Individual Mass Components + clientObject.individual_mass_components = individual_mass_components + + # Load Magnitude + if individual_mass_components: + clientObject.magnitude_mass_x = mass_parameter[0] + clientObject.magnitude_mass_y = mass_parameter[1] + clientObject.magnitude_mass_z = mass_parameter[2] + else: + clientObject.magnitude_mass_global = mass_parameter[0] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Load to client model + Model.clientModel.service.set_surface_set_load(load_case_no, clientObject) diff --git a/docs/RFEM/SpecialObjects/__init__.py b/docs/RFEM/SpecialObjects/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/SpecialObjects/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/SpecialObjects/enlargedColumnHead.py b/docs/RFEM/SpecialObjects/enlargedColumnHead.py new file mode 100644 index 00000000..e12825ca --- /dev/null +++ b/docs/RFEM/SpecialObjects/enlargedColumnHead.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class EnlargedColumnHead(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Enlarged Column Head + clientObject = Model.clientModel.factory.create('ns0:enlarged_column_head') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Enlarged Column Head No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Enlarged Column Head to client model + Model.clientModel.service.set_enlarged_column_head(clientObject) diff --git a/docs/RFEM/SpecialObjects/intersection.py b/docs/RFEM/SpecialObjects/intersection.py new file mode 100644 index 00000000..a0ee9e8f --- /dev/null +++ b/docs/RFEM/SpecialObjects/intersection.py @@ -0,0 +1,32 @@ +from RFEM.initModel import Model, clearAtributes + +class Instersection(): + def __init__(self, + no: int = 1, + surface_1: int = 1, + surface_2: int = 2, + comment: str = '', + params: dict = {}): + + # Client model | Intersection + clientObject = Model.clientModel.factory.create('ns0:intersection') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Intersection No. + clientObject.no = no + + # Assigned surfaces + clientObject.surface_a = surface_1 + clientObject.surface_b = surface_2 + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Intersection to client model + Model.clientModel.service.set_intersection(clientObject) diff --git a/docs/RFEM/SpecialObjects/resultSection.py b/docs/RFEM/SpecialObjects/resultSection.py new file mode 100644 index 00000000..80941e10 --- /dev/null +++ b/docs/RFEM/SpecialObjects/resultSection.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class ResultSection(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Result Section + clientObject = Model.clientModel.factory.create('ns0:result_section') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Result Section No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Result Section to client model + Model.clientModel.service.set_result_section(clientObject) diff --git a/docs/RFEM/SpecialObjects/rigidLink.py b/docs/RFEM/SpecialObjects/rigidLink.py new file mode 100644 index 00000000..0d76d93a --- /dev/null +++ b/docs/RFEM/SpecialObjects/rigidLink.py @@ -0,0 +1,150 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import * + +class RigidLink(): + def __init__(self, + no: int = 1, + line_1: int = 1, + line_2: int = 2, + ignore_relative_position: bool = True, + comment: str = '', + params: dict = {}): + + # Client model | Rigid Link + clientObject = Model.clientModel.factory.create('ns0:rigid_link') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Type + #clientObject.type = RigidLinkType.TYPE_LINE_TO_LINE.name + + # Rigid Link No. + clientObject.no = no + + # Attached lines + clientObject.line1 = line_1 + clientObject.line2 = line_2 + + # Ignore relative possition + clientObject.ignore_relative_position = ignore_relative_position + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add rigid link to client model + Model.clientModel.service.set_rigid_link(clientObject) + + def LineToLine(self, + no: int = 1, + line_1: int = 1, + line_2: int = 2, + ignore_relative_position: bool = True, + comment: str = '', + params: dict = {}): + + # Client model | Line To Line Rigid Link + clientObject = Model.clientModel.factory.create('ns0:rigid_link') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Type + clientObject.type = RigidLinkType.TYPE_LINE_TO_LINE.name + + # Rigid Link No. + clientObject.no = no + + # Attached lines + clientObject.line1 = line_1 + clientObject.line2 = line_2 + + # Ignore relative possition + clientObject.ignore_relative_position = ignore_relative_position + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add rigid link to client model + Model.clientModel.service.set_rigid_link(clientObject) + + def LineToSurface(self, + no: int = 1, + line_1: int = 1, + surface: int = 1, + ignore_relative_position: bool = True, + comment: str = '', + params: dict = {}): + + # Client model | Line To Surface Rigid Link + clientObject = Model.clientModel.factory.create('ns0:rigid_link') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Rigid Link No. + clientObject.no = no + + # Type + clientObject.type = RigidLinkType.TYPE_LINE_TO_SURFACE.name + + # Attached lines + clientObject.line1 = line_1 + + clientObject.surface = surface + + # Ignore relative possition + clientObject.ignore_relative_position = ignore_relative_position + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add rigid link to client model + Model.clientModel.service.set_rigid_link(clientObject) + + def Diapragm(self, + no: int = 1, + nodes: str = '3 4', + lines: str = '6 7', + comment: str = '', + params: dict = {}): + + # Client model | Diapragm Rigid Link + clientObject = Model.clientModel.factory.create('ns0:rigid_link') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Rigid Link No. + clientObject.no = no + + # Type + clientObject.type = RigidLinkType.TYPE_DIAPHRAGM.name + + # Attached nodes + clientObject.nodes = nodes + + # Attached lines + clientObject.lines = lines + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add rigid link to client model + Model.clientModel.service.set_rigid_link(clientObject) diff --git a/docs/RFEM/SpecialObjects/structureModification.py b/docs/RFEM/SpecialObjects/structureModification.py new file mode 100644 index 00000000..3166e50f --- /dev/null +++ b/docs/RFEM/SpecialObjects/structureModification.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class StructureModification(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Structure Modification + clientObject = Model.clientModel.factory.create('ns0:structure_modification') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Structure Modification No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Structure Modification to client model + Model.clientModel.service.set_structure_modification(clientObject) diff --git a/docs/RFEM/SpecialObjects/surfaceContact.py b/docs/RFEM/SpecialObjects/surfaceContact.py new file mode 100644 index 00000000..33ef394f --- /dev/null +++ b/docs/RFEM/SpecialObjects/surfaceContact.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceContact(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surfaces Contact + clientObject = Model.clientModel.factory.create('ns0:surfaces_contact') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surfaces Contact No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surfaces Contact to client model + Model.clientModel.service.set_surfaces_contact(clientObject) diff --git a/docs/RFEM/SpecialObjects/surfaceResultAdjustment.py b/docs/RFEM/SpecialObjects/surfaceResultAdjustment.py new file mode 100644 index 00000000..bc486ee8 --- /dev/null +++ b/docs/RFEM/SpecialObjects/surfaceResultAdjustment.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceResultsAdjustment(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surface Result Adjustment + clientObject = Model.clientModel.factory.create('ns0:surface_results_adjustment') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Result Adjustment No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Result Adjustmentto client model + Model.clientModel.service.set_surface_results_adjustment(clientObject) diff --git a/docs/RFEM/Tools/ModelCheck.py b/docs/RFEM/Tools/ModelCheck.py new file mode 100644 index 00000000..d0726f60 --- /dev/null +++ b/docs/RFEM/Tools/ModelCheck.py @@ -0,0 +1,108 @@ +from RFEM.initModel import Model +from RFEM.enums import ModelCheckGetOptionType, ModelCheckProcessOptionType + +class ModelCheck(): + + def __init__(self): + pass + + def GetIdenticalNodes(self, tolerance): + """ + Args: + tolerance (float): Tolerance + Returns: + Identical Nodes Object Group + """ + + operation = ModelCheckGetOptionType.IDENTICAL_NODES.name + object_groups = Model.clientModel.service.model_check__get_object_groups_operation(operation, tolerance) + + return object_groups + + def DeleteUnusedNodes(self, tolerance, object_groups): + """ + Args: + tolerance (float): Tolerance + object_groups (dict): Object Groups of Identical Nodes + """ + + process = ModelCheckProcessOptionType.DELETE_UNUSED_NODES.name + Model.clientModel.service.model_check__process_object_groups_operation(process, tolerance, object_groups) + + def UniteNodes(self, tolerance, object_groups): + """ + Args: + tolerance (float): Tolerance + object_groups (dict): Object Groups of Identical Nodes + """ + + process = ModelCheckProcessOptionType.UNITE_NODES_AND_DELETE_UNUSED_NODES.name + Model.clientModel.service.model_check__process_object_groups_operation(process, tolerance, object_groups) + + def GetNotConnectedLines(self, tolerance): + """ + Args: + tolerance (float): Tolerance + Returns: + Not Connected Lines Line Groups + """ + + operation = ModelCheckGetOptionType.CROSSING_LINES.name + line_groups = Model.clientModel.service.model_check__get_object_groups_operation(operation, tolerance) + + return line_groups + + def CrossLines(self, tolerance, line_groups): + """ + Args: + tolerance (float): Tolerance + line_groups (dict): Line Groups of Not Connected Lines + """ + + process = ModelCheckProcessOptionType.CROSS_LINES.name + Model.clientModel.service.model_check__process_object_groups_operation(process, tolerance, line_groups) + + def GetNotConnectedMembers(self, tolerance): + """ + Args: + tolerance (float): Tolerance + Returns: + Not Connected Members Member Groups + """ + + operation = ModelCheckGetOptionType.CROSSING_MEMBERS.name + member_groups = Model.clientModel.service.model_check__get_object_groups_operation(operation, tolerance) + + return member_groups + + def CrossMembers(self, tolerance, member_groups): + """ + Args: + tolerance (float): Tolerance + member_groups (dict): Member Groups of Not Connected Members + """ + + process = ModelCheckProcessOptionType.CROSS_MEMBERS.name + Model.clientModel.service.model_check__process_object_groups_operation(process, tolerance, member_groups) + + def GetOverlappingLines(self): + """ + Returns: + Overlapping Line Groups + """ + + operation = ModelCheckGetOptionType.OVERLAPPING_LINES.name + overlapping_lines = Model.clientModel.service.model_check__get_object_groups_operation(operation) + + return overlapping_lines + + def GetOverlappingMembers(self): + """ + Returns: + Overlapping Member Groups + """ + + operation = ModelCheckGetOptionType.OVERLAPPING_MEMBERS.name + overlapping_members = Model.clientModel.service.model_check__get_object_groups_operation(operation) + + return overlapping_members diff --git a/docs/RFEM/Tools/PlausibilityCheck.py b/docs/RFEM/Tools/PlausibilityCheck.py new file mode 100644 index 00000000..30d1a294 --- /dev/null +++ b/docs/RFEM/Tools/PlausibilityCheck.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model +from RFEM.enums import PlausibilityCheckResult + +class PlausiblityCheck(): + + def __init__(self, + skip_warnings:bool = False): + + response = Model.clientModel.service.plausibility_check(skip_warnings) + + if "failed" in response: + self.checkresult = PlausibilityCheckResult.CHECK_FAILED.name + self.message = response.split("Messages received:", 1)[1] + self.errormessage = self.message.split("Result 'false'", 1)[0] + else: + self.checkresult = PlausibilityCheckResult.CHECK_IS_OK.name + self.message = 'Success' + self.errormessage = "" + + def IsModelOK(self): + + return self.checkresult == PlausibilityCheckResult.CHECK_IS_OK.name + + def GetErrorMessage(self): + + return self.errormessage diff --git a/docs/RFEM/Tools/centreOfGravityAndObjectInfo.py b/docs/RFEM/Tools/centreOfGravityAndObjectInfo.py new file mode 100644 index 00000000..902f167c --- /dev/null +++ b/docs/RFEM/Tools/centreOfGravityAndObjectInfo.py @@ -0,0 +1,111 @@ +from RFEM.initModel import Model +from RFEM.enums import ObjectTypes, SelectedObjectInformation + +class ObjectInformation(): + # missing def __init__( with definition of self and its variables + # object_type, no, parent_no, information, row_key and result. + + def CentreOfGravity(self, + type = ObjectTypes.E_OBJECT_TYPE_MEMBER, + parent_no = 0, + no: int = 1, + coord: str = 'X'): + ''' + This function returns the centre of gravity position (X, Y or Z) for a selected object. + Args: + type (enum): Object Type + parent_no (int): Object Parent Number + Note: + (1) A geometric object has, in general, a parent_no = 0 + (2) The parent_no parameter becomes significant for example with loads + no (int): The Object Tag + coord (str): Desired global basis vector component of the Centre of Gravity (i.e. X, Y or Z) + ''' + self.object_type = type + self.no = no + self.parent_no = parent_no + result = ObjectInformation.__BuildResultsArray(self) + if coord == 'X' or coord.lstrip().rstrip().upper() == 'X': + return result['section'][0].rows[0][0].value + elif coord == 'Y' or coord.lstrip().rstrip().upper() == 'Y': + return result['section'][0].rows[0][1].value + elif coord == 'Z' or coord.lstrip().rstrip().upper() == 'Z': + return result['section'][0].rows[0][2].value + else: + raise Exception ('WARNING: The desired Coordinate input not requested. Please provide either "X", "Y" or "Z"') + + def MemberInformation(self, + no: int = 1, + information = SelectedObjectInformation.LENGTH): + ''' + This function returns further information associated with a member. + Args: + no (int): Member Tag + information (enum): Desired Information (Length / Volume / Mass) + ''' + if information.name == 'AREA': + raise Exception ('WARNING: Area information is only relevant for Surface and Volume Information.') + self.object_type = ObjectTypes.E_OBJECT_TYPE_MEMBER + self.no = no + self.parent_no = 0 + self.information = information + self.row_key = 2 + self.result = ObjectInformation.__BuildResultsArray(self) + return ObjectInformation.__AreaVolumeMassInformationLength(self) + + def SurfaceInformation(self, + no: int = 1, + information = SelectedObjectInformation.AREA): + ''' + This function returns further information associated with a surface. + Args: + no (int): Surface Tag + information (enum): Desired Information (Area / Volume / Mass) + ''' + if information.name == 'LENGTH': + raise Exception ('WARNING: Length information is only relevant for Member Information.') + self.object_type = ObjectTypes.E_OBJECT_TYPE_SURFACE + self.no = no + self.parent_no = 0 + self.information = information + self.row_key = 3 + self.result = ObjectInformation.__BuildResultsArray(self) + return ObjectInformation.__AreaVolumeMassInformationLength(self) + + def SolidInformation(self, + no: int = 1, + information = SelectedObjectInformation.AREA): + ''' + This function returns further information associated with a solid. + Args: + no (int): Solid Tag + information (enum): Desired Information (Area / Volume / Mass) + ''' + if information.name == 'LENGTH': + raise Exception ('WARNING: Length information is only relevant for Member Information.') + self.object_type = ObjectTypes.E_OBJECT_TYPE_SOLID + self.no = no + self.parent_no = 0 + self.information = information + self.row_key = 4 + self.result = ObjectInformation.__BuildResultsArray(self) + return ObjectInformation.__AreaVolumeMassInformationLength(self) + + def __BuildResultsArray(self): + elements = Model.clientModel.factory.create('ns0:array_of_get_center_of_gravity_and_objects_info_elements_type') + clientObject = Model.clientModel.factory.create('ns0:get_center_of_gravity_and_objects_info_element_type') + clientObject.parent_no = self.parent_no + clientObject.no = self.no + clientObject.type = self.object_type.name + elements.element.append(clientObject) + result = Model.clientModel.service.get_center_of_gravity_and_objects_info(elements) + result = Model.clientModel.dict(result) + return result + + def __AreaVolumeMassInformationLength(self): + if self.information.name == "LENGTH" or self.information.name == "AREA": + return self.result['section'][self.row_key].rows[0][0].value + elif self.information.name == "VOLUME": + return self.result['section'][self.row_key].rows[0][1].value + elif self.information.name == "MASS": + return self.result['section'][self.row_key].rows[0][2].value diff --git a/docs/RFEM/Tools/sectionDialogue.py b/docs/RFEM/Tools/sectionDialogue.py new file mode 100644 index 00000000..354806f3 --- /dev/null +++ b/docs/RFEM/Tools/sectionDialogue.py @@ -0,0 +1,43 @@ +from RFEM.initModel import Model + +def CreateSectionFavoriteList(name: str = "Favorites"): + + if isinstance(name, str): + Model.clientModel.service.create_section_favorite_list(name) + else: + print("WARNING:Name of the section favorite list should be a string. Please kindly check the inputs.") + +def AddSectionToFavoriteList(list_name: str = "Favorites", + section_name: str = "IPE 300"): + + if isinstance(list_name, str) and isinstance(section_name, str): + Model.clientModel.service.add_section_to_favorite_list(list_name, section_name) + else: + print("WARNING:Name of the section favorite list and the section should be a string. Please kindly check the inputs.") + +def DeleteSectionFromFavoriteList(list_name: str = "Favorites", + section_name: str = "IPE 300"): + + if isinstance(list_name, str) and isinstance(section_name, str): + Model.clientModel.service.delete_section_from_favorite_list(list_name, section_name) + else: + print("WARNING:Name of the section favorite list and the section should be a string. Please kindly check the inputs.") + +def GetSectionFavoriteLists(): + + return Model.clientModel.service.get_section_favorite_lists() + +def DeleteSectionFavoriteList(name: str = "Favorites"): + + if isinstance(name, str): + Model.clientModel.service.delete_section_favorite_list(name) + else: + print("WARNING:Name of the section favorite list should be a string. Please kindly check the inputs.") + +def CreateSectionFromRsectionFile(no: int = 1, + file_path: str = "/rsection_file_path/"): + + if isinstance(no, int) and isinstance(file_path, str): + Model.clientModel.service.create_section_from_rsection_file(no, file_path) + else: + print("WARNING: Type of file_path argument should be string and the type of the no argument should be integer. Please kindly check the inputs.") diff --git a/docs/RFEM/TypesForBracings/singleBracing.py b/docs/RFEM/TypesForBracings/singleBracing.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForBracings/singleBracing.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForLines/__init__.py b/docs/RFEM/TypesForLines/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForLines/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForLines/lineHinge.py b/docs/RFEM/TypesForLines/lineHinge.py new file mode 100644 index 00000000..dfa445c7 --- /dev/null +++ b/docs/RFEM/TypesForLines/lineHinge.py @@ -0,0 +1,54 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.dataTypes import inf + +class LineHinge(): + # Slab Wall Connection definition + slabWallConnection = {'slab_wall_connection': True, + 'slab_wall_with_slab_edge_block': True, + 'slab_wall_connection_offset': 0.15, + 'slab_edge_block_width':0.1} + + def __init__(self, + no: int = 1, + assigned_to: str = '3/5; 2/5', + translational_release: list = [800, inf, inf], + rotational_release_phi: int = inf, + comment: str = '', + params: dict = {}): + + """ + assigned_to doesn't work. Can't figure why. + Assignment in surfaces also doesn't work (surface.has_line_hinges = True). + """ + + # Client model | Line Hinge + clientObject = Model.clientModel.factory.create('ns0:line_hinge') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Hinge No. + clientObject.no = no + + # Assigned to surface and its line (format 1/3) + clientObject.assigned_to = assigned_to + + # Translatioonal and totational release + clientObject.translational_release_u_x = translational_release[0] + clientObject.translational_release_u_y = translational_release[1] + clientObject.translational_release_u_z = translational_release[2] + clientObject.rotational_release_phi_x = rotational_release_phi + + # Slab connection + clientObject.slab_wall_connection = False + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Hinge to client model + Model.clientModel.service.set_line_hinge(clientObject) + diff --git a/docs/RFEM/TypesForLines/lineMeshRefinements.py b/docs/RFEM/TypesForLines/lineMeshRefinements.py new file mode 100644 index 00000000..3bad2d34 --- /dev/null +++ b/docs/RFEM/TypesForLines/lineMeshRefinements.py @@ -0,0 +1,159 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import LineMeshRefinementsType + +class LineMeshRefinements(): + TypeSpecificParams = {'target_length': 0.1, #Target FE Length Type + 'elements_finite_elements': 0, # Number Finite Elements Type + 'gradual_rows': 0} # Gradually Type + def __init__(self, + no: int = 1, + lines: str = '3 4 5', + type = LineMeshRefinementsType.TYPE_LENGTH, + number_of_layers: int = 2, + comment: str = '', + params: dict = {}): + + # Client model | Line Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:line_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Mesh Refinement No. + clientObject.no = no + + # Assigned to lines + clientObject.lines = ConvertToDlString(lines) + + # Line Mesh Refinement Type + clientObject.type = type.name + + # Number of layers + clientObject.number_of_layers = number_of_layers + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Mesh Refinement to client model + Model.clientModel.service.set_line_mesh_refinement(clientObject) + + def TargetFELength(self, + no: int = 1, + lines: str = '3 4 5', + target_length: float = 0.1, + number_of_layers: int = 2, + comment: str = '', + params: dict = {}): + + # Client model | Line Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:line_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Mesh Refinement No. + clientObject.no = no + + # Assigned to lines + clientObject.lines = ConvertToDlString(lines) + + # Line Mesh Refinement Type + clientObject.type = LineMeshRefinementsType.TYPE_LENGTH.name + + # Target Length + clientObject.target_length = target_length + + # Number of layers + clientObject.number_of_layers = number_of_layers + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Mesh Refinement to client model + Model.clientModel.service.set_line_mesh_refinement(clientObject) + + def NumberFiniteElements(self, + no: int = 1, + lines: str = '3 4 5', + elements_finite_elements: int = 10, + number_of_layers: int = 2, + comment: str = '', + params: dict = {}): + + # Client model | Line Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:line_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Mesh Refinement No. + clientObject.no = no + + # Assigned to lines + clientObject.lines = ConvertToDlString(lines) + + # Line Mesh Refinement Type + clientObject.type = LineMeshRefinementsType.TYPE_ELEMENTS.name + + # Target Length + clientObject.elements_finite_elements = elements_finite_elements + + # Number of layers + clientObject.number_of_layers = number_of_layers + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Mesh Refinement to client model + Model.clientModel.service.set_line_mesh_refinement(clientObject) + + def Gradually(self, + no: int = 1, + lines: str = '3 4 5', + gradual_rows: int = 10, + number_of_layers: int = 2, + comment: str = '', + params: dict = {}): + + # Client model | Line Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:line_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Mesh Refinement No. + clientObject.no = no + + # Assigned to lines + clientObject.lines = ConvertToDlString(lines) + + # Line Mesh Refinement Type + clientObject.type = LineMeshRefinementsType.TYPE_GRADUAL.name + + # Target Length + clientObject.gradual_rows = gradual_rows + + # Number of layers + clientObject.number_of_layers = number_of_layers + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Mesh Refinement to client model + Model.clientModel.service.set_line_mesh_refinement(clientObject) diff --git a/docs/RFEM/TypesForLines/lineSupport.py b/docs/RFEM/TypesForLines/lineSupport.py new file mode 100644 index 00000000..1056a1ab --- /dev/null +++ b/docs/RFEM/TypesForLines/lineSupport.py @@ -0,0 +1,92 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.dataTypes import inf +from RFEM.enums import LineSupportType + +def setLineSupportConditions(clientObject, + C_u_X: float, + C_u_Y: float, + C_u_Z: float, + C_phi_X: float, + C_phi_Y: float, + C_phi_Z: float): + ''' + Sets line support conditions + + Params: + clientObject: Client model object | Line support + C_u_X,Y,Z: Translational support conditions in respected direction + C_phi_X,Y,Z: Rotational support conditions about respected axis + comment: Comment + + Returns: + clientObject: Initialized client model object | Line Support + ''' + + clientObject.spring_x = C_u_X + clientObject.spring_y = C_u_Y + clientObject.spring_z = C_u_Z + + clientObject.rotational_restraint_x = C_phi_X + clientObject.rotational_restraint_y = C_phi_Y + clientObject.rotational_restraint_z = C_phi_Z + + return clientObject + +class LineSupport(): + def __init__(self, + no: int = 1, + lines_no: str = '1 2', + support_type = LineSupportType.HINGED, + comment: str = '', + params: dict = {}): + + # Client model | Line Support + clientObject = Model.clientModel.factory.create('ns0:line_support') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Support No. + clientObject.no = no + + # Nodes No. (e.g. "5 6 7 12") + clientObject.lines = ConvertToDlString(lines_no) + + # Nodal Support Conditions + if support_type == LineSupportType.FIXED: + # FIXED 'xxx xxx' + clientObject = setLineSupportConditions(clientObject, inf, inf, inf, inf, inf, inf) + + elif support_type == LineSupportType.HINGED: + # HINGED 'xxx ---' + clientObject = setLineSupportConditions(clientObject, inf, inf, inf, 0.0, 0.0, 0.0) + + elif support_type == LineSupportType.SLIDING_IN_X_AND_Y: + # SLIDING_IN_X_AND_Y '--x --x' + clientObject = setLineSupportConditions(clientObject, 0.0, 0.0, inf, 0.0, 0.0, inf) + + elif support_type == LineSupportType.SLIDING_IN_X: + # SLIDING_IN_X '-xx --x' + clientObject = setLineSupportConditions(clientObject, 0.0, inf, inf, 0.0, 0.0, inf) + + elif support_type == LineSupportType.SLIDING_IN_Y: + # SLIDING_IN_Y 'x-x --x' + clientObject = setLineSupportConditions(clientObject, inf, 0.0, inf, 0.0, 0.0, inf) + + elif support_type == LineSupportType.SLIDING_IN_Z: + # SLIDING_IN_Z 'xx- --x' + clientObject = setLineSupportConditions(clientObject, inf, inf, 0.0, 0.0, 0.0, inf) + + elif support_type == LineSupportType.FREE: + # FREE '--- ---' + clientObject = setLineSupportConditions(clientObject, 0, 0, 0, 0, 0, 0) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line Support to client model + Model.clientModel.service.set_line_support(clientObject) diff --git a/docs/RFEM/TypesForLines/lineWeldedJoint.py b/docs/RFEM/TypesForLines/lineWeldedJoint.py new file mode 100644 index 00000000..792ae196 --- /dev/null +++ b/docs/RFEM/TypesForLines/lineWeldedJoint.py @@ -0,0 +1,62 @@ +from RFEM.initModel import Model, clearAtributes, ConvertStrToListOfInt +from RFEM.enums import LineWeldedJointType, WeldType, WeldLongitudalArrangement + +class LineWeldedJoint(): + def __init__(self, + no: int = 1, + lines: str = '5', + surfaces: str = '1 2', + joint_type = LineWeldedJointType.BUTT_JOINT, + weld_type = WeldType.WELD_SINGLE_V, + weld_size_a1: int = 0.005, + longitudinal_arrangement = WeldLongitudalArrangement.CONTINUOUS, + comment: str = '', + params: dict = {}): + + # Client model | Line Welded Joint + clientObject = Model.clientModel.factory.create('ns0:line_welded_joint') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Line Welded Joint No. + clientObject.no = no + + # Line Welded Joint Type + clientObject.joint_type = joint_type.name + + # Weld Type + clientObject.weld_type = weld_type.name + + # Weld Longitudal Arrangement + clientObject.longitudinal_arrangement = longitudinal_arrangement.name + + # Weld Size a1 + clientObject.weld_size_a1 = weld_size_a1 + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line welded joint to client model + Model.clientModel.service.set_line_welded_joint(clientObject) + + iLines = ConvertStrToListOfInt(lines) + iSurfaces = ConvertStrToListOfInt(surfaces) + + for i in iLines: + line = Model.clientModel.service.get_line(i) + line.has_line_welds = True + clientWeld = Model.clientModel.factory.create('ns0:line_line_weld_assignment') + clientWeld.no = i + clientWeld.weld = no + clientWeld.surface1 = iSurfaces[0] + clientWeld.surface2 = iSurfaces[1] + if len(iSurfaces) == 3: + clientWeld.surface3 = iSurfaces[2] + line.line_weld_assignment = Model.clientModel.factory.create('ns0:array_of_line_line_weld_assignment') + line.line_weld_assignment.line_line_weld_assignment.append(clientWeld) + Model.clientModel.service.set_line(line) diff --git a/docs/RFEM/TypesForMembers/__init__.py b/docs/RFEM/TypesForMembers/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForMembers/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForMembers/memberDefinableStiffness.py b/docs/RFEM/TypesForMembers/memberDefinableStiffness.py new file mode 100644 index 00000000..6f9d8fea --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberDefinableStiffness.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberDefinableStiffness(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Definable Stffness + clientObject = Model.clientModel.factory.create('ns0:member_definable_stiffness') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Definable Stffness No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Definable Stffness to client model + Model.clientModel.service.set_member_definable_stiffness(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberEccentricity.py b/docs/RFEM/TypesForMembers/memberEccentricity.py new file mode 100644 index 00000000..235d1bb5 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberEccentricity.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberEccentricity(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Eccentricity + clientObject = Model.clientModel.factory.create('ns0:member_eccentricity') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Eccentricity No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Eccentricity to client model + Model.clientModel.service.set_member_eccentricity(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberHinge.py b/docs/RFEM/TypesForMembers/memberHinge.py new file mode 100644 index 00000000..640f3839 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberHinge.py @@ -0,0 +1,55 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.dataTypes import inf + +class MemberHinge(): + def __init__(self, + no: int = 1, + coordinate_system: str = "Local", + translational_release_n: float = inf, + translational_release_vy: float = inf, + translational_release_vz: float = inf, + rotational_release_mt: float = inf, + rotational_release_my: float = 0.0, + rotational_release_mz: float = inf, + comment: str = 'Rotational Release My', + params: dict = {}): + + # Client model | Member Hinge + clientObject = Model.clientModel.factory.create('ns0:member_hinge') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Memeber Hinge No. + clientObject.no = no + + # Coordinate System + clientObject.coordinate_system = coordinate_system + + # Translational Release/Spring [kN/m] N + clientObject.axial_release_n = translational_release_n + + # Translational Release/Spring [kN/m] Vy + clientObject.axial_release_vy = translational_release_vy + + # Translational Release/Spring [kN/m] Vz + clientObject.axial_release_vz = translational_release_vz + + # Rotational Release/Spring [kNm/rad] Mt + clientObject.moment_release_mt = rotational_release_mt + + # Rotational Release/Spring [kNm/rad] My + clientObject.moment_release_my = rotational_release_my + + # Rotational Release/Spring [kNm/rad] Mz + clientObject.moment_release_mz = rotational_release_mz + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Line to client model + Model.clientModel.service.set_member_hinge(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberNonlinearity.py b/docs/RFEM/TypesForMembers/memberNonlinearity.py new file mode 100644 index 00000000..43065248 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberNonlinearity.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberNonlinearity(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Nonlinearity + clientObject = Model.clientModel.factory.create('ns0:member_nonlinearity') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Nonlinearity No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Nonlinearity to client model + Model.clientModel.service.set_member_nonlinearity(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberResultIntermediatePoints.py b/docs/RFEM/TypesForMembers/memberResultIntermediatePoints.py new file mode 100644 index 00000000..5e9c3159 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberResultIntermediatePoints.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberResultIntermediatePoint(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Result Intermediate Point + clientObject = Model.clientModel.factory.create('ns0:member_result_intermediate_point') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Result Intermediate Point No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Result Intermediate Point to client model + Model.clientModel.service.set_member_result_intermediate_point(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberStiffnessModification.py b/docs/RFEM/TypesForMembers/memberStiffnessModification.py new file mode 100644 index 00000000..e4e8f7c9 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberStiffnessModification.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberStiffnessModification(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Stiffness Modification + clientObject = Model.clientModel.factory.create('ns0:smember_stiffness_modification') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Stiffness Modification No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Stiffness Modification to client model + Model.clientModel.service.set_member_stiffness_modification(clientObject) diff --git a/docs/RFEM/TypesForMembers/memberSupport.py b/docs/RFEM/TypesForMembers/memberSupport.py new file mode 100644 index 00000000..b05af708 --- /dev/null +++ b/docs/RFEM/TypesForMembers/memberSupport.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class MemberSupport(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Member Support + clientObject = Model.clientModel.factory.create('ns0:member_support') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Support No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Member Support to client model + Model.clientModel.service.set_member_support(clientObject) diff --git a/docs/RFEM/TypesForNodes/__init__.py b/docs/RFEM/TypesForNodes/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForNodes/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForNodes/nodalMeshRefinement.py b/docs/RFEM/TypesForNodes/nodalMeshRefinement.py new file mode 100644 index 00000000..544fd8c8 --- /dev/null +++ b/docs/RFEM/TypesForNodes/nodalMeshRefinement.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class NodalMeshRefinement(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Nodal Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:nodal_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Nodal Mesh Refinement No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Nodal Mesh Refinement to client model + Model.clientModel.service.set_nodal_mesh_refinement(clientObject) diff --git a/docs/RFEM/TypesForNodes/nodalSupport.py b/docs/RFEM/TypesForNodes/nodalSupport.py new file mode 100644 index 00000000..aab0dc95 --- /dev/null +++ b/docs/RFEM/TypesForNodes/nodalSupport.py @@ -0,0 +1,92 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.dataTypes import inf +from RFEM.enums import NodalSupportType + +def setNodalSupportConditions(clientObject, + C_u_X: float, + C_u_Y: float, + C_u_Z: float, + C_phi_X: float, + C_phi_Y: float, + C_phi_Z: float): + ''' + Sets nodal support conditions + + Params: + clientObject: Client model object | Nodal support + C_u_X,Y,Z: Translational support conditions in respected direction + C_phi_X,Y,Z: Rotational support conditions about respected axis + comment: Comment + + Returns: + clientObject: Initialized client model object | Nodal Support + ''' + + clientObject.spring_x = C_u_X + clientObject.spring_y = C_u_Y + clientObject.spring_z = C_u_Z + + clientObject.rotational_restraint_x = C_phi_X + clientObject.rotational_restraint_y = C_phi_Y + clientObject.rotational_restraint_z = C_phi_Z + + return clientObject + +class NodalSupport(): + def __init__(self, + no: int = 1, + nodes_no: str = '1 2', + support_type = NodalSupportType.HINGED, + comment: str = '', + params: dict = {}): + + # Client model | Nodal Support + clientObject = Model.clientModel.factory.create('ns0:nodal_support') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Nodal Support No. + clientObject.no = no + + # Nodes No. (e.g. "5 6 7 12") + clientObject.nodes = ConvertToDlString(nodes_no) + + # Nodal Support Conditions + if support_type == NodalSupportType.FIXED: + # FIXED 'xxx xxx' + clientObject = setNodalSupportConditions(clientObject, inf, inf, inf, inf, inf, inf) + + elif support_type == NodalSupportType.HINGED: + # HINGED 'xxx --x' + clientObject = setNodalSupportConditions(clientObject, inf, inf, inf, 0.0, 0.0, inf) + + elif support_type == NodalSupportType.ROLLER: + # ROLLER '--x --x' + clientObject = setNodalSupportConditions(clientObject, 0.0, 0.0, inf, 0.0, 0.0, inf) + + elif support_type == NodalSupportType.ROLLER_IN_X: + # ROLLER_IN_X '-xx --x' + clientObject = setNodalSupportConditions(clientObject, 0.0, inf, inf, 0.0, 0.0, inf) + + elif support_type == NodalSupportType.ROLLER_IN_Y: + # ROLLER_IN_Y 'x-x --x' + clientObject = setNodalSupportConditions(clientObject, inf, 0.0, inf, 0.0, 0.0, inf) + + elif support_type == NodalSupportType.ROLLER_IN_Z: + # ROLLER_IN_Z 'xx- --x' + clientObject = setNodalSupportConditions(clientObject, inf, inf, 0.0, 0.0, 0.0, inf) + + elif support_type == NodalSupportType.FREE: + # FREE '--- ---' + clientObject = setNodalSupportConditions(clientObject, 0, 0, 0, 0, 0, 0) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Nodal Support to client model + Model.clientModel.service.set_nodal_support(clientObject) diff --git a/docs/RFEM/TypesForSolids/__init__.py b/docs/RFEM/TypesForSolids/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForSolids/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForSolids/solidContact.py b/docs/RFEM/TypesForSolids/solidContact.py new file mode 100644 index 00000000..c2fef676 --- /dev/null +++ b/docs/RFEM/TypesForSolids/solidContact.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SolidContact(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Solid Contact + clientObject = Model.clientModel.factory.create('ns0:solid_contacts') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Contact No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Contact to client model + Model.clientModel.service.set_solid_contacts(clientObject) diff --git a/docs/RFEM/TypesForSolids/solidGas.py b/docs/RFEM/TypesForSolids/solidGas.py new file mode 100644 index 00000000..54d7e6bc --- /dev/null +++ b/docs/RFEM/TypesForSolids/solidGas.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SolidGas(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Solid Gas + clientObject = Model.clientModel.factory.create('ns0:solid_gas') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Gas No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Gas to client model + Model.clientModel.service.set_solid_gas(clientObject) diff --git a/docs/RFEM/TypesForSolids/solidMeshRefinement.py b/docs/RFEM/TypesForSolids/solidMeshRefinement.py new file mode 100644 index 00000000..80ec791e --- /dev/null +++ b/docs/RFEM/TypesForSolids/solidMeshRefinement.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SolidMeshRefinement(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Solid Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:solid_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Solid Mesh Refinement No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Solid Mesh Refinement to client model + Model.clientModel.service.set_solid_mesh_refinement(clientObject) diff --git a/docs/RFEM/TypesForSpecialObjects/__init__.py b/docs/RFEM/TypesForSpecialObjects/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForSpecialObjects/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForSpecialObjects/surfaceContactType.py b/docs/RFEM/TypesForSpecialObjects/surfaceContactType.py new file mode 100644 index 00000000..ad118929 --- /dev/null +++ b/docs/RFEM/TypesForSpecialObjects/surfaceContactType.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceContactType(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surface Contact Type + clientObject = Model.clientModel.factory.create('ns0:surfaces_contact_type') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Contact Type No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Contact Type to client model + Model.clientModel.service.set_surfaces_contact_type(clientObject) diff --git a/docs/RFEM/TypesForSurfaces/__init__.py b/docs/RFEM/TypesForSurfaces/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesForSurfaces/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/TypesForSurfaces/surfaceEccentricity.py b/docs/RFEM/TypesForSurfaces/surfaceEccentricity.py new file mode 100644 index 00000000..9f7b68dc --- /dev/null +++ b/docs/RFEM/TypesForSurfaces/surfaceEccentricity.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceEccentricity(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surface Eccentricity + clientObject = Model.clientModel.factory.create('ns0:surface_eccentricity') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Eccentricity No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Eccentricity to client model + Model.clientModel.service.set_surface_eccentricity(clientObject) diff --git a/docs/RFEM/TypesForSurfaces/surfaceMeshRefinements.py b/docs/RFEM/TypesForSurfaces/surfaceMeshRefinements.py new file mode 100644 index 00000000..d1576d5a --- /dev/null +++ b/docs/RFEM/TypesForSurfaces/surfaceMeshRefinements.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceMeshRefinement(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surface Mesh Refinement + clientObject = Model.clientModel.factory.create('ns0:surface_mesh_refinement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Mesh Refinement No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Mesh Refinement to client model + Model.clientModel.service.set_surface_mesh_refinement(clientObject) diff --git a/docs/RFEM/TypesForSurfaces/surfaceStiffnessModification.py b/docs/RFEM/TypesForSurfaces/surfaceStiffnessModification.py new file mode 100644 index 00000000..fd23d871 --- /dev/null +++ b/docs/RFEM/TypesForSurfaces/surfaceStiffnessModification.py @@ -0,0 +1,26 @@ +from RFEM.initModel import Model, clearAtributes + +class SurfaceStiffnessModification(): + def __init__(self, + no: int = 1, + comment: str = '', + params: dict = {}): + + # Client model | Surface Stifness Modification + clientObject = Model.clientModel.factory.create('ns0:surface_stiffness_modification') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Stifness Modification No. + clientObject.no = no + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Stifness Modification to client model + Model.clientModel.service.set_surface_stiffness_modification(clientObject) diff --git a/docs/RFEM/TypesForSurfaces/surfaceSupport.py b/docs/RFEM/TypesForSurfaces/surfaceSupport.py new file mode 100644 index 00000000..a64462e3 --- /dev/null +++ b/docs/RFEM/TypesForSurfaces/surfaceSupport.py @@ -0,0 +1,42 @@ +from RFEM.initModel import Model, ConvertToDlString, clearAtributes + +class SurfaceSupport(): + def __init__(self, + no: int = 1, + surfaces_no: str = '1', + c_1_x: float = 0.0, + c_1_y: float = 0.0, + c_1_z: float = 0.0, + c_2_x: float = 0.0, + c_2_y: float = 0.0, + comment: str = '', + params: dict = {}): + + # Client model | Surface Support + clientObject = Model.clientModel.factory.create('ns0:surface_support') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Surface Support No. + clientObject.no = no + + # Surface No. (e.g. "5 6 7 12") + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Surface Support Conditions + clientObject.translation_x = c_1_x + clientObject.translation_y = c_1_y + clientObject.translation_z = c_1_z + clientObject.shear_xz = c_2_x + clientObject.shear_yz = c_2_y + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Surface Support to client model + Model.clientModel.service.set_surface_support(clientObject) diff --git a/docs/RFEM/TypesforConcreteDesign/ConcreteDurability.py b/docs/RFEM/TypesforConcreteDesign/ConcreteDurability.py new file mode 100644 index 00000000..9b6037d5 --- /dev/null +++ b/docs/RFEM/TypesforConcreteDesign/ConcreteDurability.py @@ -0,0 +1,173 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import DurabilityStructuralClassType, DurabilityAllowanceDeviationType + +class ConcreteDurability(): + def __init__(self, + no: int = 1, + name: str = "XC 1", + members_no: str = "1", + member_sets_no: str = "1", + surfaces_no: str = "1", + exposure_classes_reinforcement = [True, False, False, False], + exposure_classes_reinforcement_types = [], + exposure_classes_concrete = [False, False, False], + exposure_classes_concrete_types = [], + structural_class = [DurabilityStructuralClassType.STANDARD, False, False, False, False], + stainless_steel_reduction = [False], + additional_protection_reduction = [False], + allowance_deviation = [DurabilityAllowanceDeviationType.STANDARD, False], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Concrete Durability Tag + name (str): User Defined Name + members_no (str): Assigned Members + member_sets_no (str): Assigned Member Sets + surfaces_no (str): Assigned Surfaces + exposure_classes_reinforcement (list): Exposure Classes Reinforcement Parameters + exposure_classes_reinforcement_types (list): Exposure Classes Reinforcement Parameters + exposure_classes_concrete (list): Exposure Classes Concrete Parameters + exposure_classes_concrete_types (list): Exposure Classes Concrete Parameters + structural_class (list): Structural Class Parameters + stainless_steel_reduction (list): Stainless Steel Reduction Parameters + additional_protection_reduction (list): Additional Protection Reduction + allowance_deviation (list): Allowance Deviation Parameters + comment (str, optional): Comments + params (dict, optional): Parameters + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:concrete_durability') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Assigned Members + clientObject.members = ConvertToDlString(members_no) + + # Assigned Member Sets + clientObject.member_sets = ConvertToDlString(member_sets_no) + + # Assigned Surfaces + clientObject.surfaces = ConvertToDlString(surfaces_no) + + # Exposure Classes for Reinforcement + clientObject.no_risk_of_corrosion_or_attack_enabled = exposure_classes_reinforcement[0] + clientObject.corrosion_induced_by_carbonation_enabled = exposure_classes_reinforcement[1] + clientObject.corrosion_induced_by_chlorides_enabled = exposure_classes_reinforcement[2] + clientObject.corrosion_induced_by_chlorides_from_sea_water_enabled = exposure_classes_reinforcement[3] + + if all(exposure_classes_reinforcement): + raise Exception("WARNING: At least one reinforcement exposure class must be selected.") + + for i in exposure_classes_reinforcement: + if not isinstance(i, bool): + raise Exception('WARNING: The type of parameters should be bool. Kindly check list inputs for completeness and correctness.') + + if exposure_classes_reinforcement[0]: + clientObject.no_risk_of_corrosion_or_attack = "VERY_DRY" + for i in exposure_classes_reinforcement[1:]: + if i: + raise Exception('WARNING: If No Risk of Corrosion is True, other parameters cannot be selected. Kindly check list inputs for completeness and correctness.') + + if exposure_classes_reinforcement[1] : + clientObject.corrosion_induced_by_carbonation = exposure_classes_reinforcement_types[0].name + if exposure_classes_reinforcement[2]: + clientObject.corrosion_induced_by_chlorides = exposure_classes_reinforcement_types[1].name + if exposure_classes_reinforcement[3]: + clientObject.corrosion_induced_by_chlorides_from_sea_water = exposure_classes_reinforcement_types[2].name + + # Exposure Classes for Concrete + for i in exposure_classes_concrete: + if not isinstance(i, bool): + raise Exception('WARNING: The type of parameters should be bool. Kindly check list inputs for completeness and correctness.') + + if exposure_classes_concrete[0]: + clientObject.freeze_thaw_attack_enabled = True + clientObject.freeze_thaw_attack = exposure_classes_concrete_types[0].name + if exposure_classes_concrete[1]: + clientObject.chemical_attack_enabled = True + clientObject.chemical_attack = exposure_classes_concrete_types[1].name + if exposure_classes_concrete[2]: + clientObject.concrete_corrosion_induced_by_wear_enabled = True + clientObject.concrete_corrosion_induced_by_wear = exposure_classes_concrete_types[2].name + + # Structural Class + clientObject.structural_class_type = structural_class[0].name + + if structural_class[0].name == "STANDARD": + for i in structural_class[1:]: + if not isinstance(i, bool): + raise Exception('WARNING: The type of last three parameters should be bool. Kindly check list inputs for completeness and correctness.') + + clientObject.increase_design_working_life_from_50_to_100_years_enabled = structural_class[1] + clientObject.position_of_reinforcement_not_affected_by_construction_process_enabled = structural_class[2] + clientObject.special_quality_control_of_production_enabled = structural_class[3] + clientObject.air_entrainment_of_more_than_4_percent_enabled = structural_class[4] + elif structural_class[0].name == "DEFINED": + clientObject.userdefined_structural_class = structural_class[1].name + + # Stainless Steel Concrete Cover Reduction + clientObject.stainless_steel_enabled = stainless_steel_reduction[0] + + if not isinstance(stainless_steel_reduction[0], bool): + raise Exception('WARNING: The type of the first parameter should be bool. Kindly check list inputs for completeness and correctness.') + + if stainless_steel_reduction[0]: + clientObject.stainless_steel_type = stainless_steel_reduction[1].name + + if stainless_steel_reduction[1].name == "DEFINED": + clientObject.stainless_steel_factor = stainless_steel_reduction[2] + + # Additional Protection Concrete Cover Reduction + clientObject.additional_protection_enabled = additional_protection_reduction[0] + + if not isinstance(additional_protection_reduction[0], bool): + raise Exception('WARNING: The type of the first parameter should be bool. Kindly check list inputs for completeness and correctness.') + + if additional_protection_reduction[0]: + clientObject.additional_protection_type = additional_protection_reduction[1].name + + if additional_protection_reduction[1].name == "DEFINED": + clientObject.additional_protection_factor = additional_protection_reduction[2] + + # Allowance for Deviation + clientObject.allowance_of_deviation_type = allowance_deviation[0].name + + if allowance_deviation[0].name == "STANDARD": + clientObject.concrete_cast_enabled = allowance_deviation[1] + + if not isinstance(allowance_deviation[1], bool): + raise Exception('WARNING: The type of the second parameter should be bool. Kindly check list inputs for completeness and correctness.') + + if allowance_deviation[1]: + clientObject.concrete_cast = allowance_deviation[2].name + + elif allowance_deviation[0].name == "DEFINED": + clientObject.userdefined_allowance_of_deviation_factor = allowance_deviation[1] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_concrete_durability(clientObject) + + + + + + + + diff --git a/docs/RFEM/TypesforConcreteDesign/ConcreteEffectiveLength.py b/docs/RFEM/TypesforConcreteDesign/ConcreteEffectiveLength.py new file mode 100644 index 00000000..70402855 --- /dev/null +++ b/docs/RFEM/TypesforConcreteDesign/ConcreteEffectiveLength.py @@ -0,0 +1,124 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import * + +class ConcreteEffectiveLength(): + def __init__(self, + no: int = 1, + name: str = "EL 1", + members_no: str = "1", + member_sets_no: str = "1", + flexural_buckling_about_y = [True, ConcreteEffectiveLengthAxisY.STRUCTURE_TYPE_UNBRACED], + flexural_buckling_about_z = [True, ConcreteEffectiveLengthsAxisZ.STRUCTURE_TYPE_UNBRACED], + nodal_supports = [[EffectiveLengthSupportType.SUPPORT_TYPE_FIXED_ALL, + True, 0, EffectiveLengthEccentricityType.ECCENTRICITY_TYPE_NONE, 0, 0, 0, 0, + SupportStatus.SUPPORT_STATUS_YES, RestraintTypeAboutX.SUPPORT_STATUS_NO, + RestraintTypeAboutZ.SUPPORT_STATUS_NO, RestraintTypeWarping.SUPPORT_STATUS_NO, "1"], + [EffectiveLengthSupportType.SUPPORT_TYPE_FIXED_ALL, + True, 0, EffectiveLengthEccentricityType.ECCENTRICITY_TYPE_NONE, 0, 0, 0, 0, + SupportStatus.SUPPORT_STATUS_YES, RestraintTypeAboutX.SUPPORT_STATUS_NO, + RestraintTypeAboutZ.SUPPORT_STATUS_NO, RestraintTypeWarping.SUPPORT_STATUS_NO, "2"]], + factors = [[1, 1]], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Effective Length Tag + name (str): User Defined Name + members_no (str): Assigned Members + member_sets_no (str): Assigned Member Sets + flexural_buckling_about_y (list): Flexural Buckling About Y Option + flexural_buckling_about_z (list): Flexural Buckling About Z Option + nodal_supports (list): Nodal Support Table + factors (list): Factors Table + comment (str, optional): Comments + params (dict, optional): Parameters + + nodal_supports = [[support_type, support_in_z, support_spring_in_y, eccentricity_type, + eccentricity_ez, restraint_spring_about_x, + restraint_spring_about_z, restraint_spring_warping, support_in_y_type, + restraint_about_x_type, restraint_about_z_type, restraint_warping_type, nodes], ...] + + factors = [[flexural_buckling_y, flexural_buckling_z]] + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:concrete_effective_lengths') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Assigned Members + clientObject.members = ConvertToDlString(members_no) + + # Assigned Member Sets + clientObject.member_sets = ConvertToDlString(member_sets_no) + + # Flexural Buckling + clientObject.flexural_buckling_about_y = flexural_buckling_about_y[0] + clientObject.structure_type_about_axis_y = flexural_buckling_about_y[1] + + if not isinstance(flexural_buckling_about_y[0], bool): + raise Exception('WARNING: The type of the first parameter should be bool. Kindly check list inputs for completeness and correctness.') + + clientObject.flexural_buckling_about_y = flexural_buckling_about_y[0] + clientObject.structure_type_about_axis_y = flexural_buckling_about_y[1].name + + if not isinstance(flexural_buckling_about_z[0], bool): + raise Exception('WARNING: The type of the first parameter should be bool. Kindly check list inputs for completeness and correctness.') + + clientObject.flexural_buckling_about_z = flexural_buckling_about_z[0] + clientObject.structure_type_about_axis_z = flexural_buckling_about_z[1].name + + # Factors + clientObject.factors = Model.clientModel.factory.create('ns0:concrete_effective_lengths.factors') + for i in range(len(factors)): + mlvlp = Model.clientModel.factory.create('ns0:concrete_effective_lengths_factors') + mlvlp.no = i+1 + mlvlp.flexural_buckling_y = factors[i][0] + mlvlp.flexural_buckling_z = factors[i][1] + clientObject.factors.concrete_effective_lengths_factors.append(mlvlp) + + # Nodal Supports + clientObject.nodal_supports = Model.clientModel.factory.create('ns0:concrete_effective_lengths.nodal_supports') + for i in range(len(nodal_supports)): + mlvlp = Model.clientModel.factory.create('ns0:concrete_effective_lengths_nodal_supports') + mlvlp.no = i+1 + mlvlp.support_type = nodal_supports[i][0].name + mlvlp.support_in_z = nodal_supports[i][1] + mlvlp.support_spring_in_y = nodal_supports[i][2] + mlvlp.eccentricity_type = nodal_supports[i][3].name + mlvlp.eccentricity_ez = nodal_supports[i][4] + mlvlp.restraint_spring_about_x = nodal_supports[i][5] + mlvlp.restraint_spring_about_z = nodal_supports[i][6] + mlvlp.restraint_warping_type = nodal_supports[i][7] + mlvlp.support_in_y_type = nodal_supports[i][8].name + mlvlp.restraint_about_x_type = nodal_supports[i][9].name + mlvlp.restraint_about_z_type = nodal_supports[i][10].name + mlvlp.restraint_warping_type = nodal_supports[i][11].name + mlvlp.nodes = nodal_supports[i][12] + clientObject.nodal_supports.concrete_effective_lengths_nodal_supports.append(mlvlp) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_concrete_effective_lengths(clientObject) + + + + + + + + diff --git a/docs/RFEM/TypesforConcreteDesign/ConcreteReinforcementDirections.py b/docs/RFEM/TypesforConcreteDesign/ConcreteReinforcementDirections.py new file mode 100644 index 00000000..ee59d1eb --- /dev/null +++ b/docs/RFEM/TypesforConcreteDesign/ConcreteReinforcementDirections.py @@ -0,0 +1,64 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import ReinforcementDirectionType +from math import pi + +class ConcreteReinforcementDirection(): + def __init__(self, + no: int = 1, + name: str = "RD 1", + surfaces = "1", + reinforcement_direction_type = ReinforcementDirectionType.REINFORCEMENT_DIRECTION_TYPE_FIRST_REINFORCEMENT_IN_X, + rotation_parameters = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Reinforcement Direction Tag + name (str): User Defined Name + surfaces (str): Assigned Surfaces + reinforcement_direction_type (enum): Reinforcement Direction Enumeration + rotation_parameters (list): Rotation Parameters + comment (str, optional): Comments + params (dict, optional): Parameters + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:reinforcement_direction') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Reinforcement Direction Type + clientObject.reinforcement_direction_type = reinforcement_direction_type.name + + if reinforcement_direction_type.name == "REINFORCEMENT_DIRECTION_TYPE_ROTATED": + clientObject.first_reinforcement_angle = rotation_parameters[0] * pi/180 + clientObject.second_reinforcement_angle = rotation_parameters[1] * pi/180 + + # Assigned Surfaces + clientObject.surfaces = ConvertToDlString(surfaces) + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_reinforcement_direction(clientObject) + + + + + + + + diff --git a/docs/RFEM/TypesforConcreteDesign/ConcreteSurfaceReinforcements.py b/docs/RFEM/TypesforConcreteDesign/ConcreteSurfaceReinforcements.py new file mode 100644 index 00000000..626f7eed --- /dev/null +++ b/docs/RFEM/TypesforConcreteDesign/ConcreteSurfaceReinforcements.py @@ -0,0 +1,180 @@ +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import SurfaceReinforcementLocationType, SurfaceReinforcementType, SurfaceReinforcementDirectionType, SurfaceReinforcementDesignDirection +from math import pi + +class ConcreteSurfaceReinforcements(): + def __init__(self, + no: int = 1, + name: str = "RD 1", + surfaces = "1", + material = "2", + location_type = SurfaceReinforcementLocationType.LOCATION_TYPE_ON_SURFACE, + reinforcement_type = SurfaceReinforcementType.REINFORCEMENT_TYPE_REBARS, + reinforcement_type_parameters = [0.01, 0.15, False], + cover_offset = [True, True, 0, 0], + reinforcement_direction = SurfaceReinforcementDirectionType.REINFORCEMENT_DIRECTION_TYPE_IN_DESIGN_REINFORCEMENT_DIRECTION, + reinforcement_direction_parameters = [SurfaceReinforcementDesignDirection.DESIGN_REINFORCEMENT_DIRECTION_A_S_1], + reinforcement_location = [], + reinforcement_acting_region = [], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Surface Reinforcement Tag + name (str): User Defined Name + surfaces (str): Assigned Surfaces + material (str): Reinforcement Material + location_type (enum): Location Type Enumeration + reinforcement_type (enum): Reinforcement Type Enumeration + reinforcement_type_parameters (list): Reinforcement Type Parameters + cover_offset (list): Cover Offset Parameters + reinforcement_direction (enum): Reinforcement Direction Enumeration + reinforcement_direction_parameters (list): Reinforcement Direction Parameters + reinforcement_location (list): Reinforcement Location Parameters + reinforcement_acting_region (list): Reinforcement Acting Region Parameters + comment (str, optional): Comments + params (dict, optional): Parameters + + for reinforcement_type = SurfaceReinforcementType.REINFORCEMENT_TYPE_REBARS: + reinforcement_type_parameters = [rebar_diameter, rebar_spacing, additional_transverse_reinforcement_enabled] + if additional_transverse_reinforcement_enabled == True: + reinforcement_type_parameters = [rebar_diameter, rebar_spacing, additional_transverse_reinforcement_enabled, additional_rebar_diameter, additional_rebar_spacing] + for reinforcement_type = SurfaceReinforcementType.REINFORCEMENT_TYPE_STIRRUPS: + reinforcement_type_parameters = [stirrup_diameter, stirrup_spacing] + for reinforcement_type = SurfaceReinforcementType.REINFORCEMENT_TYPE_MESH: + reinforcement_type_parameters = [mesh_product_range, mesh_shape, mesh_name] + + cover_offset = [alignment_top_enabled, alignment_bottom_enabled, additional_offset_to_concrete_cover_top, additional_offset_to_concrete_cover_bottom] + """ + + # Client model | Concrete Durabilities + clientObject = Model.clientModel.factory.create('ns0:surface_reinforcement') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Concrete Durability No. + clientObject.no = no + + # User Defined Name + clientObject.user_defined_name_enabled = True + clientObject.name = name + + # Assigned Surfaces + clientObject.surfaces = ConvertToDlString(surfaces) + + # Material + clientObject.material = material + + # Location Type + clientObject.location_type = location_type.name + + # Reinforcement Type + clientObject.reinforcement_type = reinforcement_type.name + if reinforcement_type.name == "REINFORCEMENT_TYPE_REBARS": + clientObject.rebar_diameter = reinforcement_type_parameters[0] + clientObject.rebar_spacing = reinforcement_type_parameters[1] + + clientObject.additional_transverse_reinforcement_enabled = reinforcement_type_parameters[2] + if not isinstance(reinforcement_type_parameters[2], bool): + raise Exception("WARNING: Last parameter should be type bool for cover_offset. Kindly check list inputs completeness and correctness.") + + if reinforcement_type_parameters[2]: + clientObject.additional_rebar_diameter = reinforcement_type_parameters[3] + clientObject.additional_rebar_spacing = reinforcement_type_parameters[4] + elif reinforcement_type.name == "REINFORCEMENT_TYPE_STIRRUPS": + clientObject.stirrup_diameter = reinforcement_type_parameters[0] + clientObject.stirrup_spacing = reinforcement_type_parameters[1] + elif reinforcement_type.name == "REINFORCEMENT_TYPE_MESH": + clientObject.mesh_product_range = reinforcement_type_parameters[0] + clientObject.mesh_shape = reinforcement_type_parameters[1] + clientObject.mesh_name = reinforcement_type_parameters[2] + + # Concrete Cover Assignment + if not isinstance(cover_offset[0], bool) and not isinstance(cover_offset[1], bool): + raise Exception("WARNING: First two parameters should be type bool for cover_offset. Kindly check list inputs completeness and correctness.") + clientObject.alignment_top_enabled = cover_offset[0] + clientObject.alignment_bottom_enabled = cover_offset[1] + + if cover_offset[0]: + clientObject.additional_offset_to_concrete_cover_top = cover_offset[2] + if cover_offset[1]: + clientObject.additional_offset_to_concrete_cover_bottom = cover_offset[3] + + # Reinforcement Direction + if location_type.name == "LOCATION_TYPE_ON_SURFACE": + clientObject.reinforcement_direction_type = reinforcement_direction.name + if reinforcement_direction.name == "REINFORCEMENT_DIRECTION_TYPE_IN_DESIGN_REINFORCEMENT_DIRECTION": + clientObject.design_reinforcement_direction = reinforcement_direction_parameters[0].name + elif reinforcement_direction.name == "REINFORCEMENT_DIRECTION_TYPE_PARALLEL_TO_TWO_POINTS": + clientObject.first_direction_point_1 = reinforcement_direction_parameters[0] + clientObject.first_direction_point_2 = reinforcement_direction_parameters[1] + clientObject.second_direction_point_1 = reinforcement_direction_parameters[2] + clientObject.second_direction_point_2 = reinforcement_direction_parameters[3] + clientObject.projection_coordinate_system = reinforcement_direction_parameters[4] + clientObject.projection_plane = reinforcement_direction_parameters[5].name + else: + clientObject.reinforcement_direction_type = reinforcement_direction.name + if reinforcement_direction.name == "REINFORCEMENT_DIRECTION_TYPE_IN_DESIGN_REINFORCEMENT_DIRECTION": + clientObject.design_reinforcement_direction = reinforcement_direction_parameters[0].name + clientObject.projection_coordinate_system = reinforcement_direction_parameters[1] + clientObject.projection_plane = reinforcement_direction_parameters[2].name + elif reinforcement_direction.name == "REINFORCEMENT_DIRECTION_TYPE_PARALLEL_TO_TWO_POINTS": + clientObject.first_direction_point_1 = reinforcement_direction_parameters[0] + clientObject.first_direction_point_2 = reinforcement_direction_parameters[1] + clientObject.second_direction_point_1 = reinforcement_direction_parameters[2] + clientObject.second_direction_point_2 = reinforcement_direction_parameters[3] + clientObject.projection_coordinate_system = reinforcement_direction_parameters[4] + clientObject.projection_plane = reinforcement_direction_parameters[5].name + + # Reinforcement Location + if location_type.name == "LOCATION_TYPE_FREE_RECTANGULAR": + clientObject.location_rectangle_type = reinforcement_location[0].name + if reinforcement_location[0].name == "RECTANGLE_TYPE_CORNER_POINTS": + clientObject.location_first_x = reinforcement_location[1] + clientObject.location_first_y = reinforcement_location[2] + clientObject.location_second_x = reinforcement_location[3] + clientObject.location_second_y = reinforcement_location[4] + clientObject.location_rotation = reinforcement_location[5]* pi/180 + elif reinforcement_location[0].name == "RECTANGLE_TYPE_CENTER_AND_SIDES": + clientObject.location_center_x = reinforcement_location[1] + clientObject.location_center_y = reinforcement_location[2] + clientObject.location_center_side_a = reinforcement_location[3] + clientObject.location_center_side_b = reinforcement_location[4] + clientObject.location_rotation = reinforcement_location[5] * pi/180 + elif location_type.name == "LOCATION_TYPE_FREE_CIRCULAR": + clientObject.location_center_x = reinforcement_location[0] + clientObject.location_center_y = reinforcement_location[1] + clientObject.location_radius = reinforcement_location[2] + elif location_type.name == "LOCATION_TYPE_FREE_POLYGON": + clientObject.polygon_points = Model.clientModel.factory.create('ns0:surface_reinforcement.polygon_points') + for i in range(len(reinforcement_location)): + mlvlp = Model.clientModel.factory.create('ns0:surface_reinforcement_polygon_points') + mlvlp.no = i+1 + mlvlp.first_coordinate = reinforcement_location[i][0] + mlvlp.second_coordinate = reinforcement_location[i][1] + mlvlp.comment = reinforcement_location[i][2] + clientObject.polygon_points.surface_reinforcement_polygon_points.append(mlvlp) + + # Reinforcement Acting Region + if location_type.name != "LOCATION_TYPE_ON_SURFACE": + clientObject.acting_region_from = reinforcement_acting_region[0] + clientObject.acting_region_to = reinforcement_acting_region[1] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_surface_reinforcement(clientObject) + + + + + + + + diff --git a/docs/RFEM/TypesforConcreteDesign/__init__.py b/docs/RFEM/TypesforConcreteDesign/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/RFEM/TypesforConcreteDesign/__init__.py @@ -0,0 +1 @@ + diff --git a/docs/RFEM/baseSettings.py b/docs/RFEM/baseSettings.py new file mode 100644 index 00000000..fe8f9f77 --- /dev/null +++ b/docs/RFEM/baseSettings.py @@ -0,0 +1,54 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import GlobalAxesOrientationType, LocalAxesOrientationType + +class BaseSettings(): + def __init__(self, + gravitational_acceleration: int = 10, + global_axes_orientation = GlobalAxesOrientationType.E_GLOBAL_AXES_ORIENTATION_ZDOWN, + local_axes_orientation = LocalAxesOrientationType.E_LOCAL_AXES_ORIENTATION_ZDOWN, + tolerances = [0.0005, 0.0005, 0.0005, 0.0005], + member_representatives: bool = False, + member_set_representatives: bool = False): + """ + Args: + gravitational_acceleration (int): Gravitational Acceleration (m/sn2) + global_axes_orientation (enum): Global Axes Orientation Enumeration + local_axes_orientation (Enum): Local Axes Orientation Enumeration + tolerances (list): Tolerances + member_representatives (bool): Member Representatives + member_set_representatives (bool): Member Set Representatives + + tolerances = [tolerance_for_nodes, tolerance_for_lines, tolerance_for_surfaces_and_planes, tolerance_for_directions] + """ + # Client model | Load Case + clientObject = Model.clientModel.factory.create('ns0:model_settings_and_options_type') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Gravitational Acceleration + clientObject.gravitational_acceleration = gravitational_acceleration + + # Global Axes Orientation + clientObject.global_axes_orientation = global_axes_orientation.name + + # Local Axes Orientation + clientObject.local_axes_orientation = local_axes_orientation.name + + # Tolerances + if len(tolerances) != 4: + raise Exception("WARNING:Expected size of the array. Kindly check the list correctness.") + + clientObject.tolerance_for_nodes = tolerances[0] + clientObject.tolerance_for_lines = tolerances[1] + clientObject.tolerance_for_surfaces_and_planes = tolerances[2] + clientObject.tolerance_for_directions = tolerances[3] + + # Member Representatives + clientObject.member_representatives_active = member_representatives + + # Member Set Representatives + clientObject.member_set_representatives_active = member_set_representatives + + # Add Base Data Settings to client model + Model.clientModel.service.set_model_settings_and_options(clientObject) diff --git a/docs/RFEM/dataTypes.py b/docs/RFEM/dataTypes.py new file mode 100644 index 00000000..16d0074d --- /dev/null +++ b/docs/RFEM/dataTypes.py @@ -0,0 +1,3 @@ +# Specific data types + +inf = float('inf') diff --git a/docs/RFEM/enums.py b/docs/RFEM/enums.py new file mode 100644 index 00000000..02cc85e1 --- /dev/null +++ b/docs/RFEM/enums.py @@ -0,0 +1,1207 @@ +from enum import Enum + +class MemberType(Enum): + ''' + Member Type + ''' + TYPE_BEAM, TYPE_BUCKLING, TYPE_CABLE, TYPE_COMPRESSION, TYPE_COUPLING_HINGE_HINGE,\ + TYPE_COUPLING_HINGE_RIGID, TYPE_COUPLING_RIGID_HINGE, TYPE_COUPLING_RIGID_RIGID,\ + TYPE_DEFINABLE_STIFFNESS, TYPE_RIB, TYPE_RIGID, TYPE_TENSION, TYPE_TRUSS, TYPE_TRUSS_ONLY_N, TYPE_RESULT_BEAM = range(15) + +class NodalSupportType(Enum): + ''' + Nodal Support Type + ''' + FIXED, HINGED, ROLLER, ROLLER_IN_X, ROLLER_IN_Y, ROLLER_IN_Z, FREE = range(7) + +class LineSupportType(Enum): + ''' + Nodal Support Type + ''' + FIXED, HINGED, SLIDING_IN_X_AND_Y, SLIDING_IN_X, SLIDING_IN_Y, SLIDING_IN_Z, FREE = range(7) + +class LineWeldedJointType(Enum): + """ + Line Welded Joint Type | Enum + """ + BUTT_JOINT, CORNER_JOINT, LAP_JOINT, TEE_JOINT = range(4) + +class WeldType(Enum): + """ + Welded Type | Enum + """ + WELD_BEVEL_AND_FILLET, WELD_DOUBLE_BEVEL, WELD_DOUBLE_FILLET, WELD_DOUBLE_J,\ + WELD_DOUBLE_SQUARE, WELD_DOUBLE_U, WELD_DOUBLE_V, WELD_J_AND_FILLET, WELD_SINGLE_BEVEL,\ + WELD_SINGLE_FILLET, WELD_SINGLE_J, WELD_SINGLE_SQUARE, WELD_SINGLE_U, WELD_SINGLE_V, WELD_V_AND_FILLET = range(15) + +class WeldLongitudalArrangement(Enum): + """ + Weld Longitudat Arrangement Type | Enum + """ + CHAIN_INTERMITTENT, CONTINUOUS, STAGGERED_INTERMITTENT = range(3) + +class LineMeshRefinementsType(Enum): + """ + Line Mesh Refinements Type | Enum + """ + TYPE_LENGTH, TYPE_ELEMENTS, TYPE_GRADUAL = range(3) + +class StaticAnalysisType(Enum): + ''' + Static Analysis Type + ''' + GEOMETRICALLY_LINEAR, LARGE_DEFORMATIONS, LARGE_DEFORMATIONS_POSTRCRITICAL, SECOND_ORDER_P_DELTA = range(4) + +class StaticAnalysisSettingsIterativeMethodForNonlinearAnalysis(Enum): + ''' + Static Analysis Settings Iterative Method For Nonlinear Analysis | Enum + ''' + DYNAMIC_RELAXATION, NEWTON_RAPHSON, NEWTON_RAPHSON_COMBINED_WITH_PICARD, NEWTON_RAPHSON_WITH_CONSTANT_STIFFNESS,\ + NEWTON_RAPHSON_WITH_POSTCRITICAL_ANALYSIS, PICARD = range(6) + + +class StaticAnalysisSettingsMethodOfEquationSystem(Enum): + ''' + Static Analysis Settings Method of Equation System | Enum + ''' + METHOD_OF_EQUATION_SYSTEM_DIRECT, METHOD_OF_EQUATION_SYSTEM_ITERATIVE = range(2) + + +class StaticAnalysisSettingsPlateBendingTheory(Enum): + ''' + Static Analysis Settings Plate Bending Theory | Enum + ''' + PLATE_BENDING_THEORY_MINDLIN, PLATE_BENDING_THEORY_KIRCHHOFF = range(2) + +class AnalysisType(Enum): + ''' + Analysis Type + ''' + ANALYSIS_TYPE_CREEP_AND_SHRINKAGE, ANALYSIS_TYPE_CUTTING_PATTERN, ANALYSIS_TYPE_MODAL, ANALYSIS_TYPE_RESPONSE_SPECTRUM,\ + ANALYSIS_TYPE_STATIC, ANALYSIS_TYPE_TIME_DEPENDENT, ANALYSIS_TYPE_TIME_HISTORY, ANALYSIS_TYPE_WIND_SIMULATION = range(8) + +class LoadDirectionType(Enum): + ''' + Load Direction Type + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(6) + +class MemberLoadDirection(Enum): + ''' + Member Load Direction + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,\ + LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_PRINCIPAL_U,\ + LOAD_DIRECTION_PRINCIPAL_V = range(11) + +class MemberLoadType(Enum): + ''' + Member Load Type + ''' + E_TYPE_MASS, LOAD_TYPE_AXIAL_DISPLACEMENT, LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_DISPLACEMENT, LOAD_TYPE_FORCE,\ + LOAD_TYPE_FORM_FINDING, LOAD_TYPE_INITIAL_PRESTRESS, LOAD_TYPE_MOMENT, LOAD_TYPE_PIPE_CONTENT_FULL,\ + LOAD_TYPE_PIPE_CONTENT_PARTIAL, LOAD_TYPE_PIPE_INTERNAL_PRESSURE, LOAD_TYPE_PRECAMBER, LOAD_TYPE_ROTARY_MOTION,\ + LOAD_TYPE_ROTATION, LOAD_TYPE_TEMPERATURE, LOAD_TYPE_TEMPERATURE_CHANGE = range(16) + +class MemberLoadDistribution(Enum): + ''' + Member Load Distribution + ''' + LOAD_DISTRIBUTION_CONCENTRATED_1, LOAD_DISTRIBUTION_CONCENTRATED_2, LOAD_DISTRIBUTION_CONCENTRATED_2x2,\ + LOAD_DISTRIBUTION_CONCENTRATED_N, LOAD_DISTRIBUTION_CONCENTRATED_VARYING, LOAD_DISTRIBUTION_PARABOLIC,\ + LOAD_DISTRIBUTION_TAPERED, LOAD_DISTRIBUTION_TRAPEZOIDAL, LOAD_DISTRIBUTION_UNIFORM, LOAD_DISTRIBUTION_UNIFORM_TOTAL,\ + LOAD_DISTRIBUTION_VARYING, LOAD_DISTRIBUTION_VARYING_IN_Z = range(12) + +class MemberHingeAxialRelease(Enum): + ''' + Member Hinge Axial Release + ''' + NONLINEARITY_TYPE_DIAGRAM, NONLINEARITY_TYPE_FAILURE_ALL_IF_NEGATIVE, NONLINEARITY_TYPE_FAILURE_ALL_IF_POSITIVE,\ + NONLINEARITY_TYPE_FAILURE_IF_NEGATIVE, NONLINEARITY_TYPE_FAILURE_IF_POSITIVE, NONLINEARITY_TYPE_FRICTION_DIRECTION_1,\ + NONLINEARITY_TYPE_FRICTION_DIRECTION_1_2, NONLINEARITY_TYPE_FRICTION_DIRECTION_1_PLUS_2, NONLINEARITY_TYPE_FRICTION_DIRECTION_2,\ + NONLINEARITY_TYPE_NONE, NONLINEARITY_TYPE_PARTIAL_ACTIVITY, NONLINEARITY_TYPE_STIFFNESS_DIAGRAM = range(12) + +class LineLoadType(Enum): + ''' + Line Load Type + ''' + E_TYPE_MASS, LOAD_TYPE_FORCE, LOAD_TYPE_MOMENT = range(3) + +class LineLoadDistribution(Enum): + ''' + Line Load Distribution + ''' + LOAD_DISTRIBUTION_CONCENTRATED_1, LOAD_DISTRIBUTION_CONCENTRATED_2, LOAD_DISTRIBUTION_CONCENTRATED_2x2,\ + LOAD_DISTRIBUTION_CONCENTRATED_N, LOAD_DISTRIBUTION_CONCENTRATED_VARYING, LOAD_DISTRIBUTION_PARABOLIC,\ + LOAD_DISTRIBUTION_TAPERED, LOAD_DISTRIBUTION_TRAPEZOIDAL, LOAD_DISTRIBUTION_UNIFORM, LOAD_DISTRIBUTION_UNIFORM_TOTAL,\ + LOAD_DISTRIBUTION_VARYING = range(11) + +class SurfaceGeometry(Enum): + ''' + Geometry Type + ''' + GEOMETRY_PLANE, GEOMETRY_QUADRANGLE, GEOMETRY_NURBS, GEOMETRY_ROTATED, GEOMETRY_PIPE = range(5) + +class SurfaceType(Enum): + ''' + Stiffness Type + ''' + TYPE_LOAD_TRANSFER, TYPE_MEMBRANE, TYPE_RIGID, TYPE_STANDARD, TYPE_WITHOUT_MEMBRANE_TENSION, TYPE_WITHOUT_THICKNESS = range(6) + +class SurfaceLoadDistribution(Enum): + ''' + Surface Load Distribution + ''' + LOAD_DISTRIBUTION_LINEAR, LOAD_DISTRIBUTION_LINEAR_IN_X, LOAD_DISTRIBUTION_LINEAR_IN_Y, LOAD_DISTRIBUTION_LINEAR_IN_Z,\ + LOAD_DISTRIBUTION_RADIAL, LOAD_DISTRIBUTION_UNIFORM, LOAD_DISTRIBUTION_VARYING_IN_Z = range(7) + +class SurfaceLoadDirection(Enum): + ''' + Surface Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,\ + LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(9) + +class SurfaceLoadType(Enum): + ''' + Surface Load Type | Enum + ''' + LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_FORCE, LOAD_TYPE_FORM_FINDING, LOAD_TYPE_MASS, LOAD_TYPE_PRECAMBER,\ + LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_TEMPERATURE = range(7) + +class SurfaceLoadDistributionDirection(Enum): + ''' + Surface Load Distribution Direction + ''' + LOAD_TRANSFER_DIRECTION_IN_BOTH, LOAD_TRANSFER_DIRECTION_IN_X, LOAD_TRANSFER_DIRECTION_IN_Y = range(3) + #LOAD_DISTRIBUTION_DIRECTION_IN_BOTH, LOAD_DISTRIBUTION_DIRECTION_IN_X, LOAD_DISTRIBUTION_DIRECTION_IN_Y = range(3) + +class SetType(Enum): + ''' + Line, Member, Surface, and Solid Set Type + ''' + SET_TYPE_CONTINUOUS, SET_TYPE_GROUP = range(2) + +class NodalLoadType(Enum): + ''' + Nodal Load Type + ''' + LOAD_TYPE_COMPONENTS, LOAD_TYPE_FORCE, LOAD_TYPE_MASS, LOAD_TYPE_MOMENT = range(4) + +class NodalLoadSpecificDirectionType(Enum): + ''' + Nodal Load Specific Direction Type + ''' + DIRECTION_TYPE_DIRECTED_TO_NODE, DIRECTION_TYPE_PARALLEL_TO_CS_OF_LINE, DIRECTION_TYPE_PARALLEL_TO_CS_OF_MEMBER, DIRECTION_TYPE_PARALLEL_TO_TWO_NODES, DIRECTION_TYPE_ROTATED_VIA_3_ANGLES = range(5) + +class NodalLoadAxesSequence(Enum): + ''' + Nodal Load Axes Sequence + ''' + SEQUENCE_XYZ, SEQUENCE_XZY, SEQUENCE_YXZ, SEQUENCE_YZX, SEQUENCE_ZXY, SEQUENCE_ZYX = range(6) + +class NodalLoadMassAxisRotation(Enum): + ''' + Nodal Load Mass Axis Rotation + ''' + + AXIS_OF_ROTATION_X_NEGATIVE, AXIS_OF_ROTATION_X_POSITIVE, AXIS_OF_ROTATION_Y_NEGATIVE, AXIS_OF_ROTATION_Y_POSITIVE, AXIS_OF_ROTATION_Z_NEGATIVE, AXIS_OF_ROTATION_Z_POSITIVE = range(6) + +class ThicknessType(Enum): + ''' + Thickness Type + ''' + TYPE_LAYERS, TYPE_SHAPE_ORTHOTROPY, TYPE_STIFFNESS_MATRIX, TYPE_THICKNESS_PHASE, TYPE_UNIFORM,\ + TYPE_VARIABLE_CIRCLE, TYPE_VARIABLE_FOUR_SURFACE_CORNERS, TYPE_VARIABLE_THREE_NODES, \ + TYPE_VARIABLE_TWO_NODES_AND_DIRECTION = range(9) + +class ThicknessDirection(Enum): + ''' + Thickness Direction + ''' + THICKNESS_DIRECTION_IN_SMALL_X, THICKNESS_DIRECTION_IN_SMALL_Y, THICKNESS_DIRECTION_IN_X, \ + THICKNESS_DIRECTION_IN_Y, THICKNESS_DIRECTION_IN_Z = range(5) + +class ThicknessSelfWeightDefinitionType(Enum): + SELF_WEIGHT_COMPUTED_FROM_PARAMETERS, SELF_WEIGHT_DEFINED_VIA_FICTITIOUS_THICKNESS, \ + SELF_WEIGHT_DEFINED_VIA_WEIGHT = range(3) + +class ThicknessShapeOrthotropySelfWeightDefinitionType(Enum): + ''' + Thickness Shape Orthotropy Self Weight Definition Type | Enum + ''' + SELF_WEIGHT_COMPUTED_FROM_PARAMETERS, SELF_WEIGHT_DEFINED_VIA_FICTITIOUS_THICKNESS, \ + SELF_WEIGHT_DEFINED_VIA_WEIGHT = range(3) + +class ThicknessStiffnessMatrixSelfWeightDefinitionType(Enum): + ''' + Thickness Stiffness Matrix Self Weight Definition Type | Enum + ''' + SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_BULK_DENSITY_AND_AREA_DENSITY, \ + SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_AREA_DENSITY, \ + SELF_WEIGHT_DEFINITION_TYPE_DEFINED_VIA_FICTITIOUS_THICKNESS_AND_BULK_DENSITY = range(3) + +class ThicknessOrthotropyType(Enum): + BIDIRECTIONAL_RIBBED_PLATE, COUPLING, EFFECTIVE_THICKNESS, GRILLAGE, \ + HOLLOW_CORE_SLAB, TRAPEZOIDAL_SHEET, UNIDIRECTIONAL_RIBBED_PLATE = range(7) + +class LineLoadDirection(Enum): + ''' + Line Load Direction + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,\ + LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(9) + + +class MemberLoadEccentricityHorizontalAlignment(Enum): + ''' + Member Load Eccentricity Horizontal Alignment + ''' + + ALIGN_LEFT, ALIGN_MIDDLE, ALIGN_NONE, ALIGN_TOP = range(4) + +class MemberLoadEccentricityVerticalAlignment(Enum): + ''' + Member Load Eccentricity Vertical Alignment + ''' + + ALIGN_LEFT, ALIGN_MIDDLE, ALIGN_NONE, ALIGN_TOP = range(4) + +class MemberLoadEccentricitySectionMiddle(Enum): + ''' + Member Load Eccentricity Section Middle + ''' + + LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, LOAD_ECCENTRICITY_SECTION_MIDDLE_NONE, LOAD_ECCENTRICITY_SECTION_MIDDLE_SHEAR_CENTER = range(3) + +class MemberLoadFormFindingDefinitionType(Enum): + ''' + Member Load Form Finding Definition Type + ''' + FORM_FINDING_TYPE_FORCE, FORM_FINDING_TYPE_GEOMETRIC = range(2) + +class MemberLoadFormFindingForceDefinition(Enum): + ''' + Member Load Form Finding Force Definition + ''' + FORM_FINDING_FORCE_INPUT_PARAMETER_AVERAGE, FORM_FINDING_FORCE_INPUT_PARAMETER_DENSITY, FORM_FINDING_FORCE_INPUT_PARAMETER_HORIZONTAL_TENSION_COMPONENT, \ + FORM_FINDING_FORCE_INPUT_PARAMETER_MAXIMUM_FORCE_IN_MEMBER, FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMAL_TENSION_AT_I_END, \ + FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMAL_TENSION_AT_J_END, FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMUM_FORCE_IN_MEMBER,\ + FORM_FINDING_FORCE_INPUT_PARAMETER_TENSION_AT_I_END, FORM_FINDING_FORCE_INPUT_PARAMETER_TENSION_AT_J_END = range(9) + +class MemberLoadFormFindingGeometryDefinition(Enum): + ''' + Member Load Form Finding Geometry Definition + ''' + FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_LENGTH, FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_LOW_POINT_VERTICAL_SAG, \ + FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_MAXIMUM_VERTICAL_SAG, FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_SAG, \ + FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_UNSTRESSED_LENGTH = range(5) + +class MemberLoadFormFindingInternalForce(Enum): + ''' + Member Load Form Finding Internal Force + ''' + FORM_FINDING_INTERNAL_FORCE_COMPRESSION, FORM_FINDING_INTERNAL_FORCE_TENSION = range(2) + +class MemberLoadDirectionOrientation(Enum): + ''' + Member Load Direction Orientation + ''' + LOAD_DIRECTION_FORWARD, LOAD_DIRECTION_REVERSED = range(2) + +class MemberLoadAxisDefinitionType(Enum): + ''' + Member Load Axis Definition + ''' + AXIS_DEFINITION_POINT_AND_AXIS, AXIS_DEFINITION_TWO_POINTS = range(2) + +class MemberLoadAxisDefinition(Enum): + ''' + Member Load Axis Definition + ''' + AXIS_X, AXIS_Y, AXIS_Z = range(3) + +class MemberLoadAxisDefinitionAxisOrientation(Enum): + ''' + Member Load Axis Definition Axis Orientation + ''' + AXIS_NEGATIVE, AXIS_POSITIVE = range(2) + +class SurfaceLoadAxisDefinitionAxis(Enum): + ''' + Surface Load Axis Definition Axis + ''' + AXIS_X, AXIS_Y, AXIS_Z = range(3) + +class SurfaceLoadAxisDirectionType(Enum): + ''' + Surface Load Axis Direction Type + ''' + AXIS_NEGATIVE, AXIS_POSITIVE = range(2) + +class SurfaceLoadAxisDefinitionType(Enum): + ''' + Surface Load Axis Definition Type + ''' + AXIS_DEFINITION_POINT_AND_AXIS, AXIS_DEFINITION_TWO_POINTS = range(2) + +class SurfaceLoadDirection(Enum): + ''' + Surface Load Load Direction + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(9) + +class SurfaceLoadType(Enum): + ''' + Surface Load Type + ''' + LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_FORCE, LOAD_TYPE_FORM_FINDING, LOAD_TYPE_MASS, LOAD_TYPE_PRECAMBER, LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_TEMPERATURE = range(7) + +class NodeType(Enum): + ''' + Node Type | Enum + ''' + TYPE_BETWEEN_TWO_NODES, TYPE_BETWEEN_TWO_POINTS, TYPE_ON_LINE, TYPE_ON_MEMBER, TYPE_STANDARD = range (5) + +class NodeCoordinateSystemType(Enum): + ''' + Node Coordinate System Type | Enum + ''' + COORDINATE_SYSTEM_CARTESIAN, COORDINATE_SYSTEM_POLAR, COORDINATE_SYSTEM_X_CYLINDRICAL, COORDINATE_SYSTEM_Y_CYLINDRICAL, COORDINATE_SYSTEM_Z_CYLINDRICAL = range (5) + +class NodeReferenceType(Enum): + ''' + Node Reference Type| Enum + ''' + REFERENCE_TYPE_L, REFERENCE_TYPE_XY, REFERENCE_TYPE_XZ, REFERENCE_TYPE_YZ = range (4) + +class LineArcAlphaAdjustmentTarget(Enum): + ''' + Line Arc Alpha Adjustment Target | Enum + ''' + ALPHA_ADJUSTMENT_TARGET_ARC_CONTROL_POINT, ALPHA_ADJUSTMENT_TARGET_BEGINNING_OF_ARC, \ + ALPHA_ADJUSTMENT_TARGET_END_OF_ARC = range(3) +class MemberSetLoadType(Enum): + ''' + Member Set Load Load Type + ''' + E_TYPE_MASS, LOAD_TYPE_AXIAL_DISPLACEMENT, LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_DISPLACEMENT, \ + LOAD_TYPE_FORCE, LOAD_TYPE_FORM_FINDING, LOAD_TYPE_INITIAL_PRESTRESS, LOAD_TYPE_MOMENT, \ + LOAD_TYPE_PIPE_CONTENT_FULL, LOAD_TYPE_PIPE_CONTENT_PARTIAL, LOAD_TYPE_PIPE_INTERNAL_PRESSURE, \ + LOAD_TYPE_PRECAMBER, LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_ROTATION, LOAD_TYPE_TEMPERATURE, LOAD_TYPE_TEMPERATURE_CHANGE = range(16) + +class MemberSetLoadDistribution(Enum): + ''' + Member Set Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_CONCENTRATED_1, LOAD_DISTRIBUTION_CONCENTRATED_2, LOAD_DISTRIBUTION_CONCENTRATED_2x2,\ + LOAD_DISTRIBUTION_CONCENTRATED_N, LOAD_DISTRIBUTION_CONCENTRATED_VARYING, LOAD_DISTRIBUTION_PARABOLIC,\ + LOAD_DISTRIBUTION_TAPERED, LOAD_DISTRIBUTION_TRAPEZOIDAL, LOAD_DISTRIBUTION_UNIFORM, LOAD_DISTRIBUTION_UNIFORM_TOTAL,\ + LOAD_DISTRIBUTION_VARYING, LOAD_DISTRIBUTION_VARYING_IN_Z = range(12) + +class MemberSetLoadDirection(Enum): + ''' + Member Set Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,\ + LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_PRINCIPAL_U,\ + LOAD_DIRECTION_PRINCIPAL_V = range(11) + +class MemberSetLoadDirectionOrientation(Enum): + ''' + Member Set Load Direction Orientation + ''' + LOAD_DIRECTION_FORWARD, LOAD_DIRECTION_REVERSED = range(2) + +class MemberSetLoadFormFindingDefinitionType(Enum): + ''' + Member Set Load Form Finding Definition Type + ''' + FORM_FINDING_TYPE_FORCE, FORM_FINDING_TYPE_GEOMETRIC = range(2) + +class MemberSetLoadAxisDefinitionType(Enum): + ''' + Member Set Load Axis Definition + ''' + AXIS_DEFINITION_POINT_AND_AXIS, AXIS_DEFINITION_TWO_POINTS = range(2) + +class MemberSetLoadAxisDefinition(Enum): + ''' + Member Set Load Axis Definition + ''' + AXIS_X, AXIS_Y, AXIS_Z = range(3) + +class MemberSetLoadAxisDefinitionAxisOrientation(Enum): + ''' + Member Set Load Axis Definition Axis Orientation + ''' + AXIS_NEGATIVE, AXIS_POSITIVE = range(2) + +class MemberSetLoadEccentricityHorizontalAlignment(Enum): + ''' + Member Set Load Eccentricity Horizontal Alignment + ''' + ALIGN_LEFT, ALIGN_MIDDLE, ALIGN_NONE, ALIGN_RIGHT = range(4) + +class MemberSetLoadEccentricityVerticalAlignment(Enum): + ''' + Member Set Load Eccentricity Vertical Alignment + ''' + ALIGN_LEFT, ALIGN_MIDDLE, ALIGN_NONE, ALIGN_TOP = range(4) + +class MemberSetLoadEccentricitySectionMiddle(Enum): + ''' + Member Set Load Eccentricity Section Middle + ''' + LOAD_ECCENTRICITY_SECTION_MIDDLE_CENTER_OF_GRAVITY, LOAD_ECCENTRICITY_SECTION_MIDDLE_NONE, LOAD_ECCENTRICITY_SECTION_MIDDLE_SHEAR_CENTER = range(3) + +class MemberSetLoadFormFindingInternalForce(Enum): + ''' + Member Set Load Form Finding Internal Force + ''' + FORM_FINDING_INTERNAL_FORCE_COMPRESSION, FORM_FINDING_INTERNAL_FORCE_TENSION = range(2) + +class MemberSetLoadFormFindingGeometryDefinition(Enum): + ''' + Member Set Load Form Finding Geometry Definition + ''' + FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_LENGTH, FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_LOW_POINT_VERTICAL_SAG, FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_MAXIMUM_VERTICAL_SAG, \ + FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_SAG, FORM_FINDING_GEOMETRIC_INPUT_PARAMETER_UNSTRESSED_LENGTH = range(5) + +class MemberSetLoadFormFindingForceDefinition(Enum): + ''' + Member Set Load Form Finding Force Definition + ''' + FORM_FINDING_FORCE_INPUT_PARAMETER_AVERAGE, FORM_FINDING_FORCE_INPUT_PARAMETER_DENSITY, FORM_FINDING_FORCE_INPUT_PARAMETER_HORIZONTAL_TENSION_COMPONENT, \ + FORM_FINDING_FORCE_INPUT_PARAMETER_MAXIMUM_FORCE_IN_MEMBER, FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMAL_TENSION_AT_I_END, FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMAL_TENSION_AT_J_END, \ + FORM_FINDING_FORCE_INPUT_PARAMETER_MINIMUM_FORCE_IN_MEMBER, FORM_FINDING_FORCE_INPUT_PARAMETER_TENSION_AT_I_END, FORM_FINDING_FORCE_INPUT_PARAMETER_TENSION_AT_J_END = range(9) + +class SurfaceSetLoadType(Enum): + ''' + Surface Set Load Load Type + ''' + LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_FORCE, LOAD_TYPE_FORM_FINDING, LOAD_TYPE_MASS, LOAD_TYPE_PRECAMBER,\ + LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_TEMPERATURE = range(7) + +class SurfaceSetLoadDistribution(Enum): + ''' + Surface Set Load Load Distribution + ''' + LOAD_DISTRIBUTION_LINEAR, LOAD_DISTRIBUTION_LINEAR_IN_X, LOAD_DISTRIBUTION_LINEAR_IN_Y, LOAD_DISTRIBUTION_LINEAR_IN_Z,\ + LOAD_DISTRIBUTION_RADIAL, LOAD_DISTRIBUTION_UNIFORM, LOAD_DISTRIBUTION_VARYING_IN_Z = range(7) + +class SurfaceSetLoadDirection(Enum): + ''' + Surface Set Load Direction + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,\ + LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ + LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE,\ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(9) + +class SurfaceSetLoadAxisDefinitionType(Enum): + ''' + Surface Set Load Axis Definiton Type + ''' + AXIS_DEFINITION_POINT_AND_AXIS, AXIS_DEFINITION_TWO_POINTS = range(2) + +class SurfaceSetLoadAxisDefinitionAxis(Enum): + ''' + Surface Set Load Axis Definition Axis + ''' + AXIS_X, AXIS_Y, AXIS_Z = range(3) + +class SurfaceSetLoadAxisDefinitionAxisOrientation(Enum): + ''' + Surface Set Load Axis Definition Axis Orientation + ''' + AXIS_NEGATIVE, AXIS_POSITIVE = range(2) + +class SurfaceSetLoadFormFindingDefinition(Enum): + ''' + Surface Set Load Form Finding Definition + ''' + FORM_FINDING_DEFINITION_FORCE, FORM_FINDING_DEFINITION_STRESS = range(2) + +class SurfaceSetLoadFormFindingCalculationMethod(Enum): + ''' + Surface Set Load Form Finding Calculation Method + ''' + FORM_FINDING_CALCULATION_METHOD_PROJECTION, FORM_FINDING_CALCULATION_METHOD_STANDARD = range(2) + +class GlobalParameterUnitGroup(Enum): + ''' + Global Parameter Unit Group | Enum + ''' + ANGLE, AREA, DENSITY, DIMENSIONLESS, DYNAMIC_INCREASE_FACTOR, EG_MODULE, FRICTION_COEFFICIENT, \ + GEOGRAPHIC_COORDINATES, GRAVITATIONAL_ACCELERATION, LENGTH, LOADS_ANGULAR_ACCELERATION, LOADS_ANGULAR_VELOCITY, \ + LOADS_AREA_MASS, LOADS_AXIAL_STRAIN, LOADS_DENSITY, LOADS_DISPLACEMENT, LOADS_DISPLACEMENT_PER_UNIT_LENGTH, \ + LOADS_FORCE, LOADS_FORCE_PER_UNIT_LENGTH, LOADS_IMPOSED_DISPLACEMENT, LOADS_IMPOSED_ROTATION, LOADS_KINEMATIC_VISCOSITY, \ + LOADS_KINETIC_ENERGY, LOADS_LENGTH, LOADS_MASS, LOADS_MOMENT, LOADS_MOMENT_PER_UNIT_LENGTH, LOADS_PRECAMBER, \ + LOADS_PRESSURE, LOADS_RELATIVE_LENGTH, LOADS_ROTATION, LOADS_ROTATION_PER_UNIT_LENGTH, LOADS_SOLID_TYPE_LOAD, \ + LOADS_SPECIFIC_ENERGY, LOADS_SURFACE_TYPE_LOAD, LOADS_TEMPERATURE, LOADS_TEMPERATURE_CHANGE, LOADS_VELOCITY, \ + MASS, MASS_MOMENT_PER_UNIT_AREA, MATERIAL_ANGLE, MATERIAL_DEFORMATION, MATERIAL_FACTOR, MATERIAL_QUANTITY_INTEGER, \ + MATERIAL_SPECIFIC_WEIGHT, MATERIAL_THICKNESS, PARTIAL_FACTOR, POISSONS_RATIO, PRECISION_FACTOR, QUANTITY, QUANTITY_INTEGER ,\ + RATIO, RELATIVE_LENGTH, SECTION_ANGLE, SECTION_AREA, SECTION_BIMOMENT, SECTION_COMPLIANCE, SECTION_DIMENSION, \ + SECTION_EFFECTIVE_SECOND_MOMENT_OF_AREA, SECTION_FORCE, SECTION_MOMENT, SECTION_MOMENT_OF_INERTIA, \ + SECTION_NORMALIZED_WARPING_CONSTANT, SECTION_PERIMETER, SECTION_QUANTITY, SECTION_SECTION_FACTOR, SECTION_SECTION_MODULUS, \ + SECTION_STATICAL_MOMENT_OF_AREA, SECTION_TENSION_FIELD_COEFFICIENT_1, SECTION_TENSION_FIELD_COEFFICIENT_2, \ + SECTION_UNIT_STRESSES, SECTION_UNIT_WARPING_FUNCTION, SECTION_WARPING_CONSTANT, SECTION_WARPING_STATICAL_MOMENT, \ + SELF_WEIGHT_FACTOR, STIFFNESS_MULTIPLICATION_FACTOR, STRAIN, STRAIN_RATE, STRESSES, THERMAL_EXPANSION_COEFFICIENT, \ + THICKNESS, TIME, VOLUME, WEIGHT_AND_KNOT = range(84) + +class GlobalParameterDefinitionType(Enum): + ''' + Global Parameter Definition Type + ''' + DEFINITION_TYPE_FORMULA, DEFINITION_TYPE_OPTIMIZATION, DEFINITION_TYPE_OPTIMIZATION_ASCENDING, \ + DEFINITION_TYPE_OPTIMIZATION_DESCENDING, DEFINITION_TYPE_VALUE = range(5) + +class FreeConcentratedLoadLoadDirection(Enum): + ''' + Load Concentrated Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X, LOAD_DIRECTION_GLOBAL_Y, LOAD_DIRECTION_GLOBAL_Z, LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, \ + LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_USER_DEFINED_U, LOAD_DIRECTION_USER_DEFINED_V, LOAD_DIRECTION_USER_DEFINED_W = range(9) + +class FreeLoadLoadProjection(Enum): + ''' + Free Load Load Projection | Enum + ''' + LOAD_PROJECTION_XY_OR_UV, LOAD_PROJECTION_XZ_OR_UW, LOAD_PROJECTION_YZ_OR_VW = range(3) + +class FreeConcentratedLoadLoadType(Enum): + ''' + Free Concentrated Load Load Type | Enum + ''' + LOAD_TYPE_FORCE, LOAD_TYPE_MOMENT = range(2) + +class FreeLineLoadLoadDirection(Enum): + ''' + Free Line Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_PROJECTED, LOAD_DIRECTION_GLOBAL_X_TRUE, LOAD_DIRECTION_GLOBAL_Y_PROJECTED, \ + LOAD_DIRECTION_GLOBAL_Y_TRUE, LOAD_DIRECTION_GLOBAL_Z_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_TRUE, \ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_USER_DEFINED_U_PROJECTED, \ + LOAD_DIRECTION_USER_DEFINED_U_TRUE, LOAD_DIRECTION_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_USER_DEFINED_V_TRUE, \ + LOAD_DIRECTION_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_USER_DEFINED_W_TRUE = range(15) + +class FreeLineLoadLoadDistribution(Enum): + ''' + Free Line Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR, LOAD_DISTRIBUTION_UNIFORM = range(2) + +class FreeRectangularLoadLoadDirection(Enum): + ''' + Free Rectangular Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_PROJECTED, LOAD_DIRECTION_GLOBAL_X_TRUE, LOAD_DIRECTION_GLOBAL_Y_PROJECTED, \ + LOAD_DIRECTION_GLOBAL_Y_TRUE, LOAD_DIRECTION_GLOBAL_Z_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_TRUE, \ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_USER_DEFINED_U_PROJECTED, \ + LOAD_DIRECTION_USER_DEFINED_U_TRUE, LOAD_DIRECTION_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_USER_DEFINED_V_TRUE, \ + LOAD_DIRECTION_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_USER_DEFINED_W_TRUE = range(15) + +class FreeRectangularLoadLoadDistribution(Enum): + ''' + Free Rectangular Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR_FIRST, LOAD_DISTRIBUTION_LINEAR_SECOND, LOAD_DISTRIBUTION_UNIFORM, \ + LOAD_DISTRIBUTION_VARYING_ALONG_PERIMETER, LOAD_DISTRIBUTION_VARYING_IN_Z, \ + LOAD_DISTRIBUTION_VARYING_IN_Z_AND_ALONG_PERIMETER = range(6) + +class FreeRectangularLoadLoadLocationRectangle(Enum): + ''' + Free Rectangular Load Load Location Rectangle | Enum + ''' + LOAD_LOCATION_RECTANGLE_CENTER_AND_SIDES, LOAD_LOCATION_RECTANGLE_CORNER_POINTS = range(2) + +class FreeCircularLoadLoadDirection(Enum): + ''' + Free Circular Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_PROJECTED, LOAD_DIRECTION_GLOBAL_X_TRUE, LOAD_DIRECTION_GLOBAL_Y_PROJECTED, \ + LOAD_DIRECTION_GLOBAL_Y_TRUE, LOAD_DIRECTION_GLOBAL_Z_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_TRUE, \ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_USER_DEFINED_U_PROJECTED, \ + LOAD_DIRECTION_USER_DEFINED_U_TRUE, LOAD_DIRECTION_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_USER_DEFINED_V_TRUE, \ + LOAD_DIRECTION_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_USER_DEFINED_W_TRUE = range(15) + +class FreeCircularLoadLoadDistribution(Enum): + ''' + Free Circular Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR, LOAD_DISTRIBUTION_UNIFORM = range(2) + +class FreePolygonLoadLoadDirection(Enum): + ''' + Free Polygon Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_PROJECTED, LOAD_DIRECTION_GLOBAL_X_TRUE, LOAD_DIRECTION_GLOBAL_Y_PROJECTED, \ + LOAD_DIRECTION_GLOBAL_Y_TRUE, LOAD_DIRECTION_GLOBAL_Z_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_TRUE, \ + LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z, LOAD_DIRECTION_USER_DEFINED_U_PROJECTED, \ + LOAD_DIRECTION_USER_DEFINED_U_TRUE, LOAD_DIRECTION_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_USER_DEFINED_V_TRUE, \ + LOAD_DIRECTION_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_USER_DEFINED_W_TRUE = range(15) + +class FreePolygonLoadLoadDistribution(Enum): + ''' + Free Polygon Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR, LOAD_DISTRIBUTION_LINEAR_FIRST, LOAD_DISTRIBUTION_LINEAR_SECOND, LOAD_DISTRIBUTION_UNIFORM = range(4) + +class RigidLinkType(Enum): + ''' + Rigid Link Type | Enum + ''' + TYPE_LINE_TO_LINE, TYPE_LINE_TO_SURFACE, TYPE_DIAPHRAGM = range(3) + +class SolidType(Enum): + ''' + Solid Type | Enum + ''' + TYPE_STANDARD, TYPE_GAS, TYPE_CONTACT, TYPE_HOLE, TYPE_SOIL = range(5) + +class SolidLoadType(Enum): + ''' + Solid Load Load Type | Enum + ''' + LOAD_TYPE_BUOYANCY, LOAD_TYPE_FORCE, LOAD_TYPE_GAS, LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_STRAIN, LOAD_TYPE_TEMPERATURE = range(6) + +class SolidLoadDistribution(Enum): + ''' + Solid Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR_IN_X, LOAD_DISTRIBUTION_LINEAR_IN_Y, LOAD_DISTRIBUTION_LINEAR_IN_Z, LOAD_DISTRIBUTION_UNIFORM = range(4) + +class SolidLoadDirection(Enum): + ''' + Solid Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE = range(3) +class SolidSetLoadType(Enum): + ''' + Solidset Load Load Type | Enum + ''' + LOAD_TYPE_BUOYANCY, LOAD_TYPE_FORCE, LOAD_TYPE_GAS, LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_STRAIN, LOAD_TYPE_TEMPERATURE = range(6) + +class SolidSetLoadDistribution(Enum): + ''' + Solidset Load Load Distribution | Enum + ''' + LOAD_DISTRIBUTION_LINEAR_IN_X, LOAD_DISTRIBUTION_LINEAR_IN_Y, LOAD_DISTRIBUTION_LINEAR_IN_Z, LOAD_DISTRIBUTION_UNIFORM = range(4) + +class SolidSetLoadDirection(Enum): + ''' + Solidset Load Load Direction | Enum + ''' + LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE = range(3) + + +class StabilityAnalysisSettingsAnalysisType(Enum): + ''' + Stability Analysis Settings Analysis Type | Enum + ''' + EIGENVALUE_METHOD, INCREMENTALY_METHOD_WITHOUT_EIGENVALUE, \ + INCREMENTALY_METHOD_WITH_EIGENVALUE = range(3) + +class StabilityAnalysisSettingsEigenvalueMethod(Enum): + ''' + Stability Analysis Settings Eigenvalue Method | Enum + ''' + EIGENVALUE_METHOD_ICG_ITERATION, EIGENVALUE_METHOD_LANCZOS, \ + EIGENVALUE_METHOD_ROOTS_OF_CHARACTERISTIC_POLYNOMIAL, \ + EIGENVALUE_METHOD_SUBSPACE_ITERATION, E_EIGENVALUE_METHOD_SHIFTED_INVERSE_POWER_METHOD = range(5) + +class StabilityAnalysisSettingsMatrixType(Enum): + ''' + Stability Analysis Settings Matrix Type | Enum + ''' + MATRIX_TYPE_STANDARD, MATRIX_TYPE_UNIT = range(2) + +class StabilityAnalysisSettingsStoppingOfLoadIncreasingResult(Enum): + ''' + Stability Analysis Settings Stopping Of Load Increasing Result | Enum + ''' + RESULT_TYPE_DISPLACEMENT_U, RESULT_TYPE_DISPLACEMENT_U_X, RESULT_TYPE_DISPLACEMENT_U_Y, \ + RESULT_TYPE_DISPLACEMENT_U_Z, RESULT_TYPE_ROTATION_PHI, RESULT_TYPE_ROTATION_PHI_X, \ + RESULT_TYPE_ROTATION_PHI_Y, RESULT_TYPE_ROTATION_PHI_Z = range(8) +class LineType(Enum): + ''' + Line Type + ''' + TYPE_ARC, TYPE_CIRCLE, TYPE_CUT_VIA_SECTION, TYPE_CUT_VIA_TWO_LINES, TYPE_ELLIPTICAL_ARC, TYPE_ELLIPSE, TYPE_NURBS, TYPE_PARABOLA, TYPE_POLYLINE, TYPE_SPLINE = range(10) + +class ObjectTypes(Enum): + ''' + Object Types + ''' + E_OBJECT_TYPE_ACTION, E_OBJECT_TYPE_ACTION_COMBINATION, E_OBJECT_TYPE_BUILDING_STORY, E_OBJECT_TYPE_CLIPPING_BOX, E_OBJECT_TYPE_CLIPPING_PLANE, E_OBJECT_TYPE_COMBINATION_WIZARD, E_OBJECT_TYPE_COORDINATE_SYSTEM,\ + E_OBJECT_TYPE_CUTTING_LINE_SETTING, E_OBJECT_TYPE_CUTTING_PATTERN, E_OBJECT_TYPE_DESIGN_SITUATION, E_OBJECT_TYPE_DESIGN_SUPPORT, E_OBJECT_TYPE_DIMENSION, E_OBJECT_TYPE_FREE_CIRCULAR_LOAD, E_OBJECT_TYPE_FREE_CONCENTRATED_LOAD,\ + E_OBJECT_TYPE_FREE_LINE_LOAD, E_OBJECT_TYPE_FREE_POLYGON_LOAD, E_OBJECT_TYPE_FREE_RECTANGULAR_LOAD, E_OBJECT_TYPE_IMPERFECTION_CASE, E_OBJECT_TYPE_IMPOSED_LINE_DEFORMATION, E_OBJECT_TYPE_IMPOSED_NODAL_DEFORMATION,\ + E_OBJECT_TYPE_INTERSECTION, E_OBJECT_TYPE_LINE, E_OBJECT_TYPE_LINE_GRID, E_OBJECT_TYPE_LINE_HINGE, E_OBJECT_TYPE_LINE_LOAD, E_OBJECT_TYPE_LINE_MESH_REFINEMENT, E_OBJECT_TYPE_LINE_SET, E_OBJECT_TYPE_LINE_SET_LOAD,\ + E_OBJECT_TYPE_LINE_SUPPORT, E_OBJECT_TYPE_LINE_WELDED_JOINT, E_OBJECT_TYPE_LOAD_CASE, E_OBJECT_TYPE_LOAD_COMBINATION, E_OBJECT_TYPE_MATERIAL, E_OBJECT_TYPE_MEMBER, E_OBJECT_TYPE_MEMBER_DEFINABLE_STIFFNESS,\ + E_OBJECT_TYPE_MEMBER_ECCENTRICITY, E_OBJECT_TYPE_MEMBER_HINGE, E_OBJECT_TYPE_MEMBER_IMPERFECTION, E_OBJECT_TYPE_MEMBER_LOAD, E_OBJECT_TYPE_MEMBER_NONLINEARITY, E_OBJECT_TYPE_MEMBER_REPRESENTATIVE,\ + E_OBJECT_TYPE_MEMBER_RESULT_INTERMEDIATE_POINT, E_OBJECT_TYPE_MEMBER_SET, E_OBJECT_TYPE_MEMBER_SET_IMPERFECTION, E_OBJECT_TYPE_MEMBER_SET_LOAD, E_OBJECT_TYPE_MEMBER_SET_REPRESENTATIVE, E_OBJECT_TYPE_MEMBER_STIFFNESS_MODIFICATION,\ + E_OBJECT_TYPE_MEMBER_SUPPORT, E_OBJECT_TYPE_MEMBER_TRANSVERSE_STIFFENER, E_OBJECT_TYPE_NODAL_LOAD, E_OBJECT_TYPE_NODAL_MESH_REFINEMENT, E_OBJECT_TYPE_NODAL_SUPPORT, E_OBJECT_TYPE_NODE, E_OBJECT_TYPE_NOTE, E_OBJECT_TYPE_OBJECT_SNAP,\ + E_OBJECT_TYPE_OPENING, E_OBJECT_TYPE_OPENING_LOAD, E_OBJECT_TYPE_RESULT_COMBINATION, E_OBJECT_TYPE_RESULT_SECTION, E_OBJECT_TYPE_RIGID_LINK, E_OBJECT_TYPE_SECTION, E_OBJECT_TYPE_SOIL_SAMPLE, E_OBJECT_TYPE_SOLID,\ + E_OBJECT_TYPE_SOLID_CONTACTS, E_OBJECT_TYPE_SOLID_GAS, E_OBJECT_TYPE_SOLID_LOAD, E_OBJECT_TYPE_SOLID_MESH_REFINEMENT, E_OBJECT_TYPE_SOLID_SET, E_OBJECT_TYPE_SOLID_SET_LOAD, E_OBJECT_TYPE_STATIC_ANALYSIS_SETTINGS,\ + E_OBJECT_TYPE_STRUCTURE_MODIFICATION, E_OBJECT_TYPE_SURFACE, E_OBJECT_TYPE_SURFACES_CONTACT, E_OBJECT_TYPE_SURFACES_CONTACT_TYPE, E_OBJECT_TYPE_SURFACE_ECCENTRICITY, E_OBJECT_TYPE_SURFACE_IMPERFECTION,\ + E_OBJECT_TYPE_SURFACE_LOAD, E_OBJECT_TYPE_SURFACE_MESH_REFINEMENT, E_OBJECT_TYPE_SURFACE_RESULTS_ADJUSTMENT, E_OBJECT_TYPE_SURFACE_SET, E_OBJECT_TYPE_SURFACE_SET_IMPERFECTION, E_OBJECT_TYPE_SURFACE_SET_LOAD,\ + E_OBJECT_TYPE_SURFACE_STIFFNESS_MODIFICATION, E_OBJECT_TYPE_SURFACE_SUPPORT, E_OBJECT_TYPE_THICKNESS, E_OBJECT_TYPE_VISUAL_OBJECT = range(86) + +class export_to_ifc_axis_rotation_sequence_type(Enum): + ''' + Export to IFC Axis Rotation Sequence Type + ''' + XYZ, XZY, YXZ, YZX, ZXY, ZYX = range(6) + +class export_to_ifc_axis_type(Enum): + ''' + Export to IFC Axis Type + ''' + X,Y,Z = range(3) + +class export_to_ifc_export_type(Enum): + ''' + Export to IFC Export Type + ''' + E_EXPORT_IFC4_REFERENCE_VIEW, E_EXPORT_IFC4_STRUCTURAL_ANALYSIS_VIEW = range(2) + +class MemberSectionDistributionType(Enum): + ''' + Member Section Distribution Type + ''' + SECTION_DISTRIBUTION_TYPE_LINEAR, SECTION_DISTRIBUTION_TYPE_OFFSET_AT_BOTH_SIDES, SECTION_DISTRIBUTION_TYPE_OFFSET_AT_END_OF_MEMBER, \ + SECTION_DISTRIBUTION_TYPE_OFFSET_AT_START_OF_MEMBER, SECTION_DISTRIBUTION_TYPE_SADDLE, SECTION_DISTRIBUTION_TYPE_TAPERED_AT_BOTH_SIDES, \ + SECTION_DISTRIBUTION_TYPE_TAPERED_AT_END_OF_MEMBER, SECTION_DISTRIBUTION_TYPE_TAPERED_AT_START_OF_MEMBER, SECTION_DISTRIBUTION_TYPE_UNIFORM = range(9) + +class MemberReferenceType(Enum): + ''' + Member Reference Type + ''' + REFERENCE_TYPE_L, REFERENCE_TYPE_XY, REFERENCE_TYPE_XZ, REFERENCE_TYPE_YZ = range(4) + +class MemberTypeRibAlignment(Enum): + ''' + Member Type Rib Alignment + ''' + ALIGNMENT_CENTRIC, ALIGNMENT_ON_Z_SIDE_NEGATIVE, ALIGNMENT_ON_Z_SIDE_POSITIVE, ALIGNMENT_USER_DEFINED_VIA_MEMBER_ECCENTRICITY = range(4) + +class MemberReferenceLengthType(Enum): + ''' + Member Reference Length Definition Type + ''' + REFERENCE_LENGTH_TYPE_MEMBER_LENGTH, REFERENCE_LENGTH_TYPE_SEGMENT_LENGTH, REFERENCE_LENGTH_TYPE_USER_DEFINED = range(3) + +class MemberReferenceLengthWidthType(Enum): + ''' + Member Reference Length Width Type + ''' + REFERENCE_LENGTH_WIDTH_EC2, REFERENCE_LENGTH_WIDTH_EIGHTH, REFERENCE_LENGTH_WIDTH_NONE, REFERENCE_LENGTH_WIDTH_SIXTH = range(4) + +class MemberResultBeamIntegration(Enum): + ''' + Member Result Beam Integrate Stresses and Forces + ''' + INTEGRATE_FROM_LISTED_OBJECT, INTEGRATE_WITHIN_CUBOID_GENERAL, INTEGRATE_WITHIN_CUBOID_QUADRATIC, INTEGRATE_WITHIN_CYLINDER = range(4) + +class MemberSectionAlignment(Enum): + ''' + Member Section Alignment + ''' + SECTION_ALIGNMENT_BOTTOM, SECTION_ALIGNMENT_CENTRIC, SECTION_ALIGNMENT_TOP = range(3) + +class MemberCurvedCantileversType(Enum): + ''' + Member Curved Member Cantilevers Type + ''' + CANTILEVERS_TYPE_HORIZONTAL, CANTILEVERS_TYPE_OFFSET, CANTILEVERS_TYPE_PARALLEL, CANTILEVERS_TYPE_TAPER = range(4) + +class MemberRotationSpecificationType(Enum): + '''' + Member Rotation Specification Type + ''' + COORDINATE_SYSTEM_ROTATION_VIA_ANGLE, COORDINATE_SYSTEM_ROTATION_VIA_HELP_NODE, COORDINATE_SYSTEM_ROTATION_VIA_INSIDE_NODE, COORDINATE_SYSTEM_ROTATION_VIA_SURFACE = range(4) + +class MemberRotationPlaneType(Enum): + ''' + Member Rotation Plane Type + ''' + ROTATION_PLANE_XY, ROTATION_PLANE_XZ = range(2) + +class StirrupType(Enum): + ''' + Stirrup Type + ''' + STIRRUP_TYPE_FOUR_LEGGED_CLOSED_HOOK_135, STIRRUP_TYPE_FOUR_LEGGED_CLOSED_HOOK_90, STIRRUP_TYPE_FOUR_LEGGED_OVERLAP_HOOK_180, \ + STIRRUP_TYPE_THREE_LEGGED_CLOSED_HOOK_135, STIRRUP_TYPE_THREE_LEGGED_CLOSED_HOOK_90, STIRRUP_TYPE_THREE_LEGGED_OVERLAP_HOOK_180, \ + STIRRUP_TYPE_TWO_LEGGED_CLOSED_HOOK_135, STIRRUP_TYPE_TWO_LEGGED_CLOSED_HOOK_90, STIRRUP_TYPE_TWO_LEGGED_OPEN, \ + STIRRUP_TYPE_TWO_LEGGED_OVERLAP_HOOK_180 = range(10) + +class SpanPositionReferenceType(Enum): + ''' + Span Position Reference Type + ''' + SHEAR_REINFORCEMENT_SPAN_INTERNAL_NODE, SHEAR_REINFORCEMENT_SPAN_REFERENCE_END, SHEAR_REINFORCEMENT_SPAN_REFERENCE_START = range(3) + +class SpanPositionDefinitionFormatType(Enum): + ''' + Span Position Definition Format Type + ''' + SHEAR_REINFORCEMENT_SPAN_DEFINITION_FORMAT_ABSOLUTE, SHEAR_REINFORCEMENT_SPAN_DEFINITION_FORMAT_RELATIVE = range(2) + +class StirrupLayoutRuleType(Enum): + ''' + Stirrup Layout Rule Type + ''' + SHEAR_REINFORCEMENT_STIRRUP_LAYOUT_RULE_END_DEFINED, SHEAR_REINFORCEMENT_STIRRUP_LAYOUT_RULE_END_EQUALS_REST_LENGTH_TO_STIRRUP_DISTANCED,\ + SHEAR_REINFORCEMENT_STIRRUP_LAYOUT_RULE_START_DEFINED, SHEAR_REINFORCEMENT_STIRRUP_LAYOUT_RULE_START_EQUALS_END, \ + SHEAR_REINFORCEMENT_STIRRUP_LAYOUT_RULE_START_EQUALS_REST_LENGTH_TO_STIRRUP_DISTANCED = range(5) + +class RebarType(Enum): + ''' + Rebar Type + ''' + REBAR_TYPE_LINE, REBAR_TYPE_SINGLE, REBAR_TYPE_SYMMETRICAL, REBAR_TYPE_UNIFORMLY_SURROUNDING, REBAR_TYPE_UNSYMMETRICAL = range(5) + +class AdditionalOffsetType(Enum): + ''' + Additional Offset Type + ''' + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_CONCRETE_COVER, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_SECTION_SURFACE, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_STIRRUP, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_NONE = range(4) + +class AdditionalOffsetSingleLineType(Enum): + ''' + Additional Offset Single Line Type + ''' + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_CONCRETE_COVER, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_SECTION_SURFACE, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_FROM_STIRRUP, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_TYPE_NONE = range(4) + +class AdditionalOffsetReferenceType(Enum): + ''' + Additional Offset Reference Type + ''' + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_TOP, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_BOTTOM, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_CENTER, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_TOP, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_TOP = range(9) + +class AdditionalOffsetReferenceStartType(Enum): + ''' + Additional Offset Reference Type at Start Type + ''' + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_TOP, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_BOTTOM, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_CENTER, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_TOP, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_TOP = range(9) + +class AdditionalOffsetReferenceEndType(Enum): + ''' + Additional Offset Reference Type at End Type + ''' + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_CENTER_TOP, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_BOTTOM, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_CENTER, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_LEFT_TOP, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_BOTTOM, LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_CENTER, \ + LONGITUDINAL_REINFORCEMENT_ADDITIONAL_OFFSET_REFERENCE_TYPE_RIGHT_TOP = range(9) + +class AnchorageStartAnchorType(Enum): + ''' + Anchorage Start Anchor Type + ''' + ANCHORAGE_TYPE_BEND, ANCHORAGE_TYPE_HOOK, ANCHORAGE_TYPE_HOOK_WITH_TRANSVERSE_BAR, ANCHORAGE_TYPE_NONE,\ + ANCHORAGE_TYPE_STRAIGHT, ANCHORAGE_TYPE_STRAIGHT_WITH_TRANSVERSE_BAR, ANCHORAGE_TYPE_STRAIGHT_WITH_TWO_TRANSVERSE_BARS = range(7) + +class AnchorageEndAnchorType(Enum): + ''' + Anchorage End Anchor Type + ''' + ANCHORAGE_TYPE_BEND, ANCHORAGE_TYPE_HOOK, ANCHORAGE_TYPE_HOOK_WITH_TRANSVERSE_BAR, ANCHORAGE_TYPE_NONE,\ + ANCHORAGE_TYPE_STRAIGHT, ANCHORAGE_TYPE_STRAIGHT_WITH_TRANSVERSE_BAR, ANCHORAGE_TYPE_STRAIGHT_WITH_TWO_TRANSVERSE_BARS = range(7) + +class SelectedObjectInformation(Enum): + ''' + Information About Members | Enum + ''' + LENGTH, VOLUME, MASS, AREA = range(4) +class GlobalAxesOrientationType(Enum): + ''' + Model Settings and Options Global Axes Orientation Type + ''' + E_GLOBAL_AXES_ORIENTATION_ZDOWN, E_GLOBAL_AXES_ORIENTATION_ZUP = range(2) + +class LocalAxesOrientationType(Enum): + ''' + Model Settings and Local Axes Orientation Type + ''' + E_LOCAL_AXES_ORIENTATION_YUPX, E_LOCAL_AXES_ORIENTATION_YUPZ, E_LOCAL_AXES_ORIENTATION_ZDOWN, E_LOCAL_AXES_ORIENTATION_ZUP = range(4) + +class ModelType(Enum): + ''' + Model Type | Enum + ''' + E_MODEL_TYPE_1D_X_3D, E_MODEL_TYPE_1D_X_AXIAL, E_MODEL_TYPE_2D_XY_3D, \ + E_MODEL_TYPE_2D_XY_PLATE, E_MODEL_TYPE_2D_XZ_3D, E_MODEL_TYPE_2D_XZ_PLANE_STRAIN, \ + E_MODEL_TYPE_2D_XZ_PLANE_STRESS, E_MODEL_TYPE_3D = range(8) +class ModalSolutionMethod(Enum): + ''' + Modal Analysis Settings Solution Method + ''' + METHOD_ICG_ITERATION, METHOD_LANCZOS, METHOD_ROOT_OF_CHARACTERISTIC_POLYNOMIAL, METHOD_SUBSPACE_ITERATION, SOLUTION_METHOD_SHIFTED_INVERSE_POWER_METHOD = range(5) + +class ModalMassConversionType(Enum): + ''' + Modal Analysis Settings Mass Conversion Type + ''' + MASS_CONVERSION_TYPE_FULL_LOADS_AS_MASS, MASS_CONVERSION_TYPE_Z_COMPONENTS_OF_LOADS, MASS_CONVERSION_TYPE_Z_COMPONENTS_OF_LOADS_IN_DIRECTION_OF_GRAVITY = range(3) + +class ModalMassMatrixType(Enum): + ''' + Modal Analysis Settings Mass Matrix Type + ''' + MASS_MATRIX_TYPE_CONSISTENT, MASS_MATRIX_TYPE_DIAGONAL, MASS_MATRIX_TYPE_DIAGONAL_WITH_TORSIONAL_ELEMENTS, MASS_MATRIX_TYPE_UNIT = range(4) + +class ModalModeNumberMethod(Enum): + ''' + Modal Analysis Settings Number of Modes Method + ''' + NUMBER_OF_MODES_METHOD_EFFECTIVE_MASS_FACTORS, NUMBER_OF_MODES_METHOD_MAXIMUM_FREQUENCY, NUMBER_OF_MODES_METHOD_USER_DEFINED = range(3) + +class ModalNeglectMasses(Enum): + ''' + Modal Analysis Settings Neglect Masses + ''' + E_NEGLECT_MASSES_IN_ALL_FIXED_SUPPORTS, E_NEGLECT_MASSES_NO_NEGLECTION, E_NEGLECT_MASSES_USER_DEFINED = range(3) +class PeriodicResponseCombinationRule(Enum): + ''' + Spectral Analysis Settings Combination Rule For Periodic Responses + ''' + ABSOLUTE_SUM, CQC, SRSS = range(3) + +class DirectionalComponentCombinationRule(Enum): + ''' + Spectral Analysis Settings Combination Rule For Directional Components + ''' + ABSOLUTE_SUM, SCALED_SUM, SRSS = range(3) + +class CqsDampingRule(Enum): + ''' + Spectal Analysis Settings Damping for CQC Rule + ''' + CONSTANT_FOR_EACH_MODE, DIFFERENT_FOR_EACH_MODE = range(2) + +class DurabilityCorrosionCarbonation(Enum): + ''' + Concrete Durability Corrosion Induced by Carbonation + ''' + CORROSION_INDUCED_BY_CARBONATION_TYPE_CYCLIC_WET_AND_DRY, CORROSION_INDUCED_BY_CARBONATION_TYPE_DRY_OR_PERMANENTLY_WET,\ + CORROSION_INDUCED_BY_CARBONATION_TYPE_MODERATE_HUMIDITY, CORROSION_INDUCED_BY_CARBONATION_TYPE_WET_RARELY_DRY = range(4) + +class DurabilityCorrosionChlorides(Enum): + ''' + Concrete Durability Corrosion Induced by Chlorides + ''' + CORROSION_INDUCED_BY_CHLORIDES_TYPE_CYCLIC_WET_AND_DRY, CORROSION_INDUCED_BY_CHLORIDES_TYPE_MODERATE_HUMIDITY, CORROSION_INDUCED_BY_CHLORIDES_TYPE_WET_RARELY_DRY = range(3) + +class DurabilityCorrosionSeaWater(Enum): + ''' + Concrete Durability Corrosion Induced by Chlorised From Sea Water + ''' + CORROSION_INDUCED_BY_CHLORIDES_FROM_SEA_WATER_TYPE_AIRBORNE_SALT, CORROSION_INDUCED_BY_CHLORIDES_FROM_SEA_WATER_TYPE_PERMANENTLY_SUBMERGED,\ + CORROSION_INDUCED_BY_CHLORIDES_FROM_SEA_WATER_TYPE_SPLASH_AND_SPRAY_ZONES = range(3) + +class DurabilityFreezeThawAttack(Enum): + ''' + Concrete Durability Freeze Thaw Attack + ''' + FREEZE_THAW_ATTACK_TYPE_HIGH_SATURATION_DEICING, FREEZE_THAW_ATTACK_TYPE_HIGH_SATURATION_NO_DEICING,\ + FREEZE_THAW_ATTACK_TYPE_MODERATE_SATURATION_DEICING, FREEZE_THAW_ATTACK_TYPE_MODERATE_SATURATION_NO_DEICING = range(4) + +class DurabilityChemicalAttack(Enum): + ''' + Concrete Durability Chemical Attack + ''' + CHEMICAL_ATTACK_TYPE_HIGHLY_AGGRESSIVE, CHEMICAL_ATTACK_TYPE_MODERATELY_AGGRESSIVE, CHEMICAL_ATTACK_TYPE_SLIGHTLY_AGGRESSIVE = range(3) + +class DurabilityCorrosionWear(Enum): + ''' + Concrete Durability Concrete Corrosion Induced by the Wear + ''' + CONCRETE_CORROSION_INDUCED_BY_WEAR_TYPE_HIGH, CONCRETE_CORROSION_INDUCED_BY_WEAR_TYPE_MODERATE, CONCRETE_CORROSION_INDUCED_BY_WEAR_TYPE_VERY_HIGH = range(3) + +class DurabilityStructuralClassType(Enum): + ''' + Concrete Durability Structural Class Type + ''' + DEFINED, STANDARD = range(2) + +class DurabilityStructuralClass(Enum): + ''' + Concrete Durability User Defined Structural Class + ''' + S1, S2, S3, S4, S5, S6 = range(6) + +class DurabilityMaxWaterToCementRatio(Enum): + ''' + Concrete Durability Maximum Equivalent Water To Cement Ratio + ''' + ZERO_POINT_FIVE, ZERO_POINT_FIVE_FIVE, ZERO_POINT_FOUR, ZERO_POINT_FOUR_FIVE, ZERO_POINT_NINE, ZERO_POINT_SIX, ZERO_POINT_THREE_FIVE = range(7) + +class DurabilityConcreteCoverType(Enum): + ''' + Concrete Durability Increase of Minimum Concrete Cover Type + ''' + DEFINED, STANDARD = range(2) + +class DurabilityStainlessSteelType(Enum): + ''' + Concrete Durability Additional Protection Type + ''' + DEFINED, STANDARD = range(2) + +class DurabilityAdditionalProtectionType(Enum): + ''' + Concrete Durability Additional Protection Type + ''' + DEFINED, STANDARD = range(2) + +class DurabilityAllowanceDeviationType(Enum): + ''' + Concrete Durability Allowance of Deviation Type + ''' + DEFINED, STANDARD = range(2) + +class DurabilityConcreteCast(Enum): + ''' + Concrete Durability Concrete Cast + ''' + AGAINST_PREPARED_GROUND, DIRECTLY_AGAINST_SOIL = range(2) + +class ConcreteEffectiveLengthsAxisZ(Enum): + ''' + Concrete Effective Lengths Structure Type About Axis Z + ''' + STRUCTURE_TYPE_BRACED, STRUCTURE_TYPE_UNBRACED = range(2) + +class ConcreteEffectiveLengthAxisY(Enum): + ''' + Concrete Effective Lengths Structure Type About Axis Y + ''' + STRUCTURE_TYPE_BRACED, STRUCTURE_TYPE_UNBRACED = range(2) + +class EffectiveLengthSupportType(Enum): + ''' + Effective Length Nodal Support Type + ''' + SUPPORT_TYPE_FIXED_ALL, SUPPORT_TYPE_FIXED_IN_Y, SUPPORT_TYPE_FIXED_IN_Z, SUPPORT_TYPE_FIXED_IN_Z_AND_TORSION,\ + SUPPORT_TYPE_FIXED_IN_Z_AND_TORSION_AND_WARPING, SUPPORT_TYPE_FIXED_IN_Z_Y_AND_TORSION, SUPPORT_TYPE_FIXED_IN_Z_Y_AND_TORSION_AND_WARPING,\ + SUPPORT_TYPE_INDIVIDUALLY, SUPPORT_TYPE_NONE, SUPPORT_TYPE_RESTRAINT_ABOUT_X = range(10) + +class EffectiveLengthEccentricityType(Enum): + ''' + Effective Length Eccentricity Type + ''' + ECCENTRICITY_TYPE_AT_LOWER_FLANGE, ECCENTRICITY_TYPE_AT_UPPER_FLANGE, ECCENTRICITY_TYPE_NONE, ECCENTRICITY_TYPE_USER_VALUE = range(4) + +class SupportStatus(Enum): + ''' + Support Status + ''' + SUPPORT_STATUS_NO, SUPPORT_STATUS_SPRING, SUPPORT_STATUS_YES = range(3) + +class RestraintTypeAboutX(Enum): + ''' + Restraint About X Type + ''' + SUPPORT_STATUS_NO, SUPPORT_STATUS_SPRING, SUPPORT_STATUS_YES = range(3) + +class RestraintTypeAboutZ(Enum): + ''' + Restraint About X Type + ''' + SUPPORT_STATUS_NO, SUPPORT_STATUS_SPRING, SUPPORT_STATUS_YES = range(3) + +class RestraintTypeWarping(Enum): + ''' + Restraint About Warping + ''' + SUPPORT_STATUS_NO, SUPPORT_STATUS_SPRING, SUPPORT_STATUS_YES = range(3) + +class ReinforcementDirectionType(Enum): + ''' + Reinforcement Direction Type + ''' + REINFORCEMENT_DIRECTION_TYPE_FIRST_REINFORCEMENT_IN_X, REINFORCEMENT_DIRECTION_TYPE_FIRST_REINFORCEMENT_IN_Y, REINFORCEMENT_DIRECTION_TYPE_ROTATED = range(3) + +class SurfaceReinforcementLocationType(Enum): + ''' + Surface Reinforcement Location Type + ''' + LOCATION_TYPE_FREE_CIRCULAR, LOCATION_TYPE_FREE_POLYGON, LOCATION_TYPE_FREE_RECTANGULAR, LOCATION_TYPE_ON_SURFACE = range(4) + +class SurfaceReinforcementType(Enum): + ''' + Surface Reinforcement Type + ''' + REINFORCEMENT_TYPE_MESH, REINFORCEMENT_TYPE_REBARS, REINFORCEMENT_TYPE_STIRRUPS = range(3) + +class SurfaceReinforcementDirectionType(Enum): + ''' + Surface Reinforcement Direction Type + ''' + REINFORCEMENT_DIRECTION_TYPE_IN_DESIGN_REINFORCEMENT_DIRECTION, REINFORCEMENT_DIRECTION_TYPE_PARALLEL_TO_TWO_POINTS = range(2) + +class SurfaceReinforcementDesignDirection(Enum): + ''' + Surface Design Reinforcement Direction + ''' + DESIGN_REINFORCEMENT_DIRECTION_A_S_1, DESIGN_REINFORCEMENT_DIRECTION_A_S_2 = range(2) + +class SurfaceReinforcementProjectionPlane(Enum): + ''' + Surface Reinforcement Projection Plane + ''' + + PROJECTION_PLANE_XY_OR_UV, PROJECTION_PLANE_XZ_OR_UW, PROJECTION_PLANE_YZ_OR_VW = range(3) + +class SurfaceReinforcementLocationRectangleType(Enum): + ''' + Surface Reinforcement Location Type + ''' + RECTANGLE_TYPE_CENTER_AND_SIDES, RECTANGLE_TYPE_CORNER_POINTS = range(2) + +class AmplitudeFunctionType(Enum): + ''' + Amplitude Function Type + ''' + CONSTANT, LINEAR, QUADRATIC = range(3) + +class PlausibilityCheckResult(Enum): + ''' + Plausibility Check Result + ''' + CHECK_IS_OK, CHECK_FAILED = range(2) + +class ModelCheckGetOptionType(Enum): + ''' + Model Check Get Object Groups Option Type + ''' + CROSSING_LINES, CROSSING_MEMBERS, IDENTICAL_NODES, OVERLAPPING_LINES, OVERLAPPING_MEMBERS = range(5) + +class ModelCheckProcessOptionType(Enum): + ''' + Model Check Process Object Groups Option Type + ''' + CROSS_LINES, CROSS_MEMBERS, DELETE_UNUSED_NODES, UNITE_NODES_AND_DELETE_UNUSED_NODES = range(4) diff --git a/docs/RFEM/globalParameter.py b/docs/RFEM/globalParameter.py new file mode 100644 index 00000000..6a12f26c --- /dev/null +++ b/docs/RFEM/globalParameter.py @@ -0,0 +1,79 @@ +from RFEM.initModel import Model, clearAtributes +from RFEM.enums import GlobalParameterUnitGroup, GlobalParameterDefinitionType + +class GlobalParameter(): + + def AddParameter(self, + no: int = 1, + name: str = '', + symbol: str = '', + unit_group = GlobalParameterUnitGroup.LENGTH, + definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_VALUE, + definition_parameter = [], + comment: str = '', + params: dict = {}): + ''' + for definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_FORMULA: + definition_parameter = [formula] + + for definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_OPTIMIZATION: + definition_parameter = [min, max, increment, steps] + + for definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_OPTIMIZATION_ASCENDING: + definition_parameter = [min, max, increment, steps] + + for definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_OPTIMIZATION_DESCENDING: + definition_parameter = [value, min, max, steps] + + for definition_type = GlobalParameterDefinitionType.DEFINITION_TYPE_VALUE: + definition_parameter = [value] + ''' + + # Client model | Global Parameter + clientObject = Model.clientModel.factory.create('ns0:global_parameter') + + # Clears object attributes | Sets all attributes to None + clearAtributes(clientObject) + + # Global Parameter No. + clientObject.no = no + + # Global Parameter Name + clientObject.name = name + + # Symbol (HTML) + clientObject.symbol = symbol + + # Unit Group + clientObject.unit_group = unit_group.name + + # Definition Type + clientObject.definition_type = definition_type.name + + if definition_type.name == 'DEFINITION_TYPE_FORMULA': + if len(definition_parameter) != 1: + raise Exception('WARNING: The definition parameter needs to be of length 1. Kindly check list inputs for completeness and correctness.') + clientObject.formula = definition_parameter[0] + + elif definition_type.name == 'DEFINITION_TYPE_OPTIMIZATION' or definition_type.name == 'DEFINITION_TYPE_OPTIMIZATION_ASCENDING' or definition_type.name == 'DEFINITION_TYPE_OPTIMIZATION_DESCENDING': + if len(definition_parameter) != 4: + raise Exception('WARNING: The definition parameter needs to be of length 4. Kindly check list inputs for completeness and correctness.') + clientObject.value = definition_parameter[0] + clientObject.min = definition_parameter[1] + clientObject.max = definition_parameter[2] + clientObject.steps = definition_parameter[3] + + elif definition_type.name == 'DEFINITION_TYPE_VALUE': + if len(definition_parameter) != 1: + raise Exception('WARNING: The definition parameter needs to be of length 1. Kindly check list inputs for completeness and correctness.') + clientObject.value = definition_parameter[0] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Global Parameter to client model + Model.clientModel.service.set_global_parameter(clientObject) diff --git a/docs/RFEM/initModel.py b/docs/RFEM/initModel.py new file mode 100644 index 00000000..8a588ce8 --- /dev/null +++ b/docs/RFEM/initModel.py @@ -0,0 +1,472 @@ +import sys +import csv +from RFEM.enums import ObjectTypes, ModelType + +# Import SUDS module +try: + sys.version_info[0] == 3 +except: + print('Must be using Python 3!') + input('Press Enter to exit...') + sys.exit() + +try: + from suds.client import Client +except: + print('SUDS library is not installed in your Python env.') + instSUDS = input('Do you want to install it (y/n)? ') + instSUDS = instSUDS.lower() + if instSUDS == 'y': + # Subprocess will be opened in cmd and closed automaticaly after installation. + # Prevents invoking pip by an old script wrapper (https://github.com/pypa/pip/issues/5599) + import subprocess + try: + subprocess.call('python -m pip install --upgrade pip') + subprocess.call('python -m pip install suds-py3 --user') + from suds.client import Client + except: + print('WARNING: Installation of SUDS library failed!') + print('Please use command "pip install suds-py3 --user" in your Command Prompt.') + input('Press Enter to exit...') + sys.exit() + else: + input('Press Enter to exit...') + sys.exit() + +try: + import requests +except: + print('requests library is not installed in your Python env.') + instSUDS = input('Do you want to install it (y/n)? ') + instSUDS = instSUDS.lower() + if instSUDS == 'y': + # Subprocess will be opened in cmd and closed automaticaly after installation. + # Prevents invoking pip by an old script wrapper (https://github.com/pypa/pip/issues/5599) + import subprocess + try: + subprocess.call('python -m pip install requests --user') + import requests + except: + print('WARNING: Installation of requests library failed!') + print('Please use command "pip install requests --user" in your Command Prompt.') + input('Press Enter to exit...') + sys.exit() + else: + input('Press Enter to exit...') + sys.exit() + +try: + import suds_requests +except: + print('suds_requests library is not installed in your Python env.') + instSUDS = input('Do you want to install it (y/n)? ') + instSUDS = instSUDS.lower() + if instSUDS == 'y': + # Subprocess will be opened in cmd and closed automaticaly after installation. + # Prevents invoking pip by an old script wrapper (https://github.com/pypa/pip/issues/5599) + import subprocess + try: + subprocess.call('python -m pip install suds_requests --user') + import suds_requests + except: + print('WARNING: Installation of suds_requests library failed!') + print('Please use command "pip install suds_requests --user" in your Command Prompt.') + input('Press Enter to exit...') + sys.exit() + else: + input('Press Enter to exit...') + sys.exit() + +try: + import xmltodict +except: + print('xmltodict library is not installed in your Python env.') + instXML = input('Do you want to install it (y/n)? ') + instXML = instXML.lower() + if instXML == 'y': + # Subprocess will be opened in cmd and closed automaticaly after installation. + # Prevents invoking pip by an old script wrapper (https://github.com/pypa/pip/issues/5599) + import subprocess + try: + subprocess.call('python -m pip install xmltodict --user') + import xmltodict + except: + print('WARNING: Installation of xmltodict library failed!') + print('Please use command "pip install xmltodict --user" in your Command Prompt.') + input('Press Enter to exit...') + sys.exit() + else: + input('Press Enter to exit...') + sys.exit() + +# Connect to server +# Check server port range set in "Program Options & Settings" +# By default range is set between 8081 ... 8089 +print('Connecting to server...') +try: + client = Client('http://localhost:8081/wsdl') +except: + print('Error: Connection to server failed!') + print('Please check:') + print('- If you have started RFEM application') + print('- If all RFEM dialogs are closed') + print('- If server port range is set correctly') + print('- Check Program Options & Settings > Web Services') + sys.exit() + +try: + modelLst = client.service.get_model_list() +except: + print('Error: Please check if all RFEM dialogs are closed.') + input('Press Enter to exit...') + sys.exit() + +# Persistent connection +# Without next 4 lines the connection lasts only 1 request, +# the message: 'Application is locked by external connection' +# is blinking whole time and the execution is unnecessarily long. +# This solution works with unit-tests. +session = requests.Session() +adapter = requests.adapters.HTTPAdapter(pool_connections=1, pool_maxsize=1) +session.mount('http://', adapter) +trans = suds_requests.RequestsTransport(session) + +class Model(): + clientModel = None + def __init__(self, + new_model: bool=True, + model_name: str="MyModel", + delete: bool=False, + delete_all: bool=False): + + cModel = None + modelLs = client.service.get_model_list() + + if new_model: + if modelLs and model_name in modelLs.name: + new = client.service.open_model(model_name) + 'wsdl' + cModel = Client(new, transport=trans) + cModel.service.delete_all_results() + cModel.service.delete_all() + else: + new = client.service.new_model(model_name) + 'wsdl' + cModel = Client(new, transport=trans) + else: + modelIndex = 0 + for i,j in enumerate(modelLs): + if modelLs[i] == model_name: + modelIndex = i + new = client.service.get_model(modelIndex) + 'wsdl' + cModel = Client(new, transport=trans) + if delete: + print('Deleting results...') + cModel.service.delete_all_results() + if delete_all: + print('Delete all...') + cModel.service.delete_all() + + Model.clientModel = cModel + +def clearAtributes(obj): + ''' + Clears object atributes. + Sets all atributes to None. + + Params: + obj: object to clear + ''' + + # iterator + it = iter(obj) + for i in it: + obj[i[0]] = None + return obj + +def insertSpaces(lst: list): + ''' + Add spaces between list of numbers. + Returns list of values. + ''' + strLst = '' + for i in lst: + strLst += str(i) + ' ' + # remove trailing space + return strLst[:-1] + +def Calculate_all(generateXmlSolverInput: bool = False): + ''' + Calculates model. + CAUTION: Don't use it in unit tests! + It works when executing tests individualy but when running all of them + it causes RFEM to stuck and generates failures, which are hard to investigate. + + Params: + - generateXmlSolverInput: generate XML solver input + ''' + Model.clientModel.service.calculate_all(generateXmlSolverInput) + +def ConvertToDlString(s): + ''' + The function converts strings commonly used in RSTAB / RFEM so that they + can be used In WebServices. It solved issue #4. + Examples: + '1,3' -> '1 3' + '1, 3' -> '1 3' + '1-3' -> '1 2 3' + '1,3,5-9' -> '1 3 5 6 7 8 9' + + Params: + RSTAB / RFEM common string + + Returns a WS conform string. + ''' + + # Parameter is not of required type. + assert isinstance(s, (list, str)) + + if isinstance(s, list): + return ' '.join(map(str, s)) + + s = s.strip() + s = s.replace(',', ' ') + s = s.replace(' ', ' ') + lst = s.split(' ') + new_lst = [] + for element in lst: + if '-' in element: + inLst = element.split('-') + start = int(inLst[0]) + end = int(inLst[1]) + inLst = [] + for i in range(start, end + 1): + inLst.append(str(i)) + + inS = ' '.join(inLst) + new_lst.append(inS) + else: + new_lst.append(element) + + s = ' '.join(new_lst) + return s + +def ConvertStrToListOfInt(st): + """ + This function coverts string to list of integers. + """ + st = ConvertToDlString(st) + lstInt = [] + while st: + intNumber = 0 + if ' ' in st: + idx = st.index(' ') + intNumber = int(st[:idx]) + st = st[idx+1:] + else: + intNumber = int(st) + st = '' + lstInt.append(intNumber) + return lstInt + +def CheckIfMethodOrTypeExists(modelClient, method_or_type, unitTestMode=False): + """ + Check if SOAP method or type is present in your version of RFEM/RSTAB. + Use it only in your examples. + Unit tests except msg from SUDS where this is checked already. + + Args: + modelClient (Model.clientModel) + method_or_type (string): method or type of SOAP client + + Returns: + bool: Status of method or type. + + Note: + To get list of methods invoke: + list_of_methods = [method for method in Model.clientModel.wsdl.services[0].ports[0]] + """ + assert modelClient is not None, "WARNING: modelClient is not initialized." + + if method_or_type not in str(modelClient): + if unitTestMode: + return True + else: + assert False, "WARNING: Used method/type: %s is not implemented in Web Services yet." % (method_or_type) + + return not unitTestMode + + +def CheckAddonStatus(modelClient, addOn = "stress_analysis_active"): + """ + Check if Add-on is reachable and active. + For some types of objects, specific Add-ons need to be ennabled. + + Args: + modelClient (Model.clientModel) + method_or_type (string): method or type of SOAP client + + Returns: + (bool): Status of Add-on + """ + if modelClient is None: + print("WARNING: modelClient is not initialized.") + return False + + addons = modelClient.service.get_addon_statuses() + dct = {} + for lstType in addons: + if not isinstance(lstType[1], bool) and len(lstType[1]) > 1: + addon = [lst for lst in lstType[1]] + for item in addon: + dct[str(item[0])] = bool(item[1]) + elif isinstance(lstType[1], bool): + dct[str(lstType[0])] = bool(lstType[1]) + else: + assert False + + # sanity check + assert addOn in dct, "WARNING: %s Add-on can not be reached." % (addOn) + + return dct[addOn] + +def SetAddonStatus(modelClient, addOn = "stress_analysis_active", status = True): + """ + Activate or deactivate Add-on. + For some types of objects, specific Add-ons need to be ennabled. + + Args: + modelClient (Model.clientModel) + method_or_type (string): method or type of SOAP client + status (bool): in/active + """ + + # this will also provide sanity check + currentStatus = CheckAddonStatus(modelClient, addOn) + if currentStatus != status: + addonLst = modelClient.service.get_addon_statuses() + if addOn in addonLst['__keylist__']: + addonLst[addOn] = status + else: + for listType in addonLst['__keylist__']: + if not isinstance(addonLst[listType], bool) and addOn in addonLst[listType]: + addonLst[listType][addOn] = status + + modelClient.service.set_addon_statuses(addonLst) + +def CalculateSelectedCases(loadCases: list = None, designSituations: list = None, loadCombinations: list = None): + ''' + This method calculate just selected objects - load cases, desingSituations, loadCombinations + Args: + loadCases (list, optional): [description]. Defaults to None. + designSituations (list, optional): [description]. Defaults to None. + loadCombinations (list, optional): [description]. Defaults to None. + ''' + specificObjectsToCalculate = Model.clientModel.factory.create('ns0:array_of_calculate_specific_objects_elements') + if loadCases is not None: + for loadCase in loadCases: + specificObjectsToCalculateLC = Model.clientModel.factory.create('ns0:array_of_calculate_specific_objects_elements.element') + specificObjectsToCalculateLC.no = loadCase + specificObjectsToCalculateLC.parent_no = 0 + specificObjectsToCalculateLC.type = ObjectTypes.E_OBJECT_TYPE_LOAD_CASE.name + specificObjectsToCalculate.element.append(specificObjectsToCalculateLC) + + if designSituations is not None: + for designSituation in designSituations: + specificObjectsToCalculateDS = Model.clientModel.factory.create('ns0:array_of_calculate_specific_objects_elements.element') + specificObjectsToCalculateDS.no = designSituation + specificObjectsToCalculateDS.parent_no = 0 + specificObjectsToCalculateDS.type = ObjectTypes.E_OBJECT_TYPE_DESIGN_SITUATION.name + specificObjectsToCalculate.element.append(specificObjectsToCalculateDS) + + if loadCombinations is not None: + for loadCombination in loadCombinations: + specificObjectsToCalculateLC = Model.clientModel.factory.create('ns0:array_of_calculate_specific_objects_elements.element') + specificObjectsToCalculateLC.no = loadCombination + specificObjectsToCalculateLC.parent_no = 0 + specificObjectsToCalculateLC.type = ObjectTypes.E_OBJECT_TYPE_LOAD_CASE.name + specificObjectsToCalculate.element.append(specificObjectsToCalculateLC) + + Model.clientModel.service.calculate_specific_objects(specificObjectsToCalculate) + +def ExportResultTablesToCsv(TargetDirectoryPath: str): + + Model.clientModel.service.export_result_tables_to_csv(TargetDirectoryPath) + +def ExportResultTablesToXML(TargetFilePath: str): + + Model.clientModel.service.export_result_tables_to_xml(TargetFilePath) + +def ExportResultTablesWithDetailedMembersResultsToCsv(TargetDirectoryPath: str): + + Model.clientModel.service.export_result_tables_with_detailed_members_results_to_csv(TargetDirectoryPath) + +def ExportResultTablesWithDetailedMembersResultsToXML(TargetFilePath: str): + + Model.clientModel.service.export_result_tables_with_detailed_members_results_to_xml(TargetFilePath) + +def __parseXMLAsDictionary(path: str =""): + with open(path, "rb") as f: + my_dictionary = xmltodict.parse(f, xml_attribs=True) + return my_dictionary + +def __parseCSVAsDictionary(path: str =""): + with open(path, mode='r') as f: + reader = csv.DictReader(f,delimiter=';') + my_dictionary = [] + for line in reader: + my_dictionary.append(line) + return my_dictionary + +def ParseCSVResultsFromSelectedFileToDict(filePath: str): + + return __parseCSVAsDictionary(filePath) + +def ParseXMLResultsFromSelectedFileToDict(filePath: str): + + return __parseXMLAsDictionary(filePath) + +def GenerateMesh(): + + Model.clientModel.service.generate_mesh() + +def GetMeshStatistics(): + + mesh_stats = Model.clientModel.service.get_mesh_statistics() + return Model.clientModel.dict(mesh_stats) + +def FirstFreeIdNumber(memType = ObjectTypes.E_OBJECT_TYPE_MEMBER, parent_no: int = 0): + ''' + This method returns the next available Id Number for the selected object type + Args: + type (enum): Object Type + parent_no (int): Object Parent Number + Note: + (1) A geometric object has, in general, a parent_no = 0 + (2) The parent_no parameter becomes significant for example with loads + ''' + return Model.clientModel.service.get_first_free_number(memType.name, parent_no) + +def SetModelType(model_type = ModelType.E_MODEL_TYPE_3D): + ''' + This method sets the model type. The model type is E_MODEL_TYPE_3D by default. + + Args: + model_type (enum): The available model types are listed below. + ModelType.E_MODEL_TYPE_1D_X_3D + ModelType.E_MODEL_TYPE_1D_X_AXIAL + ModelType.E_MODEL_TYPE_2D_XY_3D + ModelType.E_MODEL_TYPE_2D_XY_PLATE + ModelType.E_MODEL_TYPE_2D_XZ_3D + ModelType.E_MODEL_TYPE_2D_XZ_PLANE_STRAIN + ModelType.E_MODEL_TYPE_2D_XZ_PLANE_STRESS + ModelType.E_MODEL_TYPE_3D + ''' + + Model.clientModel.service.set_model_type(model_type.name) + +def GetModelType(): + + ''' + The method returns a string of the current model type. + ''' + + return Model.clientModel.service.get_model_type() diff --git a/docs/RFEM/window.py b/docs/RFEM/window.py new file mode 100644 index 00000000..9c801b95 --- /dev/null +++ b/docs/RFEM/window.py @@ -0,0 +1,163 @@ +from tkinter import Tk +from tkinter import ttk, Entry, Label, Button, Radiobutton, Checkbutton, CENTER, VERTICAL, INSERT, NORMAL, DISABLED, LEFT, W, IntVar, StringVar + +def window(mainFunc, lstOfModels): + color = '#F2F3F4' + # Creating tkinter window + win = Tk() + win.resizable(False, False) + win.title('Power of automation with RFEM6') + win.geometry("550x280") + + win.configure(bg=color) + win.grid_columnconfigure(index=0, minsize=140) + win.grid_columnconfigure(index=1, minsize=80) + win.grid_columnconfigure(index=2, minsize=80) + win.grid_columnconfigure(index=3, minsize=70) + win.grid_columnconfigure(index=4, minsize=120) + + # Separators + y = 3 + rh = 120 #0.76 + ttk.Separator(win, orient=VERTICAL).place(x=140, y=y, height=rh) + ttk.Separator(win, orient=VERTICAL).place(x=260, y=y, height=rh) + ttk.Separator(win, orient=VERTICAL).place(x=350, y=y, height=rh) + ttk.Separator(win, orient=VERTICAL).place(x=430, y=y, height=rh) + + Label(text="Params Type", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=0, column=0) + Label(text="Data Type", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=0, column=1) + Label(text="Symbol", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=0, column=2) + Label(text="Units", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=0, column=3) + Label(text="Magnitude", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=0, column=4) + + Label(text="hall width", bg=color).grid(row=1, column=0) + Label(text="hall height", bg=color).grid(row=2, column=0) + Label(text="hall height", bg=color).grid(row=3, column=0) + Label(text="frame spacing", bg=color).grid(row=4, column=0) + Label(text="number of frames", bg=color).grid(row=5, column=0) + Label(text="Options", justify=CENTER, font="Segoe 9 bold", bg=color).grid(row=6, column=0) + + Label(text="float", bg=color).grid(row=1, column=1) + Label(text="float", bg=color).grid(row=2, column=1) + Label(text="float", bg=color).grid(row=3, column=1) + Label(text="float", bg=color).grid(row=4, column=1) + Label(text="integer", bg=color).grid(row=5, column=1) + + Label(text="L", bg=color).grid(row=1, column=2) + Label(text="h_o", bg=color).grid(row=2, column=2) + Label(text="h_m", bg=color).grid(row=3, column=2) + Label(text="f_s", bg=color).grid(row=4, column=2) + Label(text="n", bg=color).grid(row=5, column=2) + + Label(text="meters", bg=color).grid(row=1, column=3) + Label(text="meters", bg=color).grid(row=2, column=3) + Label(text="meters", bg=color).grid(row=3, column=3) + Label(text="meters", bg=color).grid(row=4, column=3) + Label(text="-", bg=color).grid(row=5, column=3) + + def validateAll(val): # 1 mandatory argument, not used + try: + float(e1.get()) + float(e2.get()) + float(e3.get()) + float(e4.get()) + int(e5.get()) + button1['state']="normal" + return 1 + except: + button1['state']="disabled" + print("disabled") + return 0 + + # Setting entry points + e1 = Entry(justify=CENTER, width=15) # (relief=FLAT, justify=CENTER, bg=color) + e1.grid(row=1, column=4) + e1.insert(INSERT, 20.0) + e2 = Entry(justify=CENTER, width=15) + e2.grid(row=2, column=4) + e2.insert(INSERT, 5.2) + e3 = Entry(justify=CENTER, width=15) + e3.grid(row=3, column=4) + e3.insert(INSERT, 7.3) + e4 = Entry(justify=CENTER, width=15) + e4.grid(row=4, column=4) + e4.insert(INSERT, 6.0) + e5 = Entry(justify=CENTER, width=15) + e5.grid(row=5, column=4) + e5.insert(INSERT, 6) + + + def start(val): + # hall_width_L, hall_height_h_o, hall_height_h_m, number_frames, frame_spacing, new_model, model_name, delete, delete_all + model_name = e6.get() if var1.get() else modeCombo.get() + mainFunc(float(e1.get()),float(e2.get()),float(e3.get()),int(e5.get()),float(e4.get()),var1.get(),model_name,int(var2.get()),int(var3.get())) + def close_window(val): + win.destroy() + + # substitute for validatecommand and validation options of Entry (e1-e5) + e1.bind('', validateAll) + e1.bind('', validateAll) + e2.bind('', validateAll) + e2.bind('', validateAll) + e3.bind('', validateAll) + e3.bind('', validateAll) + e4.bind('', validateAll) + e4.bind('', validateAll) + e5.bind('', validateAll) + e5.bind('', validateAll) + + def selectRadioButton(): + if var1.get()==1: + c2.config(state=DISABLED) + c3.config(state=DISABLED) + modeCombo.config(state=DISABLED) + e6.config(state=NORMAL) + else: + e6.config(state=DISABLED) + c2.config(state=NORMAL) + c3.config(state=NORMAL) + modeCombo.config(state=NORMAL) + + # Radiobuttons + var1 = IntVar() + c1 = Radiobutton(win, text='create new model', variable=var1, value=1, command=selectRadioButton) + c1.grid(row=7, column=0, sticky=W) + c1.select() + c1 = Radiobutton(win, text='use existing model', variable=var1, value=0, command=selectRadioButton) + c1.grid(row=8, column=0, sticky=W) + c1.config(state=DISABLED) + + # Textbox + e6 = Entry(justify=LEFT, width=19) + e6.grid(row=7, column=1) + e6.insert(INSERT, 'new_Model') + + # Combobox + n = StringVar() + lst = [] + modeCombo = ttk.Combobox(win, text='model', width=16, textvariable=n) + if lstOfModels: + c1.config(state=NORMAL) + for i in lstOfModels.name: + lst.append(i) + modeCombo['values'] = lst + modeCombo.current(0) + modeCombo.grid(row=8, column=1, sticky=W) + + # Checkboxes + var2 = IntVar() + c2 = Checkbutton(win, text='delete results', state=DISABLED, variable=var2, onvalue=1, offvalue=0) + c2.grid(row=9, column=0, sticky=W) + var3 = IntVar() + c3 = Checkbutton(win, text='delete_all model', state=DISABLED, variable=var3, onvalue=1, offvalue=0) + c3.grid(row=10, column=0, sticky=W) + + button1=Button(text='Run', anchor=CENTER, width=12, height=1, bg=color, state="normal") # width=16 + button1.grid(row=11, column=4) + button1.bind('', start) + + button2=Button(text='Close', anchor=CENTER, width=12, height=1, bg=color, state="normal") + button2.grid(row=11, column=3) + button2.bind('', close_window) + + win.mainloop() diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index c4192631..00000000 --- a/docs/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/docs/_sources/1-installation.rst.txt b/docs/_sources/1-installation.rst.txt deleted file mode 100644 index 3665b44c..00000000 --- a/docs/_sources/1-installation.rst.txt +++ /dev/null @@ -1,3 +0,0 @@ -**Installation** -===================== -**Put installation guide here** \ No newline at end of file diff --git a/docs/_sources/2-globalcommands.rst.txt b/docs/_sources/2-globalcommands.rst.txt deleted file mode 100644 index bc57439f..00000000 --- a/docs/_sources/2-globalcommands.rst.txt +++ /dev/null @@ -1,46 +0,0 @@ -**Global Commands** -===================== - -#. :doc:`2.1-basicobjects` -#. :doc:`2.2-specialobjects` -#. :doc:`2.3-typesfornodes` -#. :doc:`2.4-typesforlines` -#. :doc:`2.5-typesformembers` -#. :doc:`2.6-typesforsurfaces` -#. :doc:`2.7-typesforsolids` -#. :doc:`2.8-typesforspecialobjects` -#. :doc:`2.9-imperfection` -#. :doc:`2.10-loadcasesandcombinations` -#. :doc:`2.11-loadwizards` -#. :doc:`2.12-loads` -#. :doc:`2.13-results` -#. :doc:`2.14-guideobjects` -#. :doc:`2.15-printoutreport` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.1-basicobjects - 2.2-specialobjects - 2.3-typesfornodes - 2.4-typesforlines - 2.5-typesformembers - 2.6-typesforsurfaces - 2.7-typesforsolids - 2.8-typesforspecialobjects - 2.9-imperfection - 2.10-loadcasesandcombinations - 2.11-loadwizards - 2.12-loads - 2.13-results - 2.14-guideobjects - 2.15-printoutreport - - - - - - - \ No newline at end of file diff --git a/docs/_sources/2.1-basicobjects.rst.txt b/docs/_sources/2.1-basicobjects.rst.txt deleted file mode 100644 index 423653d1..00000000 --- a/docs/_sources/2.1-basicobjects.rst.txt +++ /dev/null @@ -1,34 +0,0 @@ -**Basic Objects** -===================== -#. :doc:`2.1.1-materials` -#. :doc:`2.1.2-sections` -#. :doc:`2.1.3-thicknesses` -#. :doc:`2.1.4-nodes` -#. :doc:`2.1.5-lines` -#. :doc:`2.1.6-members` -#. :doc:`2.1.7-surfaces` -#. :doc:`2.1.8-openings` -#. :doc:`2.1.9-solids` -#. :doc:`2.1.10-linesets` -#. :doc:`2.1.11-membersets` -#. :doc:`2.1.12-surfacesets` -#. :doc:`2.1.13-solidsets` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.1.1-materials - 2.1.2-sections - 2.1.3-thicknesses - 2.1.4-nodes - 2.1.5-lines - 2.1.6-members - 2.1.7-surfaces - 2.1.8-openings - 2.1.9-solids - 2.1.10-linesets - 2.1.11-membersets - 2.1.12-surfacesets - 2.1.13-solidsets - diff --git a/docs/_sources/2.1.1-materials.rst.txt b/docs/_sources/2.1.1-materials.rst.txt deleted file mode 100644 index 58e11756..00000000 --- a/docs/_sources/2.1.1-materials.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -Material -========== -.. function:: Material(no, name, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **name** (*str*): Material Name - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters \ No newline at end of file diff --git a/docs/_sources/2.1.10-linesets.rst.txt b/docs/_sources/2.1.10-linesets.rst.txt deleted file mode 100644 index ba636698..00000000 --- a/docs/_sources/2.1.10-linesets.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -LineSet -=========== -.. function:: LineSet(no, lines_no, line_set_type, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **lines_no** (*str*): Tags of Lines - * **line_set_type** (*enum*): Set Type Enumeration - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -.. function:: LineSet.ContinuousLines(no, lines_no, line_set_type, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **lines_no** (*str*): Tags of Lines - * **line_set_type** (*enum*): Set Type Enumeration - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -.. function:: LineSet.GroupOfLines(no, lines_no, line_set_type, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **lines_no** (*str*): Tags of Lines - * **line_set_type** (*enum*): Set Type Enumeration - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters \ No newline at end of file diff --git a/docs/_sources/2.1.11-membersets.rst.txt b/docs/_sources/2.1.11-membersets.rst.txt deleted file mode 100644 index 87c75aad..00000000 --- a/docs/_sources/2.1.11-membersets.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberSet -=========== diff --git a/docs/_sources/2.1.12-surfacesets.rst.txt b/docs/_sources/2.1.12-surfacesets.rst.txt deleted file mode 100644 index 55965add..00000000 --- a/docs/_sources/2.1.12-surfacesets.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceSet -============ diff --git a/docs/_sources/2.1.13-solidsets.rst.txt b/docs/_sources/2.1.13-solidsets.rst.txt deleted file mode 100644 index 5a80fffd..00000000 --- a/docs/_sources/2.1.13-solidsets.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SolidSet -========= diff --git a/docs/_sources/2.1.2-sections.rst.txt b/docs/_sources/2.1.2-sections.rst.txt deleted file mode 100644 index 2046736d..00000000 --- a/docs/_sources/2.1.2-sections.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Section -======== diff --git a/docs/_sources/2.1.3-thicknesses.rst.txt b/docs/_sources/2.1.3-thicknesses.rst.txt deleted file mode 100644 index 148cfbdd..00000000 --- a/docs/_sources/2.1.3-thicknesses.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Thickness -============ diff --git a/docs/_sources/2.1.4-nodes.rst.txt b/docs/_sources/2.1.4-nodes.rst.txt deleted file mode 100644 index aa03a21e..00000000 --- a/docs/_sources/2.1.4-nodes.rst.txt +++ /dev/null @@ -1,128 +0,0 @@ -Node -======== -.. function:: Node(no, coordinate_X, coordinate_Y, coordinate_Z, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **coordinate_X** (*float*): X-Coordinate - * **coordinate_Y** (*float*): Y-Coordinate - * **coordinate_Z** (*float*): Z-Coordinate - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Node.Standard(no, coordinate_system, coordinate_system_type, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **coordinate_sytem** (*list*): Coordinate System Parameters - * **coordinate_sytem_type** (*enum*): Coordinate System Type Enumeration - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - - ``For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_CARTESIAN:`` - ``coordinate_system = [X, Y, Z]`` - - ``For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_X_CYLINDRICAL:`` - ``coordinate_system = [X, R, θ]`` - - ``For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_Y_CYLINDRICAL:`` - ``coordinate_system = [R, Ύ, θ]`` - - ``For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_Z_CYLINDRICAL:`` - ``coordinate_system = [R, θ, Z]`` - - ``For coordinate_system_type = NodeCoordinateSystemType.COORDINATE_SYSTEM_POLAR:`` - ``coordinate_system = [R, θ, φ]`` - -==================================================================================================================================================================================================== - -.. function:: Node.BetweenTwoNodes(no, start_node_no, end_node_no, node_reference, length_between_i_and_j, parameters, offset_y, offset_z, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **start_node_no** (*int*): Start Node - * **end_node_no** (*int*): End Node - * **node_reference** (*enum*): Node Reference Enumeration - * **length_between_i_and_j** (*int*): Length Between 2 Nodes - * **parameters** (*list*): Parameter List - * **offset_y** (*int*): Offset in Y-Direction - * **offset_z** (*int*): Offset in Z-Direction - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - - ``If distance_from_start_relative:`` - ``parameters = [True, %]`` - - ``If distance_from_start_absolute:`` - ``parameters = [False, magnitude]`` - -==================================================================================================================================================================================================== - -.. function:: Node.BetweenTwoPoints(no, start_point_x, start_point_y, start_point_z, end_point_x, end_point_y, end_point_z, node_reference, parameters, offset_y, offset_z, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **start_point_x** (*float*): Start Point in X-Coordinate - * **start_point_y** (*float*): Start Point in Y-Coordinate - * **start_point_z** (*float*): Start Point in Z-Coordinate - * **end_point_x** (*float*): End Point in X-Coordinate - * **end_point_y** (*float*): End Point in Y-Coordinate - * **end_point_z** (*float*): End Point in Z-Coordinate - * **node_reference** (*enum*) : Node Reference Enumeration - * **parameters** (*list*): Parameter List - * **offset_y** (*int*): Offset in Y-Direction - * **offset_z** (*int*): Offset in Z-Direction - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - - ``if distance_from_start_relative:`` - ``parameters = [True, %]`` - - ``if distance_from_start_absolute:`` - ``parameters = [False, magnitude]`` - -==================================================================================================================================================================================================== - -.. function:: Node.OnLine(no, line_number, node_reference, length_between_i_and_j, parameters, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **line_number** (*int*) : Line Tag - * **node_reference** (*enum*) : Node Reference Enumeration - * **length_between_i_and_j** (*int*): Length Between 2 Nodes - * **parameters** (*list*): Parameter List - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - - ``if distance_from_start_relative:`` - ``parameters = [True, %]`` - - ``if distance_from_start_absolute:`` - ``parameters = [False, magnitude]`` - -==================================================================================================================================================================================================== - -.. function:: Node.OnMember(no, member_number, node_reference, length_between_i_and_j, parameters, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **member_number** (*int*) : Member Tag - * **node_reference** (*enum*) : Node Reference Enumeration - * **length_between_i_and_j** (*int*): Length Between 2 Nodes - * **parameters** (*list*): Parameter List - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - - ``if distance_from_start_relative:`` - ``parameters = [True, %]`` - - ``if distance_from_start_absolute:`` - ``parameters = [False, magnitude]`` \ No newline at end of file diff --git a/docs/_sources/2.1.5-lines.rst.txt b/docs/_sources/2.1.5-lines.rst.txt deleted file mode 100644 index 891100cd..00000000 --- a/docs/_sources/2.1.5-lines.rst.txt +++ /dev/null @@ -1,113 +0,0 @@ -Line -=========== -.. function:: Line(no, nodes_no, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Polyline(no, nodes_no, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Arc(no, nodes_no, control_point, alpha_adjustment_target, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **control_point** (*list*): Coordinates of the Control Point - * **alpha_adjustment_target** (*enum*): Line Arc Alpha Adjustment Target - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Circle(no, nodes_no, center_of_cirle, circle_radius, point_of_normal_to_circle_plane, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **center_of_cirle** (*list*): Coordinates of the Center Point - * **circle_radius** (*float*): Radius of the Circle - * **point_of_normal_to_circle_plane** (*list*): Coordinates of the Normal Point - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.EllipticalArc(no, nodes_no, p1_control_point, p2_control_point, p3_control_point, arc_angle_alpha, arc_angle_beta, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **p1_control_point** (*list*): Coordinates of the Control Point 1 - * **p2_control_point** (*list*): Coordinates of the Control Point 2 - * **p3_control_point** (*list*): Coordinates of the Control Point 3 - * **arc_angle_alpha** (*float*): Alpha Angle - * **arc_angle_beta** (*float*): Beta Angle - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Ellipse(no, nodes_no, p3_control_point, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **p3_control_point** (*list*): Coordinates of the Control Point 3 - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Parabola(no, nodes_no, p3_control_point, parabola_alpha, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **p3_control_point** (*list*): Coordinates of the Control Point 3 - * **parabola_alpha** (*float*): Alpha Angle - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.Spline(no, nodes_no, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters - -==================================================================================================================================================================================================== - -.. function:: Line.NURBS(no, nodes_no, control_points, weights, comment*, params*) - -* Parameters - - * **no** (*int*): Line Tag - * **nodes_no** (*str*): Tags of Nodes - * **control_points** (*list*): List of Coordinates of the Control Points - * **weights** (*list*): List of Weights - * **comment** ( *str, optional*): Comments - * **params** (*dict, optional*): Parameters \ No newline at end of file diff --git a/docs/_sources/2.1.6-members.rst.txt b/docs/_sources/2.1.6-members.rst.txt deleted file mode 100644 index be97d94c..00000000 --- a/docs/_sources/2.1.6-members.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Member -======== diff --git a/docs/_sources/2.1.7-surfaces.rst.txt b/docs/_sources/2.1.7-surfaces.rst.txt deleted file mode 100644 index 9eb70fb6..00000000 --- a/docs/_sources/2.1.7-surfaces.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Surface -======== diff --git a/docs/_sources/2.1.8-openings.rst.txt b/docs/_sources/2.1.8-openings.rst.txt deleted file mode 100644 index 807cb6c8..00000000 --- a/docs/_sources/2.1.8-openings.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Opening -======== diff --git a/docs/_sources/2.1.9-solids.rst.txt b/docs/_sources/2.1.9-solids.rst.txt deleted file mode 100644 index 130c5141..00000000 --- a/docs/_sources/2.1.9-solids.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Solid -======== diff --git a/docs/_sources/2.10-loadcasesandcombinations.rst.txt b/docs/_sources/2.10-loadcasesandcombinations.rst.txt deleted file mode 100644 index 387ad9e4..00000000 --- a/docs/_sources/2.10-loadcasesandcombinations.rst.txt +++ /dev/null @@ -1,22 +0,0 @@ -**Load Cases and Combinations** -=================================== - -#. :doc:`2.10.1-loadcase` -#. :doc:`2.10.2-action` -#. :doc:`2.10.3-designsituation` -#. :doc:`2.10.4-actioncombination` -#. :doc:`2.10.5-loadcombination` -#. :doc:`2.10.6-staticanalysissettings` -#. :doc:`2.10.7-combinationwizard` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.10.1-loadcase - 2.10.2-action - 2.10.3-designsituation - 2.10.4-actioncombination - 2.10.5-loadcombination - 2.10.6-staticanalysissettings - 2.10.7-combinationwizard \ No newline at end of file diff --git a/docs/_sources/2.10.1-loadcase.rst.txt b/docs/_sources/2.10.1-loadcase.rst.txt deleted file mode 100644 index 94ce3834..00000000 --- a/docs/_sources/2.10.1-loadcase.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Load Case -================== diff --git a/docs/_sources/2.10.2-action.rst.txt b/docs/_sources/2.10.2-action.rst.txt deleted file mode 100644 index e868ed7b..00000000 --- a/docs/_sources/2.10.2-action.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Action -================== diff --git a/docs/_sources/2.10.3-designsituation.rst.txt b/docs/_sources/2.10.3-designsituation.rst.txt deleted file mode 100644 index 96f702f7..00000000 --- a/docs/_sources/2.10.3-designsituation.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Design Situation -================== diff --git a/docs/_sources/2.10.4-actioncombination.rst.txt b/docs/_sources/2.10.4-actioncombination.rst.txt deleted file mode 100644 index b7f1ba17..00000000 --- a/docs/_sources/2.10.4-actioncombination.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Action Combination -==================== diff --git a/docs/_sources/2.10.5-loadcombination.rst.txt b/docs/_sources/2.10.5-loadcombination.rst.txt deleted file mode 100644 index 3231a78e..00000000 --- a/docs/_sources/2.10.5-loadcombination.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Load Combination -================== diff --git a/docs/_sources/2.10.6-staticanalysissettings.rst.txt b/docs/_sources/2.10.6-staticanalysissettings.rst.txt deleted file mode 100644 index 15340844..00000000 --- a/docs/_sources/2.10.6-staticanalysissettings.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Static Analysis Settings -========================= diff --git a/docs/_sources/2.10.7-combinationwizard.rst.txt b/docs/_sources/2.10.7-combinationwizard.rst.txt deleted file mode 100644 index 671a9511..00000000 --- a/docs/_sources/2.10.7-combinationwizard.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Combination Wizard -================== diff --git a/docs/_sources/2.11-loadwizards.rst.txt b/docs/_sources/2.11-loadwizards.rst.txt deleted file mode 100644 index 944bb919..00000000 --- a/docs/_sources/2.11-loadwizards.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -**Load Wizards** -=================================== - -#. :doc:`2.11.1-memberloadsfromareaload` -#. :doc:`2.11.2-memberloadsfromfreelineload` -#. :doc:`2.11.3-snowload` -#. :doc:`2.11.4-windload` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.11.1-memberloadsfromareaload - 2.11.2-memberloadsfromfreelineload - 2.11.3-snowload - 2.11.4-windload diff --git a/docs/_sources/2.11.1-memberloadsfromareaload.rst.txt b/docs/_sources/2.11.1-memberloadsfromareaload.rst.txt deleted file mode 100644 index 3631e1fb..00000000 --- a/docs/_sources/2.11.1-memberloadsfromareaload.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Member Loads From Area Load -==================================== diff --git a/docs/_sources/2.11.2-memberloadsfromfreelineload.rst.txt b/docs/_sources/2.11.2-memberloadsfromfreelineload.rst.txt deleted file mode 100644 index daf28b26..00000000 --- a/docs/_sources/2.11.2-memberloadsfromfreelineload.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Member Loads From Free Line Load -==================================== diff --git a/docs/_sources/2.11.3-snowload.rst.txt b/docs/_sources/2.11.3-snowload.rst.txt deleted file mode 100644 index 28f09830..00000000 --- a/docs/_sources/2.11.3-snowload.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Snow Load -============ diff --git a/docs/_sources/2.11.4-windload.rst.txt b/docs/_sources/2.11.4-windload.rst.txt deleted file mode 100644 index ff92d571..00000000 --- a/docs/_sources/2.11.4-windload.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Wind Load -============= \ No newline at end of file diff --git a/docs/_sources/2.12-loads.rst.txt b/docs/_sources/2.12-loads.rst.txt deleted file mode 100644 index 23b18905..00000000 --- a/docs/_sources/2.12-loads.rst.txt +++ /dev/null @@ -1,3 +0,0 @@ -**Loads** -=================================== - diff --git a/docs/_sources/2.13-results.rst.txt b/docs/_sources/2.13-results.rst.txt deleted file mode 100644 index ddb6f59d..00000000 --- a/docs/_sources/2.13-results.rst.txt +++ /dev/null @@ -1,3 +0,0 @@ -**Results** -=================================== - diff --git a/docs/_sources/2.14-guideobjects.rst.txt b/docs/_sources/2.14-guideobjects.rst.txt deleted file mode 100644 index b1885759..00000000 --- a/docs/_sources/2.14-guideobjects.rst.txt +++ /dev/null @@ -1,3 +0,0 @@ -**Guide Objects** -=================================== - diff --git a/docs/_sources/2.15-printoutreport.rst.txt b/docs/_sources/2.15-printoutreport.rst.txt deleted file mode 100644 index eb2d1ba9..00000000 --- a/docs/_sources/2.15-printoutreport.rst.txt +++ /dev/null @@ -1,3 +0,0 @@ -**Printout Report** -=================================== - diff --git a/docs/_sources/2.2-specialobjects.rst.txt b/docs/_sources/2.2-specialobjects.rst.txt deleted file mode 100644 index 8f9ab8a5..00000000 --- a/docs/_sources/2.2-specialobjects.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -**Special Objects** -===================== -#. :doc:`2.2.1-intersections` -#. :doc:`2.2.2-surfaceresultadjustments` -#. :doc:`2.2.3-surfacecontacts` -#. :doc:`2.2.4-rigidlinks` -#. :doc:`2.2.5-resultsections` -#. :doc:`2.2.6-structuremodifications` -#. :doc:`2.2.7-blocks` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.2.1-intersections - 2.2.2-surfaceresultadjustments - 2.2.3-surfacecontacts - 2.2.4-rigidlinks - 2.2.5-resultsections - 2.2.6-structuremodifications - 2.2.7-blocks - - - - - - \ No newline at end of file diff --git a/docs/_sources/2.2.1-intersections.rst.txt b/docs/_sources/2.2.1-intersections.rst.txt deleted file mode 100644 index a8758994..00000000 --- a/docs/_sources/2.2.1-intersections.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Intersection -========================== diff --git a/docs/_sources/2.2.2-surfaceresultadjustments.rst.txt b/docs/_sources/2.2.2-surfaceresultadjustments.rst.txt deleted file mode 100644 index 63580bda..00000000 --- a/docs/_sources/2.2.2-surfaceresultadjustments.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceResultAdjustment -========================== diff --git a/docs/_sources/2.2.3-surfacecontacts.rst.txt b/docs/_sources/2.2.3-surfacecontacts.rst.txt deleted file mode 100644 index d1456c45..00000000 --- a/docs/_sources/2.2.3-surfacecontacts.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceContact -==================== diff --git a/docs/_sources/2.2.4-rigidlinks.rst.txt b/docs/_sources/2.2.4-rigidlinks.rst.txt deleted file mode 100644 index 25cb2b35..00000000 --- a/docs/_sources/2.2.4-rigidlinks.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -RigidLink -========================== diff --git a/docs/_sources/2.2.5-resultsections.rst.txt b/docs/_sources/2.2.5-resultsections.rst.txt deleted file mode 100644 index 2a9d4253..00000000 --- a/docs/_sources/2.2.5-resultsections.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -ResultSection -========================== diff --git a/docs/_sources/2.2.6-structuremodifications.rst.txt b/docs/_sources/2.2.6-structuremodifications.rst.txt deleted file mode 100644 index 3a624010..00000000 --- a/docs/_sources/2.2.6-structuremodifications.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -StructureModification -========================== diff --git a/docs/_sources/2.2.7-blocks.rst.txt b/docs/_sources/2.2.7-blocks.rst.txt deleted file mode 100644 index 01d888da..00000000 --- a/docs/_sources/2.2.7-blocks.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Block -========================== diff --git a/docs/_sources/2.3-typesfornodes.rst.txt b/docs/_sources/2.3-typesfornodes.rst.txt deleted file mode 100644 index 0e90016e..00000000 --- a/docs/_sources/2.3-typesfornodes.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -**Types for Nodes** -===================== -#. :doc:`2.3.1-nodalsupports` -#. :doc:`2.3.2-nodalmeshrefinements` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.3.1-nodalsupports - 2.3.2-nodalmeshrefinements - diff --git a/docs/_sources/2.3.1-nodalsupports.rst.txt b/docs/_sources/2.3.1-nodalsupports.rst.txt deleted file mode 100644 index 3b923b18..00000000 --- a/docs/_sources/2.3.1-nodalsupports.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -NodalSupport -============================= diff --git a/docs/_sources/2.3.2-nodalmeshrefinements.rst.txt b/docs/_sources/2.3.2-nodalmeshrefinements.rst.txt deleted file mode 100644 index ba8e2a47..00000000 --- a/docs/_sources/2.3.2-nodalmeshrefinements.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -NodalMeshRefinement -============================= diff --git a/docs/_sources/2.4-typesforlines.rst.txt b/docs/_sources/2.4-typesforlines.rst.txt deleted file mode 100644 index ecc54b0a..00000000 --- a/docs/_sources/2.4-typesforlines.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -**Types for Lines** -===================== -#. :doc:`2.4.1-linesupports` -#. :doc:`2.4.2-linemeshrefinements` -#. :doc:`2.4.3-linehinges` -#. :doc:`2.4.4-lineweldedjoints` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.4.1-linesupports - 2.4.2-linemeshrefinements - 2.4.3-linehinges - 2.4.4-lineweldedjoints diff --git a/docs/_sources/2.4.1-linesupports.rst.txt b/docs/_sources/2.4.1-linesupports.rst.txt deleted file mode 100644 index b9484d4d..00000000 --- a/docs/_sources/2.4.1-linesupports.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -LineSupport -============================= diff --git a/docs/_sources/2.4.2-linemeshrefinements.rst.txt b/docs/_sources/2.4.2-linemeshrefinements.rst.txt deleted file mode 100644 index f3f81d97..00000000 --- a/docs/_sources/2.4.2-linemeshrefinements.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -LineMeshRefinements -============================= diff --git a/docs/_sources/2.4.3-linehinges.rst.txt b/docs/_sources/2.4.3-linehinges.rst.txt deleted file mode 100644 index a23554a4..00000000 --- a/docs/_sources/2.4.3-linehinges.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -LineHinge -============================= diff --git a/docs/_sources/2.4.4-lineweldedjoints.rst.txt b/docs/_sources/2.4.4-lineweldedjoints.rst.txt deleted file mode 100644 index 0ab8211c..00000000 --- a/docs/_sources/2.4.4-lineweldedjoints.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -LineWeldedJoints -============================= diff --git a/docs/_sources/2.5-typesformembers.rst.txt b/docs/_sources/2.5-typesformembers.rst.txt deleted file mode 100644 index 2ad2d0cb..00000000 --- a/docs/_sources/2.5-typesformembers.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -**Types for Members** -===================== -#. :doc:`2.5.1-memberhinges` -#. :doc:`2.5.2-membereccentricities` -#. :doc:`2.5.3-membersupports` -#. :doc:`2.5.4-memberstiffnessmodifications` -#. :doc:`2.5.5-membernonlinearities` -#. :doc:`2.5.6-memberdefineablestiffness` -#. :doc:`2.5.7-memberresultintermediatepoints` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.5.1-memberhinges - 2.5.2-membereccentricities - 2.5.3-membersupports - 2.5.4-memberstiffnessmodifications - 2.5.5-membernonlinearities - 2.5.6-memberdefineablestiffness - 2.5.7-memberresultintermediatepoints - diff --git a/docs/_sources/2.5.1-memberhinges.rst.txt b/docs/_sources/2.5.1-memberhinges.rst.txt deleted file mode 100644 index 7f857564..00000000 --- a/docs/_sources/2.5.1-memberhinges.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberHinge -============================ \ No newline at end of file diff --git a/docs/_sources/2.5.2-membereccentricities.rst.txt b/docs/_sources/2.5.2-membereccentricities.rst.txt deleted file mode 100644 index 5d36933a..00000000 --- a/docs/_sources/2.5.2-membereccentricities.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberEccentricity -============================ \ No newline at end of file diff --git a/docs/_sources/2.5.3-membersupports.rst.txt b/docs/_sources/2.5.3-membersupports.rst.txt deleted file mode 100644 index a61d641c..00000000 --- a/docs/_sources/2.5.3-membersupports.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberSupport -==================================== \ No newline at end of file diff --git a/docs/_sources/2.5.4-memberstiffnessmodifications.rst.txt b/docs/_sources/2.5.4-memberstiffnessmodifications.rst.txt deleted file mode 100644 index 04393a91..00000000 --- a/docs/_sources/2.5.4-memberstiffnessmodifications.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberStiffnessModification -==================================== \ No newline at end of file diff --git a/docs/_sources/2.5.5-membernonlinearities.rst.txt b/docs/_sources/2.5.5-membernonlinearities.rst.txt deleted file mode 100644 index d26ed18c..00000000 --- a/docs/_sources/2.5.5-membernonlinearities.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberNonlinearity -============================ \ No newline at end of file diff --git a/docs/_sources/2.5.6-memberdefineablestiffness.rst.txt b/docs/_sources/2.5.6-memberdefineablestiffness.rst.txt deleted file mode 100644 index 7d88e8f5..00000000 --- a/docs/_sources/2.5.6-memberdefineablestiffness.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberDefineableStiffness -============================ \ No newline at end of file diff --git a/docs/_sources/2.5.7-memberresultintermediatepoints.rst.txt b/docs/_sources/2.5.7-memberresultintermediatepoints.rst.txt deleted file mode 100644 index ae525f0b..00000000 --- a/docs/_sources/2.5.7-memberresultintermediatepoints.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -MemberResultIntermediatePoints -==================================== \ No newline at end of file diff --git a/docs/_sources/2.6-typesforsurfaces.rst.txt b/docs/_sources/2.6-typesforsurfaces.rst.txt deleted file mode 100644 index c4e96b46..00000000 --- a/docs/_sources/2.6-typesforsurfaces.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -**Types for Surfaces** -========================= -#. :doc:`2.6.1-surfacesupports` -#. :doc:`2.6.2-surfaceeccentricities` -#. :doc:`2.6.3-surfacestiffnessmodifications` -#. :doc:`2.6.4-surfacemeshrefinements` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.6.1-surfacesupports - 2.6.2-surfaceeccentricities - 2.6.3-surfacestiffnessmodifications - 2.6.4-surfacemeshrefinements diff --git a/docs/_sources/2.6.1-surfacesupports.rst.txt b/docs/_sources/2.6.1-surfacesupports.rst.txt deleted file mode 100644 index 944f8184..00000000 --- a/docs/_sources/2.6.1-surfacesupports.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceSupport -================================== diff --git a/docs/_sources/2.6.2-surfaceeccentricities.rst.txt b/docs/_sources/2.6.2-surfaceeccentricities.rst.txt deleted file mode 100644 index 78356098..00000000 --- a/docs/_sources/2.6.2-surfaceeccentricities.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceEccentricity -========================== diff --git a/docs/_sources/2.6.3-surfacestiffnessmodifications.rst.txt b/docs/_sources/2.6.3-surfacestiffnessmodifications.rst.txt deleted file mode 100644 index d24a9ea2..00000000 --- a/docs/_sources/2.6.3-surfacestiffnessmodifications.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceStiffnessModification -================================== diff --git a/docs/_sources/2.6.4-surfacemeshrefinements.rst.txt b/docs/_sources/2.6.4-surfacemeshrefinements.rst.txt deleted file mode 100644 index 65e33176..00000000 --- a/docs/_sources/2.6.4-surfacemeshrefinements.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -SurfaceMeshRefinement -========================== diff --git a/docs/_sources/2.7-typesforsolids.rst.txt b/docs/_sources/2.7-typesforsolids.rst.txt deleted file mode 100644 index 2d2ad743..00000000 --- a/docs/_sources/2.7-typesforsolids.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Types for Solids** -===================== -#. :doc:`2.7.1-solidmeshrefinement` -#. :doc:`2.7.2-solidgas` -#. :doc:`2.7.3-solidcontact` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.7.1-solidmeshrefinement - 2.7.2-solidgas - 2.7.3-solidcontact \ No newline at end of file diff --git a/docs/_sources/2.7.1-solidmeshrefinement.rst.txt b/docs/_sources/2.7.1-solidmeshrefinement.rst.txt deleted file mode 100644 index fd8a8fcf..00000000 --- a/docs/_sources/2.7.1-solidmeshrefinement.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Solid Mesh Refinement -============================= diff --git a/docs/_sources/2.7.2-solidgas.rst.txt b/docs/_sources/2.7.2-solidgas.rst.txt deleted file mode 100644 index 9ca26425..00000000 --- a/docs/_sources/2.7.2-solidgas.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Solid Gas -============================= diff --git a/docs/_sources/2.7.3-solidcontact.rst.txt b/docs/_sources/2.7.3-solidcontact.rst.txt deleted file mode 100644 index eb259da0..00000000 --- a/docs/_sources/2.7.3-solidcontact.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Solid Contact -============================= diff --git a/docs/_sources/2.8-typesforspecialobjects.rst.txt b/docs/_sources/2.8-typesforspecialobjects.rst.txt deleted file mode 100644 index 96c94992..00000000 --- a/docs/_sources/2.8-typesforspecialobjects.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -**Types for Special Objects** -============================== -#. :doc:`2.8.1-surfacecontacttype` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.8.1-surfacecontacttype \ No newline at end of file diff --git a/docs/_sources/2.8.1-surfacecontacttype.rst.txt b/docs/_sources/2.8.1-surfacecontacttype.rst.txt deleted file mode 100644 index 0db0945c..00000000 --- a/docs/_sources/2.8.1-surfacecontacttype.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Surface Contact Type -========================== diff --git a/docs/_sources/2.9-imperfection.rst.txt b/docs/_sources/2.9-imperfection.rst.txt deleted file mode 100644 index 52447798..00000000 --- a/docs/_sources/2.9-imperfection.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Imperfections** -===================== -#. :doc:`2.9.1-imperfectioncase` -#. :doc:`2.9.2-localimperfection` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 2.9.1-imperfectioncase - 2.9.2-localimperfection - \ No newline at end of file diff --git a/docs/_sources/2.9.1-imperfectioncase.rst.txt b/docs/_sources/2.9.1-imperfectioncase.rst.txt deleted file mode 100644 index 868f4e27..00000000 --- a/docs/_sources/2.9.1-imperfectioncase.rst.txt +++ /dev/null @@ -1,4 +0,0 @@ -Imperfection Case -================== - - diff --git a/docs/_sources/2.9.2-localimperfection.rst.txt b/docs/_sources/2.9.2-localimperfection.rst.txt deleted file mode 100644 index cb72bc0f..00000000 --- a/docs/_sources/2.9.2-localimperfection.rst.txt +++ /dev/null @@ -1,4 +0,0 @@ -Local Imperfection -==================== - - diff --git a/docs/_sources/3-addoncommands.rst.txt b/docs/_sources/3-addoncommands.rst.txt deleted file mode 100644 index aba961c0..00000000 --- a/docs/_sources/3-addoncommands.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -**Add-on Commands** -===================== - -#. :doc:`3.1-nonlinearmaterialbehaviour` -#. :doc:`3.2-structurestability` -#. :doc:`3.3-constructionstages` -#. :doc:`3.4-timedependentanalysis` -#. :doc:`3.5-formfinding` -#. :doc:`3.6-cuttingpatterns` -#. :doc:`3.7-torsionalwarping` -#. :doc:`3.8-modalanalysis` -#. :doc:`3.9-dynamicloads` -#. :doc:`3.10-buildingmodel` -#. :doc:`3.11-windsimulation` -#. :doc:`3.12-geotechnicalanalysis` -#. :doc:`3.13-stressstrainanalysis` -#. :doc:`3.14-concretedesign` -#. :doc:`3.15-steeldesign` -#. :doc:`3.16-timberdesign` -#. :doc:`3.17-masonrydesign` -#. :doc:`3.18-aluminumdesign` -#. :doc:`3.19-steeljoints` -#. :doc:`3.20-co2estimation` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.1-nonlinearmaterialbehaviour - 3.2-structurestability - 3.3-constructionstages - 3.4-timedependentanalysis - 3.5-formfinding - 3.6-cuttingpatterns - 3.7-torsionalwarping - 3.8-modalanalysis - 3.9-dynamicloads - 3.10-buildingmodel - 3.11-windsimulation - 3.12-geotechnicalanalysis - 3.13-stressstrainanalysis - 3.14-concretedesign - 3.15-steeldesign - 3.16-timberdesign - 3.17-masonrydesign - 3.18-aluminumdesign - 3.19-steeljoints - 3.20-co2estimation diff --git a/docs/_sources/3.1-nonlinearmaterialbehaviour.rst.txt b/docs/_sources/3.1-nonlinearmaterialbehaviour.rst.txt deleted file mode 100644 index 0d797ddb..00000000 --- a/docs/_sources/3.1-nonlinearmaterialbehaviour.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -**Nonlinear Material Behavior** -=================================== - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.10-buildingmodel.rst.txt b/docs/_sources/3.10-buildingmodel.rst.txt deleted file mode 100644 index 3f845c63..00000000 --- a/docs/_sources/3.10-buildingmodel.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -**Building Model** -============================ - -#. :doc:`3.10.1-buildingstories` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.10.1-buildingstories - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.10.1-buildingstories.rst.txt b/docs/_sources/3.10.1-buildingstories.rst.txt deleted file mode 100644 index cfe584c5..00000000 --- a/docs/_sources/3.10.1-buildingstories.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Building Stories** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.11-windsimulation.rst.txt b/docs/_sources/3.11-windsimulation.rst.txt deleted file mode 100644 index 8db419d0..00000000 --- a/docs/_sources/3.11-windsimulation.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Wind Simulation** -============================ - -#. :doc:`3.11.1-windsimulationsanalysissettings` -#. :doc:`3.11.2-windprofiles` -#. :doc:`3.11.3-windsimulations` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.11.1-windsimulationsanalysissettings - 3.11.2-windprofiles - 3.11.3-windsimulations - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.11.1-windsimulationsanalysissettings.rst.txt b/docs/_sources/3.11.1-windsimulationsanalysissettings.rst.txt deleted file mode 100644 index fc7fdeee..00000000 --- a/docs/_sources/3.11.1-windsimulationsanalysissettings.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Wind Simulation Analysis Settings** -========================================= - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.11.2-windprofiles.rst.txt b/docs/_sources/3.11.2-windprofiles.rst.txt deleted file mode 100644 index 2758640c..00000000 --- a/docs/_sources/3.11.2-windprofiles.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Wind Profiles** -================== - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.11.3-windsimulations.rst.txt b/docs/_sources/3.11.3-windsimulations.rst.txt deleted file mode 100644 index 6ff2126b..00000000 --- a/docs/_sources/3.11.3-windsimulations.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Wind Simulations** -===================== - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.12-geotechnicalanalysis.rst.txt b/docs/_sources/3.12-geotechnicalanalysis.rst.txt deleted file mode 100644 index 9fefb428..00000000 --- a/docs/_sources/3.12-geotechnicalanalysis.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -**Geotechnical Analysis** -============================ - -#. :doc:`3.12.1-soilsamples` -#. :doc:`3.12.2-soilmassifs` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.12.1-soilsamples - 3.12.2-soilmassifs - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.12.1-soilsamples.rst.txt b/docs/_sources/3.12.1-soilsamples.rst.txt deleted file mode 100644 index dc9a8325..00000000 --- a/docs/_sources/3.12.1-soilsamples.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Soil Samples** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.12.2-soilmassifs.rst.txt b/docs/_sources/3.12.2-soilmassifs.rst.txt deleted file mode 100644 index a37fc0ad..00000000 --- a/docs/_sources/3.12.2-soilmassifs.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Soil Massifs** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.13-stressstrainanalysis.rst.txt b/docs/_sources/3.13-stressstrainanalysis.rst.txt deleted file mode 100644 index 0b7e62f9..00000000 --- a/docs/_sources/3.13-stressstrainanalysis.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -**Stress Strain Analysis** -============================ - -#. :doc:`3.13.1-memberconfigurations` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.13.1-memberconfigurations - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.13.1-memberconfigurations.rst.txt b/docs/_sources/3.13.1-memberconfigurations.rst.txt deleted file mode 100644 index 80140f61..00000000 --- a/docs/_sources/3.13.1-memberconfigurations.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -**Member Configurations** -============================ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14-concretedesign.rst.txt b/docs/_sources/3.14-concretedesign.rst.txt deleted file mode 100644 index 7d287a7e..00000000 --- a/docs/_sources/3.14-concretedesign.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Concrete Design** -============================ - -#. :doc:`3.14.1-concretedesign` -#. :doc:`3.14.2-typesforconcretedesign` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.14.1-concretedesign - 3.14.2-typesforconcretedesign - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.1-concretedesign.rst.txt b/docs/_sources/3.14.1-concretedesign.rst.txt deleted file mode 100644 index 5d16ea37..00000000 --- a/docs/_sources/3.14.1-concretedesign.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Concrete Design** -============================ -#. :doc:`3.14.1.1-ultimateconfigurations` -#. :doc:`3.14.1.2-serviceabilityconfigurations` -#. :doc:`3.14.1.3-fireresistanceconfigurations` -#. :doc:`3.14.1.4-seismicconfigurations` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.14.1.1-ultimateconfigurations - 3.14.1.2-serviceabilityconfigurations - 3.14.1.3-fireresistanceconfigurations - 3.14.1.4-seismicconfigurations - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.1.1-ultimateconfigurations.rst.txt b/docs/_sources/3.14.1.1-ultimateconfigurations.rst.txt deleted file mode 100644 index 2dbcd847..00000000 --- a/docs/_sources/3.14.1.1-ultimateconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Ultimate Configurations** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.1.2-serviceabilityconfigurations.rst.txt b/docs/_sources/3.14.1.2-serviceabilityconfigurations.rst.txt deleted file mode 100644 index 398c6fd5..00000000 --- a/docs/_sources/3.14.1.2-serviceabilityconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Serviceability Configurations** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.1.3-fireresistanceconfigurations.rst.txt b/docs/_sources/3.14.1.3-fireresistanceconfigurations.rst.txt deleted file mode 100644 index 22371cc0..00000000 --- a/docs/_sources/3.14.1.3-fireresistanceconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Fire Resistance Configurations** -======================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.1.4-seismicconfigurations.rst.txt b/docs/_sources/3.14.1.4-seismicconfigurations.rst.txt deleted file mode 100644 index 20691139..00000000 --- a/docs/_sources/3.14.1.4-seismicconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Seismic Configurations** -======================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.2-typesforconcretedesign.rst.txt b/docs/_sources/3.14.2-typesforconcretedesign.rst.txt deleted file mode 100644 index 6606fc98..00000000 --- a/docs/_sources/3.14.2-typesforconcretedesign.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -**Types for Concrete Design** -============================== - -#. :doc:`3.14.2.1-effectivelengths` -#. :doc:`3.14.2.2-concretedurabilities` -#. :doc:`3.14.2.3-reinforcementdirections` -#. :doc:`3.14.2.4-surfacereinforcements` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.14.2.1-effectivelengths - 3.14.2.2-concretedurabilities - 3.14.2.3-reinforcementdirections - 3.14.2.4-surfacereinforcements - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.2.1-effectivelengths.rst.txt b/docs/_sources/3.14.2.1-effectivelengths.rst.txt deleted file mode 100644 index 7356444c..00000000 --- a/docs/_sources/3.14.2.1-effectivelengths.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Effective Lengths** -========================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.2.2-concretedurabilities.rst.txt b/docs/_sources/3.14.2.2-concretedurabilities.rst.txt deleted file mode 100644 index 9b7607bc..00000000 --- a/docs/_sources/3.14.2.2-concretedurabilities.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -**Concrete Durabilities** -============================== - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.2.3-reinforcementdirections.rst.txt b/docs/_sources/3.14.2.3-reinforcementdirections.rst.txt deleted file mode 100644 index 35e59137..00000000 --- a/docs/_sources/3.14.2.3-reinforcementdirections.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -**Reinforcement Directions** -============================== - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.14.2.4-surfacereinforcements.rst.txt b/docs/_sources/3.14.2.4-surfacereinforcements.rst.txt deleted file mode 100644 index 5b961c5f..00000000 --- a/docs/_sources/3.14.2.4-surfacereinforcements.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Surface Reinforcements** -============================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15-steeldesign.rst.txt b/docs/_sources/3.15-steeldesign.rst.txt deleted file mode 100644 index b70fb122..00000000 --- a/docs/_sources/3.15-steeldesign.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Steel Design** -============================ - -#. :doc:`3.15.1-steeldesign` -#. :doc:`3.15.2-typesforsteeldesign` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.15.1-steeldesign - 3.15.2-typesforsteeldesign - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.1-steeldesign.rst.txt b/docs/_sources/3.15.1-steeldesign.rst.txt deleted file mode 100644 index a4b83cbd..00000000 --- a/docs/_sources/3.15.1-steeldesign.rst.txt +++ /dev/null @@ -1,34 +0,0 @@ -**Steel Design** -============================ - -#. :doc:`3.15.1.1-ultimateconfigurations` -#. :doc:`3.15.1.2-serviceabilityconfigurations` -#. :doc:`3.15.1.3-fireresistancedesigns` -#. :doc:`3.15.1.4-seismicconfigurations` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.15.1.1-ultimateconfigurations - 3.15.1.2-serviceabilityconfigurations - 3.15.1.3-fireresistanceconfigurations - 3.15.1.4-seismicconfigurations - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.1.1-ultimateconfigurations.rst.txt b/docs/_sources/3.15.1.1-ultimateconfigurations.rst.txt deleted file mode 100644 index 0317f032..00000000 --- a/docs/_sources/3.15.1.1-ultimateconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Ultimate Configuration** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.1.2-serviceabilityconfigurations.rst.txt b/docs/_sources/3.15.1.2-serviceabilityconfigurations.rst.txt deleted file mode 100644 index 61592020..00000000 --- a/docs/_sources/3.15.1.2-serviceabilityconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Serviceability Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.1.3-fireresistanceconfigurations.rst.txt b/docs/_sources/3.15.1.3-fireresistanceconfigurations.rst.txt deleted file mode 100644 index 0d5bbf39..00000000 --- a/docs/_sources/3.15.1.3-fireresistanceconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Fire Resistance Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.1.4-seismicconfigurations.rst.txt b/docs/_sources/3.15.1.4-seismicconfigurations.rst.txt deleted file mode 100644 index 0f9fe4a2..00000000 --- a/docs/_sources/3.15.1.4-seismicconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Seismic Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2-typesforsteeldesign.rst.txt b/docs/_sources/3.15.2-typesforsteeldesign.rst.txt deleted file mode 100644 index 5db38576..00000000 --- a/docs/_sources/3.15.2-typesforsteeldesign.rst.txt +++ /dev/null @@ -1,36 +0,0 @@ -**Types for Steel Design** -============================ - -#. :doc:`3.15.2.1-effectivelengths` -#. :doc:`3.15.2.2-boundaryconditions` -#. :doc:`3.15.2.3-memberlocalsectionreductions` -#. :doc:`3.15.2.4-membershearpanels` -#. :doc:`3.15.2.5-memberrotationalrestraints` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.15.2.1-effectivelengths - 3.15.2.2-boundaryconditions - 3.15.2.3-memberlocalsectionreductions - 3.15.2.4-membershearpanels - 3.15.2.5-memberrotationalrestraints - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2.1-effectivelengths.rst.txt b/docs/_sources/3.15.2.1-effectivelengths.rst.txt deleted file mode 100644 index 23f96bd4..00000000 --- a/docs/_sources/3.15.2.1-effectivelengths.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2.2-boundaryconditions.rst.txt b/docs/_sources/3.15.2.2-boundaryconditions.rst.txt deleted file mode 100644 index 380269c7..00000000 --- a/docs/_sources/3.15.2.2-boundaryconditions.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Boundary Conditions** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2.3-memberlocalsectionreductions.rst.txt b/docs/_sources/3.15.2.3-memberlocalsectionreductions.rst.txt deleted file mode 100644 index 6bb91075..00000000 --- a/docs/_sources/3.15.2.3-memberlocalsectionreductions.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Member Local Section Reductions** -======================================= - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2.4-membershearpanels.rst.txt b/docs/_sources/3.15.2.4-membershearpanels.rst.txt deleted file mode 100644 index 28bba78f..00000000 --- a/docs/_sources/3.15.2.4-membershearpanels.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Member Shear Panels** -======================================= - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.15.2.5-memberrotationalrestraints.rst.txt b/docs/_sources/3.15.2.5-memberrotationalrestraints.rst.txt deleted file mode 100644 index b896a5b3..00000000 --- a/docs/_sources/3.15.2.5-memberrotationalrestraints.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Member Rotational Restraints** -======================================= - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16-timberdesign.rst.txt b/docs/_sources/3.16-timberdesign.rst.txt deleted file mode 100644 index 26f4cebc..00000000 --- a/docs/_sources/3.16-timberdesign.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Timber Design** -============================ - -#. :doc:`3.16.1-timberdesign` -#. :doc:`3.16.2-typesfortimberdesign` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.16.1-timberdesign - 3.16.2-typesfortimberdesign - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.1-timberdesign.rst.txt b/docs/_sources/3.16.1-timberdesign.rst.txt deleted file mode 100644 index 81a494b9..00000000 --- a/docs/_sources/3.16.1-timberdesign.rst.txt +++ /dev/null @@ -1,34 +0,0 @@ -**Timber Design** -============================ - -#. :doc:`3.16.1.1-ultimateconfigurations` -#. :doc:`3.16.1.2-serviceabilityconfigurations` -#. :doc:`3.16.1.3-fireresistancedesigns` -#. :doc:`3.16.1.4-seismicconfigurations` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.16.1.1-ultimateconfigurations - 3.16.1.2-serviceabilityconfigurations - 3.16.1.3-fireresistanceconfigurations - 3.16.1.4-seismicconfigurations - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.1.1-ultimateconfigurations.rst.txt b/docs/_sources/3.16.1.1-ultimateconfigurations.rst.txt deleted file mode 100644 index 0317f032..00000000 --- a/docs/_sources/3.16.1.1-ultimateconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Ultimate Configuration** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.1.2-serviceabilityconfigurations.rst.txt b/docs/_sources/3.16.1.2-serviceabilityconfigurations.rst.txt deleted file mode 100644 index 61592020..00000000 --- a/docs/_sources/3.16.1.2-serviceabilityconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Serviceability Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.1.3-fireresistanceconfigurations.rst.txt b/docs/_sources/3.16.1.3-fireresistanceconfigurations.rst.txt deleted file mode 100644 index 0d5bbf39..00000000 --- a/docs/_sources/3.16.1.3-fireresistanceconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Fire Resistance Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.1.4-seismicconfigurations.rst.txt b/docs/_sources/3.16.1.4-seismicconfigurations.rst.txt deleted file mode 100644 index 0f9fe4a2..00000000 --- a/docs/_sources/3.16.1.4-seismicconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Seismic Configuration** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.2-typesfortimberdesign.rst.txt b/docs/_sources/3.16.2-typesfortimberdesign.rst.txt deleted file mode 100644 index 03284ddd..00000000 --- a/docs/_sources/3.16.2-typesfortimberdesign.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -**Types for Timber Design** -============================ - -#. :doc:`3.16.2.1-effectivelengths` -#. :doc:`3.16.2.2-serviceclasses` -#. :doc:`3.16.2.3-memberlocalsectionreductions` -#. :doc:`3.16.2.4-memberrotaionalrestraints` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.16.2.1-effectivelengths - 3.16.2.2-serviceclasses - 3.16.2.3-memberlocalsectionreductions - 3.16.2.4-memberrotaionalrestraints - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.2.1-effectivelengths.rst.txt b/docs/_sources/3.16.2.1-effectivelengths.rst.txt deleted file mode 100644 index 5cefcb36..00000000 --- a/docs/_sources/3.16.2.1-effectivelengths.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.2.2-serviceclasses.rst.txt b/docs/_sources/3.16.2.2-serviceclasses.rst.txt deleted file mode 100644 index 18053f11..00000000 --- a/docs/_sources/3.16.2.2-serviceclasses.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Service Classes** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.2.3-memberlocalsectionreductions.rst.txt b/docs/_sources/3.16.2.3-memberlocalsectionreductions.rst.txt deleted file mode 100644 index bf3f3ff1..00000000 --- a/docs/_sources/3.16.2.3-memberlocalsectionreductions.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Member Local Section Reductions** -====================================== - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.16.2.4-memberrotaionalrestraints.rst.txt b/docs/_sources/3.16.2.4-memberrotaionalrestraints.rst.txt deleted file mode 100644 index 45c1abf6..00000000 --- a/docs/_sources/3.16.2.4-memberrotaionalrestraints.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Member Rotational Restraints** -================================== - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.17-masonrydesign.rst.txt b/docs/_sources/3.17-masonrydesign.rst.txt deleted file mode 100644 index 8a2c4fb0..00000000 --- a/docs/_sources/3.17-masonrydesign.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -**Masonry Design** -============================ - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18-aluminumdesign.rst.txt b/docs/_sources/3.18-aluminumdesign.rst.txt deleted file mode 100644 index 94a43433..00000000 --- a/docs/_sources/3.18-aluminumdesign.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -**Aluminum Design** -============================ - -#. :doc:`3.18.1-aluminumdesign` -#. :doc:`3.18.2-typesforaluminumdesign` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.18.1-aluminumdesign - 3.18.2-typesforaluminumdesign - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.1-aluminumdesign.rst.txt b/docs/_sources/3.18.1-aluminumdesign.rst.txt deleted file mode 100644 index b24b3162..00000000 --- a/docs/_sources/3.18.1-aluminumdesign.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -**Aluminum Design** -============================ - -#. :doc:`3.18.1.1-ultimateconfigurations` -#. :doc:`3.18.1.2-serviceabilityconfigurations` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.18.1.1-ultimateconfigurations - 3.18.1.2-serviceabilityconfigurations - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.1.1-ultimateconfigurations.rst.txt b/docs/_sources/3.18.1.1-ultimateconfigurations.rst.txt deleted file mode 100644 index 0317f032..00000000 --- a/docs/_sources/3.18.1.1-ultimateconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Ultimate Configuration** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.1.2-serviceabilityconfigurations.rst.txt b/docs/_sources/3.18.1.2-serviceabilityconfigurations.rst.txt deleted file mode 100644 index e962db98..00000000 --- a/docs/_sources/3.18.1.2-serviceabilityconfigurations.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Serviceability Configuration** -================================= - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.2-typesforaluminumdesign.rst.txt b/docs/_sources/3.18.2-typesforaluminumdesign.rst.txt deleted file mode 100644 index b9fdba04..00000000 --- a/docs/_sources/3.18.2-typesforaluminumdesign.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -**Types for Timber Design** -============================ - -#. :doc:`3.18.2.1-effectivelengths` -#. :doc:`3.18.2.3-memberlocalsectionreductions` -#. :doc:`3.18.2.3-membershearpanels` -#. :doc:`3.18.2.4-memberrotaionalrestraints` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.18.2.1-effectivelengths - 3.18.2.2-memberlocalsectionreductions - 3.18.2.3-membershearpanels - 3.18.2.4-memberrotaionalrestraints - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.2.1-effectivelengths.rst.txt b/docs/_sources/3.18.2.1-effectivelengths.rst.txt deleted file mode 100644 index b66e652a..00000000 --- a/docs/_sources/3.18.2.1-effectivelengths.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.2.2-memberlocalsectionreductions.rst.txt b/docs/_sources/3.18.2.2-memberlocalsectionreductions.rst.txt deleted file mode 100644 index b66e652a..00000000 --- a/docs/_sources/3.18.2.2-memberlocalsectionreductions.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.2.3-membershearpanels.rst.txt b/docs/_sources/3.18.2.3-membershearpanels.rst.txt deleted file mode 100644 index b66e652a..00000000 --- a/docs/_sources/3.18.2.3-membershearpanels.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.18.2.4-memberrotationalrestraints.rst.txt b/docs/_sources/3.18.2.4-memberrotationalrestraints.rst.txt deleted file mode 100644 index b66e652a..00000000 --- a/docs/_sources/3.18.2.4-memberrotationalrestraints.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -**Effective Lengths** -============================ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.19-steeljoints.rst.txt b/docs/_sources/3.19-steeljoints.rst.txt deleted file mode 100644 index 575bb22e..00000000 --- a/docs/_sources/3.19-steeljoints.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -**Steel Joints** -============================ - -#. :doc:`3.19.1-steeljointdesign` -#. :doc:`3.19.2-typesforsteeljoints` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.19.1-steeljointdesign - 3.19.2-typesforsteeljoints - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.19.1-steeljointdesign.rst.txt b/docs/_sources/3.19.1-steeljointdesign.rst.txt deleted file mode 100644 index 8970215c..00000000 --- a/docs/_sources/3.19.1-steeljointdesign.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -**Steel Joint Design** -============================ - -#. :doc:`3.19.1.1-ultimateconfiguration` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.19.1.1-ultimateconfiguration - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.19.1.1-ultimateconfiguration.rst.txt b/docs/_sources/3.19.1.1-ultimateconfiguration.rst.txt deleted file mode 100644 index 107c6722..00000000 --- a/docs/_sources/3.19.1.1-ultimateconfiguration.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Ultimate Configuration** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.19.2-typesforsteeljoints.rst.txt b/docs/_sources/3.19.2-typesforsteeljoints.rst.txt deleted file mode 100644 index b193f82a..00000000 --- a/docs/_sources/3.19.2-typesforsteeljoints.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -**Steel Joint Design** -============================ - -#. :doc:`3.19.2.1-steeljoint` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.19.2.1-steeljoint - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.19.2.1-steeljoint.rst.txt b/docs/_sources/3.19.2.1-steeljoint.rst.txt deleted file mode 100644 index 107c6722..00000000 --- a/docs/_sources/3.19.2.1-steeljoint.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -**Ultimate Configuration** -============================ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.2-structurestability.rst.txt b/docs/_sources/3.2-structurestability.rst.txt deleted file mode 100644 index a50daae3..00000000 --- a/docs/_sources/3.2-structurestability.rst.txt +++ /dev/null @@ -1,21 +0,0 @@ -**Structure Stability** -============================ - -#. :doc:`3.2.1-stabilityanalysissettings` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.2.1-stabilityanalysissettings - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.2.1-stabilityanalysissettings.rst.txt b/docs/_sources/3.2.1-stabilityanalysissettings.rst.txt deleted file mode 100644 index c8af44ed..00000000 --- a/docs/_sources/3.2.1-stabilityanalysissettings.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -**Stability Analysis Settings** -================================ - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.20-co2estimation.rst.txt b/docs/_sources/3.20-co2estimation.rst.txt deleted file mode 100644 index e112910a..00000000 --- a/docs/_sources/3.20-co2estimation.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -**Co2 Estimation** -============================ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.3-constructionstages.rst.txt b/docs/_sources/3.3-constructionstages.rst.txt deleted file mode 100644 index f0fe8998..00000000 --- a/docs/_sources/3.3-constructionstages.rst.txt +++ /dev/null @@ -1,21 +0,0 @@ -**Construction Stages** -============================ - -#. :doc:`3.3.1-constructionstages` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.3.1-constructionstages - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.3.1-constructionstages.rst.txt b/docs/_sources/3.3.1-constructionstages.rst.txt deleted file mode 100644 index 54c1fc40..00000000 --- a/docs/_sources/3.3.1-constructionstages.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -**Construction Stages** -============================ - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.4-timedependentanalysis.rst.txt b/docs/_sources/3.4-timedependentanalysis.rst.txt deleted file mode 100644 index 9cf58e4d..00000000 --- a/docs/_sources/3.4-timedependentanalysis.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Time Dependent Analysis** -============================ - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.5-formfinding.rst.txt b/docs/_sources/3.5-formfinding.rst.txt deleted file mode 100644 index 65bd6bcb..00000000 --- a/docs/_sources/3.5-formfinding.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Form Finding** -============================ - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.6-cuttingpatterns.rst.txt b/docs/_sources/3.6-cuttingpatterns.rst.txt deleted file mode 100644 index 61639c4a..00000000 --- a/docs/_sources/3.6-cuttingpatterns.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Cutting Patterns** -============================ - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.7-torsionalwarping.rst.txt b/docs/_sources/3.7-torsionalwarping.rst.txt deleted file mode 100644 index e892fb92..00000000 --- a/docs/_sources/3.7-torsionalwarping.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -**Torsional Warping** -============================ - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.8-modalanalysis.rst.txt b/docs/_sources/3.8-modalanalysis.rst.txt deleted file mode 100644 index 167a63c9..00000000 --- a/docs/_sources/3.8-modalanalysis.rst.txt +++ /dev/null @@ -1,22 +0,0 @@ -**Modal Analysis** -============================ - -#. :doc:`3.8.1-modalanalysissettings` - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.8.1-modalanalysissettings - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.8.1-modalanalysissettings.rst.txt b/docs/_sources/3.8.1-modalanalysissettings.rst.txt deleted file mode 100644 index d789b772..00000000 --- a/docs/_sources/3.8.1-modalanalysissettings.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -**Modal Analysis Settings** -============================ - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.9-dynamicloads.rst.txt b/docs/_sources/3.9-dynamicloads.rst.txt deleted file mode 100644 index 20ece750..00000000 --- a/docs/_sources/3.9-dynamicloads.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -**Dynamic Loads** -============================ - -#. :doc:`3.9.1-responsespectra` -#. :doc:`3.9.2-accelograms` - - -.. toctree:: - :maxdepth: 1 - :hidden: - - 3.9.1-responsespectra - 3.9.2-accelograms - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.9.1-responsespectra.rst.txt b/docs/_sources/3.9.1-responsespectra.rst.txt deleted file mode 100644 index a64faf7c..00000000 --- a/docs/_sources/3.9.1-responsespectra.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -**Response Spectra** -============================ - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/3.9.2-accelograms.rst.txt b/docs/_sources/3.9.2-accelograms.rst.txt deleted file mode 100644 index 52f16d21..00000000 --- a/docs/_sources/3.9.2-accelograms.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -**Accelograms** -============================ - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/_sources/4-examples.rst.txt b/docs/_sources/4-examples.rst.txt deleted file mode 100644 index 7dd0d612..00000000 --- a/docs/_sources/4-examples.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -========== - Example -========== - -#. :doc:`demo1.py` - - - -.. toctree:: - :maxdepth: 1 - :hidden: - - demo1.py diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt deleted file mode 100644 index c0f3a9b3..00000000 --- a/docs/_sources/index.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -Welcome to RFEM's documentation! -================================ - -.. note:: - This Python project is focused on opening RFEM 6 to all our customers, enabling them to interact with RFEM on much higher level. - - This project and comunity will create support for all your projects. The goal is to create easily expandable Python library communicating instructions to RFEM through WS. - -Architecture ------------- -.. image:: C:\\Users\\KaratasD\\Desktop\\RFEM_docs\\docs\\source\\images\\arch.png - :width: 400 - :alt: Architecture - :align: center - - -.. toctree:: - :maxdepth: 1 - :numbered: - :caption: Contents - - 1-installation - 2-globalcommands - 3-addoncommands - 4-examples - diff --git a/docs/_static/ajax-loader.gif b/docs/_static/ajax-loader.gif deleted file mode 100644 index 61faf8ca..00000000 Binary files a/docs/_static/ajax-loader.gif and /dev/null differ diff --git a/docs/_static/alabaster.css b/docs/_static/alabaster.css deleted file mode 100644 index 0eddaeb0..00000000 --- a/docs/_static/alabaster.css +++ /dev/null @@ -1,701 +0,0 @@ -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: Georgia, serif; - font-size: 17px; - background-color: #fff; - color: #000; - margin: 0; - padding: 0; -} - - -div.document { - width: 940px; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 220px; -} - -div.sphinxsidebar { - width: 220px; - font-size: 14px; - line-height: 1.5; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #fff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -div.body > .section { - text-align: left; -} - -div.footer { - width: 940px; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -p.caption { - font-family: inherit; - font-size: inherit; -} - - -div.relations { - display: none; -} - - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 0px; - text-align: center; -} - -div.sphinxsidebarwrapper h1.logo { - margin-top: -10px; - text-align: center; - margin-bottom: 5px; - text-align: left; -} - -div.sphinxsidebarwrapper h1.logo-name { - margin-top: 0px; -} - -div.sphinxsidebarwrapper p.blurb { - margin-top: 0; - font-style: normal; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: Georgia, serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar ul li.toctree-l1 > a { - font-size: 120%; -} - -div.sphinxsidebar ul li.toctree-l2 > a { - font-size: 110%; -} - -div.sphinxsidebar input { - border: 1px solid #CCC; - font-family: Georgia, serif; - font-size: 1em; -} - -div.sphinxsidebar hr { - border: none; - height: 1px; - color: #AAA; - background: #AAA; - - text-align: left; - margin-left: 0; - width: 50%; -} - -div.sphinxsidebar .badge { - border-bottom: none; -} - -div.sphinxsidebar .badge:hover { - border-bottom: none; -} - -/* To address an issue with donation coming after search */ -div.sphinxsidebar h3.donation { - margin-top: 10px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: Georgia, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #DDD; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #EAEAEA; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - margin: 20px 0px; - padding: 10px 30px; - background-color: #EEE; - border: 1px solid #CCC; -} - -div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fafafa; -} - -div.admonition p.admonition-title { - font-family: Georgia, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: #fff; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.warning { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.danger { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.error { - background-color: #FCC; - border: 1px solid #FAA; - -moz-box-shadow: 2px 2px 4px #D52C2C; - -webkit-box-shadow: 2px 2px 4px #D52C2C; - box-shadow: 2px 2px 4px #D52C2C; -} - -div.caution { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.attention { - background-color: #FCC; - border: 1px solid #FAA; -} - -div.important { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.note { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.tip { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.hint { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.seealso { - background-color: #EEE; - border: 1px solid #CCC; -} - -div.topic { - background-color: #EEE; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt, code { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -.hll { - background-color: #FFC; - margin: 0 -12px; - padding: 0 12px; - display: block; -} - -img.screenshot { -} - -tt.descname, tt.descclassname, code.descname, code.descclassname { - font-size: 0.95em; -} - -tt.descname, code.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #EEE; - -webkit-box-shadow: 2px 2px 4px #EEE; - box-shadow: 2px 2px 4px #EEE; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #EEE; - background: #FDFDFD; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.field-list p { - margin-bottom: 0.8em; -} - -/* Cloned from - * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 - */ -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -table.footnote td.label { - width: .1px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - /* Matches the 30px from the narrow-screen "li > ul" selector below */ - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #EEE; - padding: 7px 30px; - margin: 15px 0px; - line-height: 1.3em; -} - -div.viewcode-block:target { - background: #ffd; -} - -dl pre, blockquote pre, li pre { - margin-left: 0; - padding-left: 30px; -} - -tt, code { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, code.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid #fff; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -/* Don't put an underline on images */ -a.image-reference, a.image-reference:hover { - border-bottom: none; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt, a:hover code { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - li > ul { - /* Matches the 30px from the "ul, ol" selector above */ - margin-left: 30px; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: #fff; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: #FFF; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: #fff; - } - - div.sphinxsidebar a { - color: #AAA; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -/* Make nested-list/multi-paragraph items look better in Releases changelog - * pages. Without this, docutils' magical list fuckery causes inconsistent - * formatting between different release sub-lists. - */ -div#changelog > div.section > ul > li > p:only-child { - margin-bottom: 0; -} - -/* Hide fugly table cell borders in ..bibliography:: directive output */ -table.docutils.citation, table.docutils.citation td, table.docutils.citation th { - border: none; - /* Below needed in some edge cases; if not applied, bottom shadows appear */ - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - - -/* relbar */ - -.related { - line-height: 30px; - width: 100%; - font-size: 0.9rem; -} - -.related.top { - border-bottom: 1px solid #EEE; - margin-bottom: 20px; -} - -.related.bottom { - border-top: 1px solid #EEE; -} - -.related ul { - padding: 0; - margin: 0; - list-style: none; -} - -.related li { - display: inline; -} - -nav#rellinks { - float: right; -} - -nav#rellinks li+li:before { - content: "|"; -} - -nav#breadcrumbs li+li:before { - content: "\00BB"; -} - -/* Hide certain items when printing */ -@media print { - div.related { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index dc88b5a2..00000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,632 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox input[type="text"] { - width: 170px; -} - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - border: 0; - border-collapse: collapse; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dl { - margin-bottom: 15px; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, .highlighted { - background-color: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - margin-left: 0.5em; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -div.code-block-caption { - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -div.code-block-caption + div > div.highlight > pre { - margin-top: 0; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - padding: 1em 1em 0; -} - -div.literal-block-wrapper div.highlight { - margin: 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: relative; - left: 0px; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/_static/comment-bright.png b/docs/_static/comment-bright.png deleted file mode 100644 index 15e27edb..00000000 Binary files a/docs/_static/comment-bright.png and /dev/null differ diff --git a/docs/_static/comment-close.png b/docs/_static/comment-close.png deleted file mode 100644 index 4d91bcf5..00000000 Binary files a/docs/_static/comment-close.png and /dev/null differ diff --git a/docs/_static/comment.png b/docs/_static/comment.png deleted file mode 100644 index dfbc0cbd..00000000 Binary files a/docs/_static/comment.png and /dev/null differ diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css deleted file mode 100644 index e380325b..00000000 --- a/docs/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb60000..00000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e231..00000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f..00000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5b..00000000 Binary files a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/docs/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/docs/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9..00000000 Binary files a/docs/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804..00000000 Binary files a/docs/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f..00000000 Binary files a/docs/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043..00000000 Binary files a/docs/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc0..00000000 Binary files a/docs/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e..00000000 Binary files a/docs/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff..00000000 Binary files a/docs/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf98433..00000000 Binary files a/docs/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css deleted file mode 100644 index 8cd4f101..00000000 --- a/docs/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/_static/custom.css b/docs/_static/custom.css deleted file mode 100644 index 2a924f1d..00000000 --- a/docs/_static/custom.css +++ /dev/null @@ -1 +0,0 @@ -/* This file intentionally left blank. */ diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index 56549772..00000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,287 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s == 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node) { - if (node.nodeType == 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span = document.createElement("span"); - span.className = className; - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this); - }); - } - } - return this.each(function() { - highlight(this); - }); -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated == 'undefined') - return string; - return (typeof translated == 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated == 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) == 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this == '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keyup(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); \ No newline at end of file diff --git a/docs/_static/down-pressed.png b/docs/_static/down-pressed.png deleted file mode 100644 index 5756c8ca..00000000 Binary files a/docs/_static/down-pressed.png and /dev/null differ diff --git a/docs/_static/down.png b/docs/_static/down.png deleted file mode 100644 index 1b3bdad2..00000000 Binary files a/docs/_static/down.png and /dev/null differ diff --git a/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a410..00000000 Binary files a/docs/_static/file.png and /dev/null differ diff --git a/docs/_static/fonts/Inconsolata-Bold.ttf b/docs/_static/fonts/Inconsolata-Bold.ttf deleted file mode 100644 index 809c1f58..00000000 Binary files a/docs/_static/fonts/Inconsolata-Bold.ttf and /dev/null differ diff --git a/docs/_static/fonts/Inconsolata-Regular.ttf b/docs/_static/fonts/Inconsolata-Regular.ttf deleted file mode 100644 index fc981ce7..00000000 Binary files a/docs/_static/fonts/Inconsolata-Regular.ttf and /dev/null differ diff --git a/docs/_static/fonts/Inconsolata.ttf b/docs/_static/fonts/Inconsolata.ttf deleted file mode 100644 index 4b8a36d2..00000000 Binary files a/docs/_static/fonts/Inconsolata.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato-Bold.ttf b/docs/_static/fonts/Lato-Bold.ttf deleted file mode 100644 index 1d23c706..00000000 Binary files a/docs/_static/fonts/Lato-Bold.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato-Regular.ttf b/docs/_static/fonts/Lato-Regular.ttf deleted file mode 100644 index 0f3d0f83..00000000 Binary files a/docs/_static/fonts/Lato-Regular.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bold.eot b/docs/_static/fonts/Lato/lato-bold.eot deleted file mode 100644 index 3361183a..00000000 Binary files a/docs/_static/fonts/Lato/lato-bold.eot and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bold.ttf b/docs/_static/fonts/Lato/lato-bold.ttf deleted file mode 100644 index 29f691d5..00000000 Binary files a/docs/_static/fonts/Lato/lato-bold.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bold.woff b/docs/_static/fonts/Lato/lato-bold.woff deleted file mode 100644 index c6dff51f..00000000 Binary files a/docs/_static/fonts/Lato/lato-bold.woff and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bold.woff2 b/docs/_static/fonts/Lato/lato-bold.woff2 deleted file mode 100644 index bb195043..00000000 Binary files a/docs/_static/fonts/Lato/lato-bold.woff2 and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bolditalic.eot b/docs/_static/fonts/Lato/lato-bolditalic.eot deleted file mode 100644 index 3d415493..00000000 Binary files a/docs/_static/fonts/Lato/lato-bolditalic.eot and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bolditalic.ttf b/docs/_static/fonts/Lato/lato-bolditalic.ttf deleted file mode 100644 index f402040b..00000000 Binary files a/docs/_static/fonts/Lato/lato-bolditalic.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff b/docs/_static/fonts/Lato/lato-bolditalic.woff deleted file mode 100644 index 88ad05b9..00000000 Binary files a/docs/_static/fonts/Lato/lato-bolditalic.woff and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-bolditalic.woff2 b/docs/_static/fonts/Lato/lato-bolditalic.woff2 deleted file mode 100644 index c4e3d804..00000000 Binary files a/docs/_static/fonts/Lato/lato-bolditalic.woff2 and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-italic.eot b/docs/_static/fonts/Lato/lato-italic.eot deleted file mode 100644 index 3f826421..00000000 Binary files a/docs/_static/fonts/Lato/lato-italic.eot and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-italic.ttf b/docs/_static/fonts/Lato/lato-italic.ttf deleted file mode 100644 index b4bfc9b2..00000000 Binary files a/docs/_static/fonts/Lato/lato-italic.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-italic.woff b/docs/_static/fonts/Lato/lato-italic.woff deleted file mode 100644 index 76114bc0..00000000 Binary files a/docs/_static/fonts/Lato/lato-italic.woff and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-italic.woff2 b/docs/_static/fonts/Lato/lato-italic.woff2 deleted file mode 100644 index 3404f37e..00000000 Binary files a/docs/_static/fonts/Lato/lato-italic.woff2 and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-regular.eot b/docs/_static/fonts/Lato/lato-regular.eot deleted file mode 100644 index 11e3f2a5..00000000 Binary files a/docs/_static/fonts/Lato/lato-regular.eot and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-regular.ttf b/docs/_static/fonts/Lato/lato-regular.ttf deleted file mode 100644 index 74decd9e..00000000 Binary files a/docs/_static/fonts/Lato/lato-regular.ttf and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-regular.woff b/docs/_static/fonts/Lato/lato-regular.woff deleted file mode 100644 index ae1307ff..00000000 Binary files a/docs/_static/fonts/Lato/lato-regular.woff and /dev/null differ diff --git a/docs/_static/fonts/Lato/lato-regular.woff2 b/docs/_static/fonts/Lato/lato-regular.woff2 deleted file mode 100644 index 3bf98433..00000000 Binary files a/docs/_static/fonts/Lato/lato-regular.woff2 and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab-Bold.ttf b/docs/_static/fonts/RobotoSlab-Bold.ttf deleted file mode 100644 index df5d1df2..00000000 Binary files a/docs/_static/fonts/RobotoSlab-Bold.ttf and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab-Regular.ttf b/docs/_static/fonts/RobotoSlab-Regular.ttf deleted file mode 100644 index eb52a790..00000000 Binary files a/docs/_static/fonts/RobotoSlab-Regular.ttf and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot deleted file mode 100644 index 79dc8efe..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf deleted file mode 100644 index df5d1df2..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff deleted file mode 100644 index 6cb60000..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 deleted file mode 100644 index 7059e231..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot deleted file mode 100644 index 2f7ca78a..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf deleted file mode 100644 index eb52a790..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff deleted file mode 100644 index f815f63f..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff and /dev/null differ diff --git a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 deleted file mode 100644 index f2c76e5b..00000000 Binary files a/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 and /dev/null differ diff --git a/docs/_static/fonts/fontawesome-webfont.eot b/docs/_static/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/docs/_static/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/docs/_static/fonts/fontawesome-webfont.svg b/docs/_static/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/docs/_static/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_static/fonts/fontawesome-webfont.ttf b/docs/_static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/docs/_static/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/docs/_static/fonts/fontawesome-webfont.woff b/docs/_static/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/docs/_static/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/docs/_static/fonts/fontawesome-webfont.woff2 b/docs/_static/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/docs/_static/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/docs/_static/jquery-3.1.0.js b/docs/_static/jquery-3.1.0.js deleted file mode 100644 index f2fc2747..00000000 --- a/docs/_static/jquery-3.1.0.js +++ /dev/null @@ -1,10074 +0,0 @@ -/*eslint-disable no-unused-vars*/ -/*! - * jQuery JavaScript Library v3.1.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-07-07T21:44Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.1.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = jQuery.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.0 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-01-04 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - // Known :disabled false positives: - // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) - // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Check form elements and option elements for explicit disabling - return "label" in elem && elem.disabled === disabled || - "form" in elem && elem.disabled === disabled || - - // Check non-disabled form elements for fieldset[disabled] ancestors - "form" in elem && elem.disabled === false && ( - // Support: IE6-11+ - // Ancestry is covered for us - elem.isDisabled === disabled || - - // Otherwise, assume any non-