diff --git a/.github/workflows/auto_build_page.yaml b/.github/workflows/auto_build_page.yaml new file mode 100644 index 00000000..8a2d1d90 --- /dev/null +++ b/.github/workflows/auto_build_page.yaml @@ -0,0 +1,24 @@ +name: Auto Build Page +run-name: Running Job ${{ github.job }} +on: [push] +jobs: + Explore-GitHub-Actions: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Delete Previous docs + run: | + rm -rf docs && mkdir docs + - name: build docs + run: | + python3 -m pip install sphinx sphinx_rtd_theme && python3 -m sphinx -b html source/ docs + - name: add .nojekyll + run: | + touch docs/.nojekyll + - name: Commit Build + run: | + git add docs/. + git config --global user.name 'Friendly Builder Bot' + git config --global user.email 'builderbot' + git commit -am "Automated Build" + git push diff --git a/docs/.buildinfo b/docs/.buildinfo index d54e75d7..4d1a3466 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # 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: 79d6335a94e577cac2362e8a02b30e10 +config: 64e4293bb7889d8873522494d4958d0d tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/developer/build.doctree b/docs/.doctrees/developer/build.doctree new file mode 100644 index 00000000..33fd1d39 Binary files /dev/null and b/docs/.doctrees/developer/build.doctree differ diff --git a/docs/.doctrees/developer/contribute.doctree b/docs/.doctrees/developer/contribute.doctree new file mode 100644 index 00000000..1d1ab3c7 Binary files /dev/null and b/docs/.doctrees/developer/contribute.doctree differ diff --git a/docs/.doctrees/developer/extend.doctree b/docs/.doctrees/developer/extend.doctree new file mode 100644 index 00000000..2e827d11 Binary files /dev/null and b/docs/.doctrees/developer/extend.doctree differ diff --git a/docs/.doctrees/developer/issues.doctree b/docs/.doctrees/developer/issues.doctree new file mode 100644 index 00000000..2889b359 Binary files /dev/null and b/docs/.doctrees/developer/issues.doctree differ diff --git a/docs/doctrees/developer/license.doctree b/docs/.doctrees/developer/license.doctree similarity index 56% rename from docs/doctrees/developer/license.doctree rename to docs/.doctrees/developer/license.doctree index e28ac388..3021a1d9 100644 Binary files a/docs/doctrees/developer/license.doctree and b/docs/.doctrees/developer/license.doctree differ diff --git a/docs/.doctrees/developer/references.doctree b/docs/.doctrees/developer/references.doctree new file mode 100644 index 00000000..753e2fa0 Binary files /dev/null and b/docs/.doctrees/developer/references.doctree differ diff --git a/docs/.doctrees/developer/sourceCode.doctree b/docs/.doctrees/developer/sourceCode.doctree new file mode 100644 index 00000000..19f1601b Binary files /dev/null and b/docs/.doctrees/developer/sourceCode.doctree differ diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle new file mode 100644 index 00000000..efd9c852 Binary files /dev/null and b/docs/.doctrees/environment.pickle differ diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree new file mode 100644 index 00000000..6f0a46f3 Binary files /dev/null and b/docs/.doctrees/index.doctree differ diff --git a/docs/.doctrees/parallel/buildingMac.doctree b/docs/.doctrees/parallel/buildingMac.doctree new file mode 100644 index 00000000..c3a4f59a Binary files /dev/null and b/docs/.doctrees/parallel/buildingMac.doctree differ diff --git a/docs/.doctrees/parallel/parallel.doctree b/docs/.doctrees/parallel/parallel.doctree new file mode 100644 index 00000000..22858920 Binary files /dev/null and b/docs/.doctrees/parallel/parallel.doctree differ diff --git a/docs/.doctrees/user/examples/basicExamples.doctree b/docs/.doctrees/user/examples/basicExamples.doctree new file mode 100644 index 00000000..be401f2f Binary files /dev/null and b/docs/.doctrees/user/examples/basicExamples.doctree differ diff --git a/docs/.doctrees/user/examples/basicExamples/basicTruss.doctree b/docs/.doctrees/user/examples/basicExamples/basicTruss.doctree new file mode 100644 index 00000000..5e9f791a Binary files /dev/null and b/docs/.doctrees/user/examples/basicExamples/basicTruss.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples.doctree b/docs/.doctrees/user/examples/thermalExamples.doctree new file mode 100644 index 00000000..268f4bf8 Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples/thermalexample1.doctree b/docs/.doctrees/user/examples/thermalExamples/thermalexample1.doctree new file mode 100644 index 00000000..2227a916 Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples/thermalexample1.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples/thermalexample2.doctree b/docs/.doctrees/user/examples/thermalExamples/thermalexample2.doctree new file mode 100644 index 00000000..8681ddbe Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples/thermalexample2.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples/thermalexample3.doctree b/docs/.doctrees/user/examples/thermalExamples/thermalexample3.doctree new file mode 100644 index 00000000..5f3f647d Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples/thermalexample3.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples/thermalexample4.doctree b/docs/.doctrees/user/examples/thermalExamples/thermalexample4.doctree new file mode 100644 index 00000000..73e465d2 Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples/thermalexample4.doctree differ diff --git a/docs/.doctrees/user/examples/thermalExamples/thermalexample5.doctree b/docs/.doctrees/user/examples/thermalExamples/thermalexample5.doctree new file mode 100644 index 00000000..13f6da0d Binary files /dev/null and b/docs/.doctrees/user/examples/thermalExamples/thermalexample5.doctree differ diff --git a/docs/.doctrees/user/install.doctree b/docs/.doctrees/user/install.doctree new file mode 100644 index 00000000..064dc71a Binary files /dev/null and b/docs/.doctrees/user/install.doctree differ diff --git a/docs/.doctrees/user/interpreters.doctree b/docs/.doctrees/user/interpreters.doctree new file mode 100644 index 00000000..6bc571fc Binary files /dev/null and b/docs/.doctrees/user/interpreters.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm.doctree b/docs/.doctrees/user/manual/analysis/algorithm.doctree new file mode 100644 index 00000000..3732c5b7 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/BFGS.doctree b/docs/.doctrees/user/manual/analysis/algorithm/BFGS.doctree new file mode 100644 index 00000000..8cd38dcf Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/BFGS.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/Broyden.doctree b/docs/.doctrees/user/manual/analysis/algorithm/Broyden.doctree new file mode 100644 index 00000000..9bce9394 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/Broyden.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/KrylovNewton.doctree b/docs/.doctrees/user/manual/analysis/algorithm/KrylovNewton.doctree new file mode 100644 index 00000000..082d85c4 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/KrylovNewton.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/LinearAlgorithm.doctree b/docs/.doctrees/user/manual/analysis/algorithm/LinearAlgorithm.doctree new file mode 100644 index 00000000..ecb4a1ae Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/LinearAlgorithm.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/ModifiedNewton.doctree b/docs/.doctrees/user/manual/analysis/algorithm/ModifiedNewton.doctree new file mode 100644 index 00000000..28b6925c Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/ModifiedNewton.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/Newton.doctree b/docs/.doctrees/user/manual/analysis/algorithm/Newton.doctree new file mode 100644 index 00000000..00e64585 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/Newton.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/NewtonLineSearch.doctree b/docs/.doctrees/user/manual/analysis/algorithm/NewtonLineSearch.doctree new file mode 100644 index 00000000..d9679398 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/NewtonLineSearch.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/algorithm/SecantNewton.doctree b/docs/.doctrees/user/manual/analysis/algorithm/SecantNewton.doctree new file mode 100644 index 00000000..fc91e920 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/algorithm/SecantNewton.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/analysis.doctree b/docs/.doctrees/user/manual/analysis/analysis.doctree new file mode 100644 index 00000000..48bb7c20 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/analysis.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/analyze.doctree b/docs/.doctrees/user/manual/analysis/analyze.doctree new file mode 100644 index 00000000..a2de6443 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/analyze.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/constraint/PenaltyMethod.doctree b/docs/.doctrees/user/manual/analysis/constraint/PenaltyMethod.doctree new file mode 100644 index 00000000..42d9e508 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/constraint/PenaltyMethod.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/constraint/PlainConstraints.doctree b/docs/.doctrees/user/manual/analysis/constraint/PlainConstraints.doctree new file mode 100644 index 00000000..d3f6796a Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/constraint/PlainConstraints.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/constraint/TransformationMethod.doctree b/docs/.doctrees/user/manual/analysis/constraint/TransformationMethod.doctree new file mode 100644 index 00000000..a44433ce Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/constraint/TransformationMethod.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/constraint/lagrangeMultipliers.doctree b/docs/.doctrees/user/manual/analysis/constraint/lagrangeMultipliers.doctree new file mode 100644 index 00000000..062f60c0 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/constraint/lagrangeMultipliers.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/constraints.doctree b/docs/.doctrees/user/manual/analysis/constraints.doctree new file mode 100644 index 00000000..df750fe2 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/constraints.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/eigen.doctree b/docs/.doctrees/user/manual/analysis/eigen.doctree new file mode 100644 index 00000000..0336b2c7 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/eigen.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator.doctree b/docs/.doctrees/user/manual/analysis/integrator.doctree new file mode 100644 index 00000000..80c32895 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/ArcLength.doctree b/docs/.doctrees/user/manual/analysis/integrator/ArcLength.doctree new file mode 100644 index 00000000..24e256a9 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/ArcLength.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/CentralDifference.doctree b/docs/.doctrees/user/manual/analysis/integrator/CentralDifference.doctree new file mode 100644 index 00000000..d385445b Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/CentralDifference.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/DisplacementControl.doctree b/docs/.doctrees/user/manual/analysis/integrator/DisplacementControl.doctree new file mode 100644 index 00000000..b0b85c74 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/DisplacementControl.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/ExplicitDifference.doctree b/docs/.doctrees/user/manual/analysis/integrator/ExplicitDifference.doctree new file mode 100644 index 00000000..1cc7208e Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/ExplicitDifference.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/GeneralizedAlpha.doctree b/docs/.doctrees/user/manual/analysis/integrator/GeneralizedAlpha.doctree new file mode 100644 index 00000000..2c579574 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/GeneralizedAlpha.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/HHT.doctree b/docs/.doctrees/user/manual/analysis/integrator/HHT.doctree new file mode 100644 index 00000000..46ff010e Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/HHT.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/LoadControl.doctree b/docs/.doctrees/user/manual/analysis/integrator/LoadControl.doctree new file mode 100644 index 00000000..c0c824a3 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/LoadControl.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.doctree b/docs/.doctrees/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.doctree new file mode 100644 index 00000000..d9ce1ace Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/Newmark.doctree b/docs/.doctrees/user/manual/analysis/integrator/Newmark.doctree new file mode 100644 index 00000000..40a21b46 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/Newmark.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/TRBDF2.doctree b/docs/.doctrees/user/manual/analysis/integrator/TRBDF2.doctree new file mode 100644 index 00000000..646eb166 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/TRBDF2.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/integrator/gimmeMCK.doctree b/docs/.doctrees/user/manual/analysis/integrator/gimmeMCK.doctree new file mode 100644 index 00000000..54ea9af6 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/integrator/gimmeMCK.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/modalProperties.doctree b/docs/.doctrees/user/manual/analysis/modalProperties.doctree new file mode 100644 index 00000000..ed0a8a11 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/modalProperties.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/numberer.doctree b/docs/.doctrees/user/manual/analysis/numberer.doctree new file mode 100644 index 00000000..36fd7d4c Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/numberer.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/numberer/AMD.doctree b/docs/.doctrees/user/manual/analysis/numberer/AMD.doctree new file mode 100644 index 00000000..9ebe16a6 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/numberer/AMD.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/numberer/PlainNumberer.doctree b/docs/.doctrees/user/manual/analysis/numberer/PlainNumberer.doctree new file mode 100644 index 00000000..c3733d99 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/numberer/PlainNumberer.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/numberer/RCM.doctree b/docs/.doctrees/user/manual/analysis/numberer/RCM.doctree new file mode 100644 index 00000000..fdd4cd4e Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/numberer/RCM.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/responseSpectrumAnalysis.doctree b/docs/.doctrees/user/manual/analysis/responseSpectrumAnalysis.doctree new file mode 100644 index 00000000..7b9b4cab Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/responseSpectrumAnalysis.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system.doctree b/docs/.doctrees/user/manual/analysis/system.doctree new file mode 100644 index 00000000..a24427b0 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/BandGeneral.doctree b/docs/.doctrees/user/manual/analysis/system/BandGeneral.doctree new file mode 100644 index 00000000..9419a286 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/BandGeneral.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/BandSPD.doctree b/docs/.doctrees/user/manual/analysis/system/BandSPD.doctree new file mode 100644 index 00000000..447531b6 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/BandSPD.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/Cusp.doctree b/docs/.doctrees/user/manual/analysis/system/Cusp.doctree new file mode 100644 index 00000000..d7e4569a Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/Cusp.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/FullGeneral.doctree b/docs/.doctrees/user/manual/analysis/system/FullGeneral.doctree new file mode 100644 index 00000000..845ec0d8 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/FullGeneral.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/Mumps.doctree b/docs/.doctrees/user/manual/analysis/system/Mumps.doctree new file mode 100644 index 00000000..7346eb8a Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/Mumps.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/ProfileSPD.doctree b/docs/.doctrees/user/manual/analysis/system/ProfileSPD.doctree new file mode 100644 index 00000000..49c33cc5 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/ProfileSPD.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/SparseSYM.doctree b/docs/.doctrees/user/manual/analysis/system/SparseSYM.doctree new file mode 100644 index 00000000..e360c488 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/SparseSYM.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/SuperLU.doctree b/docs/.doctrees/user/manual/analysis/system/SuperLU.doctree new file mode 100644 index 00000000..22f272a5 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/SuperLU.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/system/Umfpack.doctree b/docs/.doctrees/user/manual/analysis/system/Umfpack.doctree new file mode 100644 index 00000000..0a175b8d Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/system/Umfpack.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test.doctree b/docs/.doctrees/user/manual/analysis/test.doctree new file mode 100644 index 00000000..38ae496f Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/FixedNumberIterations.doctree b/docs/.doctrees/user/manual/analysis/test/FixedNumberIterations.doctree new file mode 100644 index 00000000..b3c65c11 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/FixedNumberIterations.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/NormDispIncr.doctree b/docs/.doctrees/user/manual/analysis/test/NormDispIncr.doctree new file mode 100644 index 00000000..6623e84d Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/NormDispIncr.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/NormEnergyIncr.doctree b/docs/.doctrees/user/manual/analysis/test/NormEnergyIncr.doctree new file mode 100644 index 00000000..144336a3 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/NormEnergyIncr.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/NormUnbalance.doctree b/docs/.doctrees/user/manual/analysis/test/NormUnbalance.doctree new file mode 100644 index 00000000..1d8fd3a6 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/NormUnbalance.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/RelativeEnergyIncr.doctree b/docs/.doctrees/user/manual/analysis/test/RelativeEnergyIncr.doctree new file mode 100644 index 00000000..22532285 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/RelativeEnergyIncr.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/RelativeNormDispIncr.doctree b/docs/.doctrees/user/manual/analysis/test/RelativeNormDispIncr.doctree new file mode 100644 index 00000000..c465b8ac Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/RelativeNormDispIncr.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/RelativeNormUnbalance.doctree b/docs/.doctrees/user/manual/analysis/test/RelativeNormUnbalance.doctree new file mode 100644 index 00000000..5cf42a91 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/RelativeNormUnbalance.doctree differ diff --git a/docs/.doctrees/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.doctree b/docs/.doctrees/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.doctree new file mode 100644 index 00000000..dc76a5f3 Binary files /dev/null and b/docs/.doctrees/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.doctree differ diff --git a/docs/.doctrees/user/manual/analysisCommands.doctree b/docs/.doctrees/user/manual/analysisCommands.doctree new file mode 100644 index 00000000..ebba651e Binary files /dev/null and b/docs/.doctrees/user/manual/analysisCommands.doctree differ diff --git a/docs/.doctrees/user/manual/material/matTestCommands.doctree b/docs/.doctrees/user/manual/material/matTestCommands.doctree new file mode 100644 index 00000000..2f5b3a6f Binary files /dev/null and b/docs/.doctrees/user/manual/material/matTestCommands.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterial.doctree b/docs/.doctrees/user/manual/material/ndMaterial.doctree new file mode 100644 index 00000000..1b31ce3b Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterial.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/BoundingCamClay.doctree b/docs/.doctrees/user/manual/material/ndMaterials/BoundingCamClay.doctree new file mode 100644 index 00000000..69cf3c15 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/BoundingCamClay.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/DruckerPrager.doctree b/docs/.doctrees/user/manual/material/ndMaterials/DruckerPrager.doctree new file mode 100644 index 00000000..f3f9551e Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/DruckerPrager.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/ElasticIsotropic.doctree b/docs/.doctrees/user/manual/material/ndMaterials/ElasticIsotropic.doctree new file mode 100644 index 00000000..53b50f75 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/ElasticIsotropic.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/ElasticOrthotropic.doctree b/docs/.doctrees/user/manual/material/ndMaterials/ElasticOrthotropic.doctree new file mode 100644 index 00000000..04ff45b6 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/ElasticOrthotropic.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/J2CyclicBoundingSurface.doctree b/docs/.doctrees/user/manual/material/ndMaterials/J2CyclicBoundingSurface.doctree new file mode 100644 index 00000000..88962c60 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/J2CyclicBoundingSurface.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/J2Plasticity.doctree b/docs/.doctrees/user/manual/material/ndMaterials/J2Plasticity.doctree new file mode 100644 index 00000000..9ed3e3e0 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/J2Plasticity.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/ManzariDafalias.doctree b/docs/.doctrees/user/manual/material/ndMaterials/ManzariDafalias.doctree new file mode 100644 index 00000000..265d7010 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/ManzariDafalias.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/Orthotropic.doctree b/docs/.doctrees/user/manual/material/ndMaterials/Orthotropic.doctree new file mode 100644 index 00000000..bc6da75e Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/Orthotropic.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/PM4Sand.doctree b/docs/.doctrees/user/manual/material/ndMaterials/PM4Sand.doctree new file mode 100644 index 00000000..893ff97c Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/PM4Sand.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/PM4Silt.doctree b/docs/.doctrees/user/manual/material/ndMaterials/PM4Silt.doctree new file mode 100644 index 00000000..63227c3f Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/PM4Silt.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/PressureDependentMultiYield.doctree b/docs/.doctrees/user/manual/material/ndMaterials/PressureDependentMultiYield.doctree new file mode 100644 index 00000000..93fde4b6 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/PressureDependentMultiYield.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYield.doctree b/docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYield.doctree new file mode 100644 index 00000000..2a3b42d9 Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYield.doctree differ diff --git a/docs/doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree b/docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree similarity index 65% rename from docs/doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree rename to docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree index b5cff74f..a85c2626 100644 Binary files a/docs/doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree and b/docs/.doctrees/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.doctree differ diff --git a/docs/.doctrees/user/manual/material/ndMaterials/SAniSandMS.doctree b/docs/.doctrees/user/manual/material/ndMaterials/SAniSandMS.doctree new file mode 100644 index 00000000..853563ab Binary files /dev/null and b/docs/.doctrees/user/manual/material/ndMaterials/SAniSandMS.doctree differ diff --git a/docs/.doctrees/user/manual/material/section.doctree b/docs/.doctrees/user/manual/material/section.doctree new file mode 100644 index 00000000..d7a9acfe Binary files /dev/null and b/docs/.doctrees/user/manual/material/section.doctree differ diff --git a/docs/.doctrees/user/manual/material/section/ElasticSection.doctree b/docs/.doctrees/user/manual/material/section/ElasticSection.doctree new file mode 100644 index 00000000..ef52fa38 Binary files /dev/null and b/docs/.doctrees/user/manual/material/section/ElasticSection.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterial.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterial.doctree new file mode 100644 index 00000000..f2533847 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterial.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete01.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete01.doctree new file mode 100644 index 00000000..add1588d Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete01.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete02.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete02.doctree new file mode 100644 index 00000000..9c8f89de Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete02.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete04.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete04.doctree new file mode 100644 index 00000000..ace4dde5 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Concrete/Concrete04.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.doctree new file mode 100644 index 00000000..7835c77a Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/DowelType.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/DowelType.doctree new file mode 100644 index 00000000..648869b3 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/DowelType.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticAsym.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticAsym.doctree new file mode 100644 index 00000000..7f4fdea3 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticAsym.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticPoly.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticPoly.doctree new file mode 100644 index 00000000..24cf38d8 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticPoly.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.doctree new file mode 100644 index 00000000..d8736beb Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKBilin.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKBilin.doctree new file mode 100644 index 00000000..ec61a1a6 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKBilin.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.doctree new file mode 100644 index 00000000..99d598af Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPinching.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPinching.doctree new file mode 100644 index 00000000..10a4d6f9 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Other/IMKPinching.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.doctree new file mode 100644 index 00000000..5734a1b9 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.doctree new file mode 100644 index 00000000..26c210f8 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzLiq1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzLiq1.doctree new file mode 100644 index 00000000..c80262e4 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzLiq1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzSimple1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzSimple1.doctree new file mode 100644 index 00000000..970fff0b Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/QzSimple1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzLiq1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzLiq1.doctree new file mode 100644 index 00000000..08f0aecd Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzLiq1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzSimple1.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzSimple1.doctree new file mode 100644 index 00000000..de3118ef Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/PyTzQZ/TzSimple1.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.doctree new file mode 100644 index 00000000..6009bf65 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.doctree new file mode 100644 index 00000000..430df63f Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Hysteretic.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Hysteretic.doctree new file mode 100644 index 00000000..4783b020 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Hysteretic.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.doctree new file mode 100644 index 00000000..47c1d675 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.doctree new file mode 100644 index 00000000..5824ae93 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel01.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel01.doctree new file mode 100644 index 00000000..6942a11c Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel01.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel02.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel02.doctree new file mode 100644 index 00000000..c083ae68 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel02.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel4.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel4.doctree new file mode 100644 index 00000000..89091611 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/Steel4.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.doctree new file mode 100644 index 00000000..4afcaf17 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelMPF.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelMPF.doctree new file mode 100644 index 00000000..8f31e2d6 Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/SteelMPF.doctree differ diff --git a/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.doctree b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.doctree new file mode 100644 index 00000000..90a3407f Binary files /dev/null and b/docs/.doctrees/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.doctree differ diff --git a/docs/.doctrees/user/manual/materialCommands.doctree b/docs/.doctrees/user/manual/materialCommands.doctree new file mode 100644 index 00000000..0a552abc Binary files /dev/null and b/docs/.doctrees/user/manual/materialCommands.doctree differ diff --git a/docs/.doctrees/user/manual/misc/eleResponse.doctree b/docs/.doctrees/user/manual/misc/eleResponse.doctree new file mode 100644 index 00000000..35900480 Binary files /dev/null and b/docs/.doctrees/user/manual/misc/eleResponse.doctree differ diff --git a/docs/.doctrees/user/manual/misc/exit.doctree b/docs/.doctrees/user/manual/misc/exit.doctree new file mode 100644 index 00000000..ac585994 Binary files /dev/null and b/docs/.doctrees/user/manual/misc/exit.doctree differ diff --git a/docs/.doctrees/user/manual/misc/getCrdTransfTags.doctree b/docs/.doctrees/user/manual/misc/getCrdTransfTags.doctree new file mode 100644 index 00000000..ef6ebce5 Binary files /dev/null and b/docs/.doctrees/user/manual/misc/getCrdTransfTags.doctree differ diff --git a/docs/.doctrees/user/manual/misc/getTime.doctree b/docs/.doctrees/user/manual/misc/getTime.doctree new file mode 100644 index 00000000..7f7d4b1e Binary files /dev/null and b/docs/.doctrees/user/manual/misc/getTime.doctree differ diff --git a/docs/.doctrees/user/manual/misc/loadConst.doctree b/docs/.doctrees/user/manual/misc/loadConst.doctree new file mode 100644 index 00000000..ecbda778 Binary files /dev/null and b/docs/.doctrees/user/manual/misc/loadConst.doctree differ diff --git a/docs/.doctrees/user/manual/misc/nodeAccel.doctree b/docs/.doctrees/user/manual/misc/nodeAccel.doctree new file mode 100644 index 00000000..43603fbe Binary files /dev/null and b/docs/.doctrees/user/manual/misc/nodeAccel.doctree differ diff --git a/docs/.doctrees/user/manual/misc/nodeCoord.doctree b/docs/.doctrees/user/manual/misc/nodeCoord.doctree new file mode 100644 index 00000000..dc1ddc7c Binary files /dev/null and b/docs/.doctrees/user/manual/misc/nodeCoord.doctree differ diff --git a/docs/.doctrees/user/manual/misc/nodeDisp.doctree b/docs/.doctrees/user/manual/misc/nodeDisp.doctree new file mode 100644 index 00000000..229009b9 Binary files /dev/null and b/docs/.doctrees/user/manual/misc/nodeDisp.doctree differ diff --git a/docs/.doctrees/user/manual/misc/nodeVel.doctree b/docs/.doctrees/user/manual/misc/nodeVel.doctree new file mode 100644 index 00000000..517c853a Binary files /dev/null and b/docs/.doctrees/user/manual/misc/nodeVel.doctree differ diff --git a/docs/.doctrees/user/manual/misc/print.doctree b/docs/.doctrees/user/manual/misc/print.doctree new file mode 100644 index 00000000..a10f580b Binary files /dev/null and b/docs/.doctrees/user/manual/misc/print.doctree differ diff --git a/docs/.doctrees/user/manual/misc/wipe.doctree b/docs/.doctrees/user/manual/misc/wipe.doctree new file mode 100644 index 00000000..c126ec1a Binary files /dev/null and b/docs/.doctrees/user/manual/misc/wipe.doctree differ diff --git a/docs/.doctrees/user/manual/misc/wipeAnalysis.doctree b/docs/.doctrees/user/manual/misc/wipeAnalysis.doctree new file mode 100644 index 00000000..8f8bcade Binary files /dev/null and b/docs/.doctrees/user/manual/misc/wipeAnalysis.doctree differ diff --git a/docs/.doctrees/user/manual/miscCommands.doctree b/docs/.doctrees/user/manual/miscCommands.doctree new file mode 100644 index 00000000..35baf397 Binary files /dev/null and b/docs/.doctrees/user/manual/miscCommands.doctree differ diff --git a/docs/.doctrees/user/manual/model/damping.doctree b/docs/.doctrees/user/manual/model/damping.doctree new file mode 100644 index 00000000..0330773f Binary files /dev/null and b/docs/.doctrees/user/manual/model/damping.doctree differ diff --git a/docs/.doctrees/user/manual/model/damping/modalDamping.doctree b/docs/.doctrees/user/manual/model/damping/modalDamping.doctree new file mode 100644 index 00000000..5125cce0 Binary files /dev/null and b/docs/.doctrees/user/manual/model/damping/modalDamping.doctree differ diff --git a/docs/.doctrees/user/manual/model/damping/rayleigh.doctree b/docs/.doctrees/user/manual/model/damping/rayleigh.doctree new file mode 100644 index 00000000..8bb556b2 Binary files /dev/null and b/docs/.doctrees/user/manual/model/damping/rayleigh.doctree differ diff --git a/docs/.doctrees/user/manual/model/eleLoad.doctree b/docs/.doctrees/user/manual/model/eleLoad.doctree new file mode 100644 index 00000000..32e4f16b Binary files /dev/null and b/docs/.doctrees/user/manual/model/eleLoad.doctree differ diff --git a/docs/.doctrees/user/manual/model/element.doctree b/docs/.doctrees/user/manual/model/element.doctree new file mode 100644 index 00000000..9da37a57 Binary files /dev/null and b/docs/.doctrees/user/manual/model/element.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/ASDAbsorbingBoundary.doctree b/docs/.doctrees/user/manual/model/elements/ASDAbsorbingBoundary.doctree new file mode 100644 index 00000000..75b3681c Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/ASDAbsorbingBoundary.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/ASDEmbeddedNodeElement.doctree b/docs/.doctrees/user/manual/model/elements/ASDEmbeddedNodeElement.doctree new file mode 100644 index 00000000..0319a653 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/ASDEmbeddedNodeElement.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/ASDShellQ4.doctree b/docs/.doctrees/user/manual/model/elements/ASDShellQ4.doctree new file mode 100644 index 00000000..25c7454a Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/ASDShellQ4.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/FourNodeTetrahedron.doctree b/docs/.doctrees/user/manual/model/elements/FourNodeTetrahedron.doctree new file mode 100644 index 00000000..5b6fafe0 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/FourNodeTetrahedron.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/InertiaTruss.doctree b/docs/.doctrees/user/manual/model/elements/InertiaTruss.doctree new file mode 100644 index 00000000..994864ca Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/InertiaTruss.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/MVLEM_3D.doctree b/docs/.doctrees/user/manual/model/elements/MVLEM_3D.doctree new file mode 100644 index 00000000..d3aa1b5b Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/MVLEM_3D.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/Quad.doctree b/docs/.doctrees/user/manual/model/elements/Quad.doctree new file mode 100644 index 00000000..50c915b7 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/Quad.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/RockingBC.doctree b/docs/.doctrees/user/manual/model/elements/RockingBC.doctree new file mode 100644 index 00000000..62f78d0f Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/RockingBC.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/SFI_MVLEM_3D.doctree b/docs/.doctrees/user/manual/model/elements/SFI_MVLEM_3D.doctree new file mode 100644 index 00000000..5ea9c1cb Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/SFI_MVLEM_3D.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/SSPbrick.doctree b/docs/.doctrees/user/manual/model/elements/SSPbrick.doctree new file mode 100644 index 00000000..c9839ca6 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/SSPbrick.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/SSPquad.doctree b/docs/.doctrees/user/manual/model/elements/SSPquad.doctree new file mode 100644 index 00000000..7d3cff9f Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/SSPquad.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/TenNodeTetrahedron.doctree b/docs/.doctrees/user/manual/model/elements/TenNodeTetrahedron.doctree new file mode 100644 index 00000000..5f01fcdb Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/TenNodeTetrahedron.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/bbarBrick.doctree b/docs/.doctrees/user/manual/model/elements/bbarBrick.doctree new file mode 100644 index 00000000..694f7335 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/bbarBrick.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/bbarQuad.doctree b/docs/.doctrees/user/manual/model/elements/bbarQuad.doctree new file mode 100644 index 00000000..f804ef87 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/bbarQuad.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/brick.doctree b/docs/.doctrees/user/manual/model/elements/brick.doctree new file mode 100644 index 00000000..0141d66b Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/brick.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/dispBeamColumnAsym.doctree b/docs/.doctrees/user/manual/model/elements/dispBeamColumnAsym.doctree new file mode 100644 index 00000000..38da32ac Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/dispBeamColumnAsym.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/elasticBeamColumn.doctree b/docs/.doctrees/user/manual/model/elements/elasticBeamColumn.doctree new file mode 100644 index 00000000..4e421b92 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/elasticBeamColumn.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/gradientInelasticBeamColumn.doctree b/docs/.doctrees/user/manual/model/elements/gradientInelasticBeamColumn.doctree new file mode 100644 index 00000000..522f2463 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/gradientInelasticBeamColumn.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/mixedBeamColumnAsym.doctree b/docs/.doctrees/user/manual/model/elements/mixedBeamColumnAsym.doctree new file mode 100644 index 00000000..e2e66a24 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/mixedBeamColumnAsym.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/stdBrick.doctree b/docs/.doctrees/user/manual/model/elements/stdBrick.doctree new file mode 100644 index 00000000..b544efe3 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/stdBrick.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/zeroLength.doctree b/docs/.doctrees/user/manual/model/elements/zeroLength.doctree new file mode 100644 index 00000000..7d45b615 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/zeroLength.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/zeroLengthContactASDimplex.doctree b/docs/.doctrees/user/manual/model/elements/zeroLengthContactASDimplex.doctree new file mode 100644 index 00000000..30d70fd9 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/zeroLengthContactASDimplex.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/zeroLengthND.doctree b/docs/.doctrees/user/manual/model/elements/zeroLengthND.doctree new file mode 100644 index 00000000..abdf2f60 Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/zeroLengthND.doctree differ diff --git a/docs/.doctrees/user/manual/model/elements/zeroLengthSection.doctree b/docs/.doctrees/user/manual/model/elements/zeroLengthSection.doctree new file mode 100644 index 00000000..672e8e8a Binary files /dev/null and b/docs/.doctrees/user/manual/model/elements/zeroLengthSection.doctree differ diff --git a/docs/.doctrees/user/manual/model/load.doctree b/docs/.doctrees/user/manual/model/load.doctree new file mode 100644 index 00000000..14275628 Binary files /dev/null and b/docs/.doctrees/user/manual/model/load.doctree differ diff --git a/docs/.doctrees/user/manual/model/model.doctree b/docs/.doctrees/user/manual/model/model.doctree new file mode 100644 index 00000000..b818ca0c Binary files /dev/null and b/docs/.doctrees/user/manual/model/model.doctree differ diff --git a/docs/.doctrees/user/manual/model/mpConstraints.doctree b/docs/.doctrees/user/manual/model/mpConstraints.doctree new file mode 100644 index 00000000..55450823 Binary files /dev/null and b/docs/.doctrees/user/manual/model/mpConstraints.doctree differ diff --git a/docs/.doctrees/user/manual/model/mp_constraint/equalDOF.doctree b/docs/.doctrees/user/manual/model/mp_constraint/equalDOF.doctree new file mode 100644 index 00000000..e8487d2a Binary files /dev/null and b/docs/.doctrees/user/manual/model/mp_constraint/equalDOF.doctree differ diff --git a/docs/.doctrees/user/manual/model/mp_constraint/rigidDiaphragm.doctree b/docs/.doctrees/user/manual/model/mp_constraint/rigidDiaphragm.doctree new file mode 100644 index 00000000..5d39a033 Binary files /dev/null and b/docs/.doctrees/user/manual/model/mp_constraint/rigidDiaphragm.doctree differ diff --git a/docs/.doctrees/user/manual/model/mp_constraint/rigidLink.doctree b/docs/.doctrees/user/manual/model/mp_constraint/rigidLink.doctree new file mode 100644 index 00000000..71e8b0e2 Binary files /dev/null and b/docs/.doctrees/user/manual/model/mp_constraint/rigidLink.doctree differ diff --git a/docs/.doctrees/user/manual/model/node.doctree b/docs/.doctrees/user/manual/model/node.doctree new file mode 100644 index 00000000..cff5e2da Binary files /dev/null and b/docs/.doctrees/user/manual/model/node.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern.doctree b/docs/.doctrees/user/manual/model/pattern.doctree new file mode 100644 index 00000000..70d2bf6c Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/H5DRM.doctree b/docs/.doctrees/user/manual/model/pattern/H5DRM.doctree new file mode 100644 index 00000000..0f0cb432 Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/H5DRM.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/groundmotion/groundMotion.doctree b/docs/.doctrees/user/manual/model/pattern/groundmotion/groundMotion.doctree new file mode 100644 index 00000000..45f852b1 Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/groundmotion/groundMotion.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/groundmotion/imposedMotion.doctree b/docs/.doctrees/user/manual/model/pattern/groundmotion/imposedMotion.doctree new file mode 100644 index 00000000..04598bbd Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/groundmotion/imposedMotion.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/multiSupportPattern.doctree b/docs/.doctrees/user/manual/model/pattern/multiSupportPattern.doctree new file mode 100644 index 00000000..4c0b30d4 Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/multiSupportPattern.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/plainPattern.doctree b/docs/.doctrees/user/manual/model/pattern/plainPattern.doctree new file mode 100644 index 00000000..8559f2f1 Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/plainPattern.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/uniformExcitationPattern.doctree b/docs/.doctrees/user/manual/model/pattern/uniformExcitationPattern.doctree new file mode 100644 index 00000000..c527e785 Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/uniformExcitationPattern.doctree differ diff --git a/docs/.doctrees/user/manual/model/pattern/uniformPattern.doctree b/docs/.doctrees/user/manual/model/pattern/uniformPattern.doctree new file mode 100644 index 00000000..fb756a9e Binary files /dev/null and b/docs/.doctrees/user/manual/model/pattern/uniformPattern.doctree differ diff --git a/docs/.doctrees/user/manual/model/spConstraints.doctree b/docs/.doctrees/user/manual/model/spConstraints.doctree new file mode 100644 index 00000000..2d8aabd1 Binary files /dev/null and b/docs/.doctrees/user/manual/model/spConstraints.doctree differ diff --git a/docs/.doctrees/user/manual/model/sp_constraint/fix.doctree b/docs/.doctrees/user/manual/model/sp_constraint/fix.doctree new file mode 100644 index 00000000..69e717bd Binary files /dev/null and b/docs/.doctrees/user/manual/model/sp_constraint/fix.doctree differ diff --git a/docs/.doctrees/user/manual/model/sp_constraint/fixX.doctree b/docs/.doctrees/user/manual/model/sp_constraint/fixX.doctree new file mode 100644 index 00000000..df088573 Binary files /dev/null and b/docs/.doctrees/user/manual/model/sp_constraint/fixX.doctree differ diff --git a/docs/.doctrees/user/manual/model/sp_constraint/fixY.doctree b/docs/.doctrees/user/manual/model/sp_constraint/fixY.doctree new file mode 100644 index 00000000..3d6ce896 Binary files /dev/null and b/docs/.doctrees/user/manual/model/sp_constraint/fixY.doctree differ diff --git a/docs/.doctrees/user/manual/model/sp_constraint/fixZ.doctree b/docs/.doctrees/user/manual/model/sp_constraint/fixZ.doctree new file mode 100644 index 00000000..9f0f1633 Binary files /dev/null and b/docs/.doctrees/user/manual/model/sp_constraint/fixZ.doctree differ diff --git a/docs/.doctrees/user/manual/model/sp_constraint/sp.doctree b/docs/.doctrees/user/manual/model/sp_constraint/sp.doctree new file mode 100644 index 00000000..37468bc9 Binary files /dev/null and b/docs/.doctrees/user/manual/model/sp_constraint/sp.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeSeries.doctree b/docs/.doctrees/user/manual/model/timeSeries.doctree new file mode 100644 index 00000000..264925d1 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/constantTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/constantTimeSeries.doctree new file mode 100644 index 00000000..f2a25bab Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/constantTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/linearTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/linearTimeSeries.doctree new file mode 100644 index 00000000..78eb7549 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/linearTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/pathTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/pathTimeSeries.doctree new file mode 100644 index 00000000..b7f8ddbb Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/pathTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/pulseTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/pulseTimeSeries.doctree new file mode 100644 index 00000000..48e010e1 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/pulseTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/rectangularTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/rectangularTimeSeries.doctree new file mode 100644 index 00000000..c4837742 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/rectangularTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/triangleTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/triangleTimeSeries.doctree new file mode 100644 index 00000000..1a614c22 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/triangleTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/model/timeseries/trigTimeSeries.doctree b/docs/.doctrees/user/manual/model/timeseries/trigTimeSeries.doctree new file mode 100644 index 00000000..7e7428f8 Binary files /dev/null and b/docs/.doctrees/user/manual/model/timeseries/trigTimeSeries.doctree differ diff --git a/docs/.doctrees/user/manual/modelCommands.doctree b/docs/.doctrees/user/manual/modelCommands.doctree new file mode 100644 index 00000000..4b895c5d Binary files /dev/null and b/docs/.doctrees/user/manual/modelCommands.doctree differ diff --git a/docs/.doctrees/user/manual/output/ElementRecorder.doctree b/docs/.doctrees/user/manual/output/ElementRecorder.doctree new file mode 100644 index 00000000..cb603058 Binary files /dev/null and b/docs/.doctrees/user/manual/output/ElementRecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/EnvelopeNodeRecorder.doctree b/docs/.doctrees/user/manual/output/EnvelopeNodeRecorder.doctree new file mode 100644 index 00000000..131cfd0c Binary files /dev/null and b/docs/.doctrees/user/manual/output/EnvelopeNodeRecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/GmshRecorder.doctree b/docs/.doctrees/user/manual/output/GmshRecorder.doctree new file mode 100644 index 00000000..1905211d Binary files /dev/null and b/docs/.doctrees/user/manual/output/GmshRecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/MPCORecorder.doctree b/docs/.doctrees/user/manual/output/MPCORecorder.doctree new file mode 100644 index 00000000..914811b1 Binary files /dev/null and b/docs/.doctrees/user/manual/output/MPCORecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/NodeRecorder.doctree b/docs/.doctrees/user/manual/output/NodeRecorder.doctree new file mode 100644 index 00000000..71d67e7b Binary files /dev/null and b/docs/.doctrees/user/manual/output/NodeRecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/PVDRecorder.doctree b/docs/.doctrees/user/manual/output/PVDRecorder.doctree new file mode 100644 index 00000000..46a39407 Binary files /dev/null and b/docs/.doctrees/user/manual/output/PVDRecorder.doctree differ diff --git a/docs/.doctrees/user/manual/output/recorder.doctree b/docs/.doctrees/user/manual/output/recorder.doctree new file mode 100644 index 00000000..0836f539 Binary files /dev/null and b/docs/.doctrees/user/manual/output/recorder.doctree differ diff --git a/docs/.doctrees/user/manual/outputCommands.doctree b/docs/.doctrees/user/manual/outputCommands.doctree new file mode 100644 index 00000000..1359cf91 Binary files /dev/null and b/docs/.doctrees/user/manual/outputCommands.doctree differ diff --git a/docs/.doctrees/user/messageBoard.doctree b/docs/.doctrees/user/messageBoard.doctree new file mode 100644 index 00000000..576b48df Binary files /dev/null and b/docs/.doctrees/user/messageBoard.doctree differ diff --git a/docs/.doctrees/user/pythonInstall.doctree b/docs/.doctrees/user/pythonInstall.doctree new file mode 100644 index 00000000..bffbb14c Binary files /dev/null and b/docs/.doctrees/user/pythonInstall.doctree differ diff --git a/docs/.doctrees/user/tclInstall.doctree b/docs/.doctrees/user/tclInstall.doctree new file mode 100644 index 00000000..e4eb1aae Binary files /dev/null and b/docs/.doctrees/user/tclInstall.doctree differ diff --git a/docs/.doctrees/user/userExamples.doctree b/docs/.doctrees/user/userExamples.doctree new file mode 100644 index 00000000..d232934b Binary files /dev/null and b/docs/.doctrees/user/userExamples.doctree differ diff --git a/docs/.doctrees/user/userManual.doctree b/docs/.doctrees/user/userManual.doctree new file mode 100644 index 00000000..74184c9d Binary files /dev/null and b/docs/.doctrees/user/userManual.doctree differ diff --git a/docs/_downloads/6dd2bd954c1db847f392751f63edfbcb/responseSpectrumExample.py b/docs/_downloads/026d1d71fa35d09c00166c08c030f9d5/responseSpectrumAnalysisExample.py similarity index 64% rename from docs/_downloads/6dd2bd954c1db847f392751f63edfbcb/responseSpectrumExample.py rename to docs/_downloads/026d1d71fa35d09c00166c08c030f9d5/responseSpectrumAnalysisExample.py index 28fa0346..7a35c7f6 100644 --- a/docs/_downloads/6dd2bd954c1db847f392751f63edfbcb/responseSpectrumExample.py +++ b/docs/_downloads/026d1d71fa35d09c00166c08c030f9d5/responseSpectrumAnalysisExample.py @@ -7,32 +7,29 @@ model("basic","-ndm",3,"-ndf",6) # the response spectrum function -timeSeries( - "Path",1,"-time", - 0.0,0.06,0.1,0.12,0.18,0.24,0.3,0.36,0.4,0.42, - 0.48,0.54,0.6,0.66,0.72,0.78,0.84,0.9,0.96,1.02, - 1.08,1.14,1.2,1.26,1.32,1.38,1.44,1.5,1.56,1.62, - 1.68,1.74,1.8,1.86,1.92,1.98,2.04,2.1,2.16,2.22, - 2.28,2.34,2.4,2.46,2.52,2.58,2.64,2.7,2.76,2.82, - 2.88,2.94,3.0,3.06,3.12,3.18,3.24,3.3,3.36,3.42, - 3.48,3.54,3.6,3.66,3.72,3.78,3.84,3.9,3.96,4.02, - 4.08,4.14,4.2,4.26,4.32,4.38,4.44,4.5,4.56,4.62, - 4.68,4.74,4.8,4.86,4.92,4.98,5.04,5.1,5.16,5.22, - 5.28,5.34,5.4,5.46,5.52,5.58,5.64,5.7,5.76,5.82, - 5.88,5.94,6.0, - "-values", - 0.2,0.38,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.4762, - 0.4167,0.3704,0.3333,0.303,0.2778,0.2564,0.2381,0.2222,0.2083,0.1961, - 0.1852,0.1754,0.1667,0.1587,0.1515,0.1449,0.1389,0.1333,0.1282,0.1235, - 0.119,0.1149,0.1111,0.1075,0.1042,0.101,0.098,0.0952,0.0926,0.0901, - 0.0877,0.0855,0.0833,0.0813,0.0794,0.0775,0.0758,0.0741,0.0725,0.0709, - 0.0694,0.068,0.0667,0.0641,0.0616,0.0593,0.0572,0.0551,0.0531,0.0513, - 0.0495,0.0479,0.0463,0.0448,0.0434,0.042,0.0407,0.0394,0.0383,0.0371, - 0.036,0.035,0.034,0.0331,0.0322,0.0313,0.0304,0.0296,0.0289,0.0281, - 0.0274,0.0267,0.026,0.0254,0.0248,0.0242,0.0236,0.0231,0.0225,0.022, - 0.0215,0.021,0.0206,0.0201,0.0197,0.0193,0.0189,0.0185,0.0181,0.0177, - 0.0174,0.017,0.0167, - "-factor",9.806) +Tn = [0.0, 0.06, 0.1, 0.12, 0.18, 0.24, 0.3, 0.36, 0.4, 0.42, + 0.48, 0.54, 0.6, 0.66, 0.72, 0.78, 0.84, 0.9, 0.96, 1.02, + 1.08, 1.14, 1.2, 1.26, 1.32, 1.38, 1.44, 1.5, 1.56, 1.62, + 1.68, 1.74, 1.8, 1.86, 1.92, 1.98, 2.04, 2.1, 2.16, 2.22, + 2.28, 2.34, 2.4, 2.46, 2.52, 2.58, 2.64, 2.7, 2.76, 2.82, + 2.88, 2.94, 3.0, 3.06, 3.12, 3.18, 3.24, 3.3, 3.36, 3.42, + 3.48, 3.54, 3.6, 3.66, 3.72, 3.78, 3.84, 3.9, 3.96, 4.02, + 4.08, 4.14, 4.2, 4.26, 4.32, 4.38, 4.44, 4.5, 4.56, 4.62, + 4.68, 4.74, 4.8, 4.86, 4.92, 4.98, 5.04, 5.1, 5.16, 5.22, + 5.28, 5.34, 5.4, 5.46, 5.52, 5.58, 5.64, 5.7, 5.76, 5.82, + 5.88, 5.94, 6.0] +Sa = [1.9612, 3.72628, 4.903, 4.903, 4.903, 4.903, 4.903, 4.903, 4.903, 4.6696172, + 4.0861602, 3.6321424, 3.2683398, 2.971218, 2.7241068, 2.5142584, 2.3348086, 2.1788932, 2.0425898, 1.9229566, + 1.8160712, 1.7199724, 1.6346602, 1.5562122, 1.485609, 1.4208894, 1.3620534, 1.3071398, 1.2571292, 1.211041, + 1.166914, 1.1267094, 1.0894466, 1.054145, 1.0217852, 0.990406, 0.960988, 0.9335312, 0.9080356, 0.8835206, + 0.8599862, 0.838413, 0.8168398, 0.7972278, 0.7785964, 0.759965, 0.7432948, 0.7266246, 0.710935, 0.6952454, + 0.6805364, 0.666808, 0.6540602, 0.6285646, 0.6040496, 0.5814958, 0.5609032, 0.5403106, 0.5206986, 0.5030478, + 0.485397, 0.4697074, 0.4540178, 0.4393088, 0.4255804, 0.411852, 0.3991042, 0.3863564, 0.3755698, 0.3638026, + 0.353016, 0.34321, 0.333404, 0.3245786, 0.3157532, 0.3069278, 0.2981024, 0.2902576, 0.2833934, 0.2755486, + 0.2686844, 0.2618202, 0.254956, 0.2490724, 0.2431888, 0.2373052, 0.2314216, 0.2265186, 0.220635, 0.215732, + 0.210829, 0.205926, 0.2020036, 0.1971006, 0.1931782, 0.1892558, 0.1853334, 0.181411, 0.1774886, 0.1735662, + 0.1706244, 0.166702, 0.1637602] +timeSeries("Path",1,"-time", *Tn, "-values", *Sa) # a uniaxial material for transverse shear uniaxialMaterial("Elastic",2,938000000.0) @@ -165,12 +162,42 @@ def CQC(mu, lambdas, dmp, scalf): u += scalf[i]*mu[i] * scalf[j]*mu[j] * rho; return sqrt(u) +# ======================================================================== +# TEST 00 +# run a response spectrum analysis for each mode. +# then do modal combination in post-processing. +# Use Tn and Sa lists +# ======================================================================== +responseSpectrumAnalysis(direction, '-Tn', *Tn, '-Sa', *Sa) + +# read the My values [3rd column] for each step +# (1 for each mode, they are section forces associated to each modal displacement) +My = [] +with open(filename, 'r') as f: + lines = f.read().split('\n') + for line in lines: + if len(line) > 0: + tokens = line.split(' ') + My.append(float(tokens[2])) + +# post process the results doing the CQC modal combination for the My response (3rd column in section forces) +MyCQC = CQC(My, eigs, dmp, scalf) + +print('\n\nTEST 00:\nRun a Response Spectrum Analysis for all modes.') +print('Do CQC combination in post processing.') +print('Use Tn and Sa lists.\n') +print('{0: >10}{1: >15}'.format('Mode', 'My')) +for i in range(len(eigs)): + print('{0: >10}{1: >15f}'.format(i+1, My[i])) +print('{0: >10}{1: >15f}'.format('CQC', MyCQC)) + # ======================================================================== # TEST 01 # run a response spectrum analysis for each mode. # then do modal combination in post-processing. +# Use a Path timeSeries to store the Tn-Sa pairs # ======================================================================== -responseSpectrum(tsTag, direction) +responseSpectrumAnalysis(tsTag, direction) # read the My values [3rd column] for each step # (1 for each mode, they are section forces associated to each modal displacement) @@ -185,7 +212,9 @@ def CQC(mu, lambdas, dmp, scalf): # post process the results doing the CQC modal combination for the My response (3rd column in section forces) MyCQC = CQC(My, eigs, dmp, scalf) -print('\n\nTEST 01:\nRun a Response Spectrum Analysis for each mode.\nDo CQC combination in post processing.\n') +print('\n\nTEST 01:\nRun a Response Spectrum Analysis for all modes.') +print('Do CQC combination in post processing.') +print('Use a Path timeSeries to store Tn-Sa pairs.\n') print('{0: >10}{1: >15}'.format('Mode', 'My')) for i in range(len(eigs)): print('{0: >10}{1: >15f}'.format(i+1, My[i])) @@ -200,14 +229,15 @@ def CQC(mu, lambdas, dmp, scalf): remove('recorder', 0) My = [] for i in range(len(eigs)): - responseSpectrum(tsTag, direction, '-mode', i+1) + responseSpectrumAnalysis(direction, '-Tn', *Tn, '-Sa', *Sa, '-mode', i+1) force = eleResponse(1, 'section', '1', 'force') My.append(force[2]) # post process the results doing the CQC modal combination for the My response (3rd column in section forces) MyCQC = CQC(My, eigs, dmp, scalf) -print('\n\nTEST 01:\nRun a Response Spectrum Analysis mode-by-mode.\nGrab results during the loop.\nDo CQC combination in post processing.\n') +print('\n\nTEST 02:\nRun a Response Spectrum Analysis mode-by-mode.') +print('Grab results during the loop and do CQC combination with them.\n') print('{0: >10}{1: >15}'.format('Mode', 'My')) for i in range(len(eigs)): print('{0: >10}{1: >15f}'.format(i+1, My[i])) diff --git a/docs/_downloads/05d976828e77d17a7bcc021bd080da91/TZQZLiqExample.py b/docs/_downloads/253b345b375cbb60bd74f0cc386c6700/TZQZLiqExample.py similarity index 100% rename from docs/_downloads/05d976828e77d17a7bcc021bd080da91/TZQZLiqExample.py rename to docs/_downloads/253b345b375cbb60bd74f0cc386c6700/TZQZLiqExample.py diff --git a/docs/_downloads/4df115ddbd69660f364fdfdaa1e1fe74/QZLiqExample.py b/docs/_downloads/2fa336c31cec5e8377d2a91d0ebcec89/QZLiqExample.py similarity index 100% rename from docs/_downloads/4df115ddbd69660f364fdfdaa1e1fe74/QZLiqExample.py rename to docs/_downloads/2fa336c31cec5e8377d2a91d0ebcec89/QZLiqExample.py diff --git a/docs/_downloads/46d0d7862f489f7cf18c7e9bc040af25/NodalTemperatureFiles.zip b/docs/_downloads/46d0d7862f489f7cf18c7e9bc040af25/NodalTemperatureFiles.zip deleted file mode 100644 index 9992da48..00000000 Binary files a/docs/_downloads/46d0d7862f489f7cf18c7e9bc040af25/NodalTemperatureFiles.zip and /dev/null differ diff --git a/docs/_downloads/d3560034c7e9d55e9df5ef267165eec7/TZLiqExample_2.py b/docs/_downloads/62c617a68c8662a77f0249a9364176d9/TZLiqExample_2.py similarity index 100% rename from docs/_downloads/d3560034c7e9d55e9df5ef267165eec7/TZLiqExample_2.py rename to docs/_downloads/62c617a68c8662a77f0249a9364176d9/TZLiqExample_2.py diff --git a/docs/_downloads/2325156de9f2d98acfed7d8873a10d82/responseSpectrumExample.tcl b/docs/_downloads/e7fd5ad8d78254a3e057f2cb33ab6428/responseSpectrumAnalysisExample.tcl similarity index 65% rename from docs/_downloads/2325156de9f2d98acfed7d8873a10d82/responseSpectrumExample.tcl rename to docs/_downloads/e7fd5ad8d78254a3e057f2cb33ab6428/responseSpectrumAnalysisExample.tcl index af1a0f05..7008dc34 100644 --- a/docs/_downloads/2325156de9f2d98acfed7d8873a10d82/responseSpectrumExample.tcl +++ b/docs/_downloads/e7fd5ad8d78254a3e057f2cb33ab6428/responseSpectrumAnalysisExample.tcl @@ -4,29 +4,29 @@ wipe model basic -ndm 3 -ndf 6 # the response spectrum function -set timeSeries_list_of_times_1 {0.0 0.06 0.1 0.12 0.18 0.24 0.3 0.36 0.4 0.42 \ - 0.48 0.54 0.6 0.66 0.72 0.78 0.84 0.9 0.96 1.02 \ - 1.08 1.14 1.2 1.26 1.32 1.38 1.44 1.5 1.56 1.62 \ - 1.68 1.74 1.8 1.86 1.92 1.98 2.04 2.1 2.16 2.22 \ - 2.28 2.34 2.4 2.46 2.52 2.58 2.64 2.7 2.76 2.82 \ - 2.88 2.94 3.0 3.06 3.12 3.18 3.24 3.3 3.36 3.42 \ - 3.48 3.54 3.6 3.66 3.72 3.78 3.84 3.9 3.96 4.02 \ - 4.08 4.14 4.2 4.26 4.32 4.38 4.44 4.5 4.56 4.62 \ - 4.68 4.74 4.8 4.86 4.92 4.98 5.04 5.1 5.16 5.22 \ - 5.28 5.34 5.4 5.46 5.52 5.58 5.64 5.7 5.76 5.82 \ - 5.88 5.94 6.0} -set timeSeries_list_of_values_1 {0.2 0.38 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.4762 \ - 0.4167 0.3704 0.3333 0.303 0.2778 0.2564 0.2381 0.2222 0.2083 0.1961 \ - 0.1852 0.1754 0.1667 0.1587 0.1515 0.1449 0.1389 0.1333 0.1282 0.1235 \ - 0.119 0.1149 0.1111 0.1075 0.1042 0.101 0.098 0.0952 0.0926 0.0901 \ - 0.0877 0.0855 0.0833 0.0813 0.0794 0.0775 0.0758 0.0741 0.0725 0.0709 \ - 0.0694 0.068 0.0667 0.0641 0.0616 0.0593 0.0572 0.0551 0.0531 0.0513 \ - 0.0495 0.0479 0.0463 0.0448 0.0434 0.042 0.0407 0.0394 0.0383 0.0371 \ - 0.036 0.035 0.034 0.0331 0.0322 0.0313 0.0304 0.0296 0.0289 0.0281 \ - 0.0274 0.0267 0.026 0.0254 0.0248 0.0242 0.0236 0.0231 0.0225 0.022 \ - 0.0215 0.021 0.0206 0.0201 0.0197 0.0193 0.0189 0.0185 0.0181 0.0177 \ - 0.0174 0.017 0.0167} -timeSeries Path 1 -time $timeSeries_list_of_times_1 -values $timeSeries_list_of_values_1 -factor 9.806 +set Tn {0.0 0.06 0.1 0.12 0.18 0.24 0.3 0.36 0.4 0.42 \ + 0.48 0.54 0.6 0.66 0.72 0.78 0.84 0.9 0.96 1.02 \ + 1.08 1.14 1.2 1.26 1.32 1.38 1.44 1.5 1.56 1.62 \ + 1.68 1.74 1.8 1.86 1.92 1.98 2.04 2.1 2.16 2.22 \ + 2.28 2.34 2.4 2.46 2.52 2.58 2.64 2.7 2.76 2.82 \ + 2.88 2.94 3.0 3.06 3.12 3.18 3.24 3.3 3.36 3.42 \ + 3.48 3.54 3.6 3.66 3.72 3.78 3.84 3.9 3.96 4.02 \ + 4.08 4.14 4.2 4.26 4.32 4.38 4.44 4.5 4.56 4.62 \ + 4.68 4.74 4.8 4.86 4.92 4.98 5.04 5.1 5.16 5.22 \ + 5.28 5.34 5.4 5.46 5.52 5.58 5.64 5.7 5.76 5.82 \ + 5.88 5.94 6.0} +set Sa {1.9612 3.72628 4.903 4.903 4.903 4.903 4.903 4.903 4.903 4.6696172 \ + 4.0861602 3.6321424 3.2683398 2.971218 2.7241068 2.5142584 2.3348086 2.1788932 2.0425898 1.9229566 \ + 1.8160712 1.7199724 1.6346602 1.5562122 1.485609 1.4208894 1.3620534 1.3071398 1.2571292 1.211041 \ + 1.166914 1.1267094 1.0894466 1.054145 1.0217852 0.990406 0.960988 0.9335312 0.9080356 0.8835206 \ + 0.8599862 0.838413 0.8168398 0.7972278 0.7785964 0.759965 0.7432948 0.7266246 0.710935 0.6952454 \ + 0.6805364 0.666808 0.6540602 0.6285646 0.6040496 0.5814958 0.5609032 0.5403106 0.5206986 0.5030478 \ + 0.485397 0.4697074 0.4540178 0.4393088 0.4255804 0.411852 0.3991042 0.3863564 0.3755698 0.3638026 \ + 0.353016 0.34321 0.333404 0.3245786 0.3157532 0.3069278 0.2981024 0.2902576 0.2833934 0.2755486 \ + 0.2686844 0.2618202 0.254956 0.2490724 0.2431888 0.2373052 0.2314216 0.2265186 0.220635 0.215732 \ + 0.210829 0.205926 0.2020036 0.1971006 0.1931782 0.1892558 0.1853334 0.181411 0.1774886 0.1735662 \ + 0.1706244 0.166702 0.1637602} +timeSeries Path 1 -time $Tn -values $Sa # a uniaxial material for transverse shear uniaxialMaterial Elastic 2 938000000.0 @@ -161,12 +161,46 @@ proc CQC {mu lambdas dmp scalf} { return [expr sqrt($u)] } +# ======================================================================== +# TEST 00 +# run a response spectrum analysis for each mode. +# then do modal combination in post-processing. +# Use Tn and Sa lists +# ======================================================================== +responseSpectrumAnalysis $direction -Tn $Tn -Sa $Sa + +# read the My values [3rd column] for each step +# (1 for each mode, they are section forces associated to each modal displacement) +set My {} +set f [open $filename "r"] +set lines [split [read $f] "\n"] +foreach line $lines { + if {[llength $line] > 0} { + set tokens [split $line " "] + lappend My [lindex $tokens 2] + } +} +close $f + +# post process the results doing the CQC modal combination for the My response (3rd column in section forces) +set MyCQC [CQC $My $eigs $dmp $scalf] + +puts "\n\nTEST 00:\nRun a Response Spectrum Analysis for all modes." +puts "Do CQC combination in post processing." +puts "Use Tn and Sa lists.\n" +puts [format "%10s %15s" "Mode" "My"] +for {set i 0} {$i < [llength $eigs]} {incr i} { + puts [format "%10g %15f" [expr $i+1] [lindex $My $i]] +} +puts [format "%10s %15f" "CQC" $MyCQC] + # ======================================================================== # TEST 01 # run a response spectrum analysis for each mode. # then do modal combination in post-processing. +# Use a Path timeSeries to store the Tn-Sa pairs # ======================================================================== -responseSpectrum $tsTag $direction +responseSpectrumAnalysis $tsTag $direction # read the My values [3rd column] for each step # (1 for each mode, they are section forces associated to each modal displacement) @@ -184,7 +218,9 @@ close $f # post process the results doing the CQC modal combination for the My response (3rd column in section forces) set MyCQC [CQC $My $eigs $dmp $scalf] -puts "\n\nTEST 01:\nRun a Response Spectrum Analysis for each mode.\nDo CQC combination in post processing.\n" +puts "\n\nTEST 01:\nRun a Response Spectrum Analysis for all modes." +puts "Do CQC combination in post processing." +puts "Use a Path timeSeries to store Tn-Sa pairs.\n" puts [format "%10s %15s" "Mode" "My"] for {set i 0} {$i < [llength $eigs]} {incr i} { puts [format "%10g %15f" [expr $i+1] [lindex $My $i]] @@ -200,14 +236,15 @@ puts [format "%10s %15f" "CQC" $MyCQC] remove recorder 0 set My {} for {set i 0} {$i < [llength $eigs]} {incr i} { - responseSpectrum $tsTag $direction -mode [expr $i+1] + responseSpectrumAnalysis $direction -Tn $Tn -Sa $Sa -mode [expr $i+1] set force [eleResponse 1 section 1 force] lappend My [lindex $force 2] } # post process the results doing the CQC modal combination for the My response (3rd column in section forces) set MyCQC [CQC $My $eigs $dmp $scalf] -puts "\n\nTEST 01:\nRun a Response Spectrum Analysis mode-by-mode.\nGrab results during the loop.\nDo CQC combination in post processing.\n" +puts "\n\nTEST 02:\nRun a Response Spectrum Analysis mode-by-mode." +puts "Grab results during the loop and do CQC combination with them.\n" puts [format "%10s %15s" "Mode" "My"] for {set i 0} {$i < [llength $eigs]} {incr i} { puts [format "%10g %15f" [expr $i+1] [lindex $My $i]] diff --git a/docs/_downloads/4a15c2b553255c7be7c536269946767e/TZLiqExample_1.py b/docs/_downloads/ffb2a8189538a29c7841f8b1649cfb13/TZLiqExample_1.py similarity index 100% rename from docs/_downloads/4a15c2b553255c7be7c536269946767e/TZLiqExample_1.py rename to docs/_downloads/ffb2a8189538a29c7841f8b1649cfb13/TZLiqExample_1.py diff --git a/docs/_images/ASDAbsorbingBoundary_Mesh.png b/docs/_images/ASDAbsorbingBoundary_Mesh.png deleted file mode 100644 index a5805acc..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_Mesh.png and /dev/null differ diff --git a/docs/_images/ASDAbsorbingBoundary_Theory.png b/docs/_images/ASDAbsorbingBoundary_Theory.png deleted file mode 100644 index 5ea23f32..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_Theory.png and /dev/null differ diff --git a/docs/_images/ASDAbsorbingBoundary_Video.gif b/docs/_images/ASDAbsorbingBoundary_Video.gif deleted file mode 100644 index 0f12dd48..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_Video.gif and /dev/null differ diff --git a/docs/_images/ASDAbsorbingBoundary_btype.png b/docs/_images/ASDAbsorbingBoundary_btype.png deleted file mode 100644 index e49533e4..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_btype.png and /dev/null differ diff --git a/docs/_images/ASDAbsorbingBoundary_distortion.png b/docs/_images/ASDAbsorbingBoundary_distortion.png deleted file mode 100644 index 45c96625..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_distortion.png and /dev/null differ diff --git a/docs/_images/ASDAbsorbingBoundary_result.png b/docs/_images/ASDAbsorbingBoundary_result.png deleted file mode 100644 index 11910994..00000000 Binary files a/docs/_images/ASDAbsorbingBoundary_result.png and /dev/null differ diff --git a/docs/_images/Concrete04A.png b/docs/_images/Concrete04A.png new file mode 100644 index 00000000..96c4194c Binary files /dev/null and b/docs/_images/Concrete04A.png differ diff --git a/docs/_images/Concrete0B.png b/docs/_images/Concrete04B.png similarity index 100% rename from docs/_images/Concrete0B.png rename to docs/_images/Concrete04B.png diff --git a/docs/_images/ConstantTimeSeries.gif b/docs/_images/ConstantTimeSeries.gif deleted file mode 100644 index 84966d62..00000000 Binary files a/docs/_images/ConstantTimeSeries.gif and /dev/null differ diff --git a/docs/_images/Example1_output.png b/docs/_images/Example1_Output.png similarity index 100% rename from docs/_images/Example1_output.png rename to docs/_images/Example1_Output.png diff --git a/docs/_images/Example4_fireCurve.png b/docs/_images/Example4_fireCurve.png deleted file mode 100644 index a6926628..00000000 Binary files a/docs/_images/Example4_fireCurve.png and /dev/null differ diff --git a/docs/_images/FourNodeTetrahedron.png b/docs/_images/FourNodeTetrahedron.png deleted file mode 100644 index 130fbd62..00000000 Binary files a/docs/_images/FourNodeTetrahedron.png and /dev/null differ diff --git a/docs/_images/IMKBilin_sample_response.jpg b/docs/_images/IMKBilin_sample_response.jpg new file mode 100644 index 00000000..1b30ac8b Binary files /dev/null and b/docs/_images/IMKBilin_sample_response.jpg differ diff --git a/docs/_images/IMKPeakOriented_sample_responses_validations.jpg b/docs/_images/IMKPeakOriented_sample_responses_validations.jpg new file mode 100644 index 00000000..98127fc6 Binary files /dev/null and b/docs/_images/IMKPeakOriented_sample_responses_validations.jpg differ diff --git a/docs/_images/IMKPinching_sample_responses_validations.jpg b/docs/_images/IMKPinching_sample_responses_validations.jpg new file mode 100644 index 00000000..a0d110a2 Binary files /dev/null and b/docs/_images/IMKPinching_sample_responses_validations.jpg differ diff --git a/docs/_images/LinearTimeSeries.gif b/docs/_images/LinearTimeSeries.gif deleted file mode 100644 index fa503cb5..00000000 Binary files a/docs/_images/LinearTimeSeries.gif and /dev/null differ diff --git a/docs/_images/MVLEM_3D_TUB_results.jpg b/docs/_images/MVLEM_3D_TUB_results.JPG similarity index 100% rename from docs/_images/MVLEM_3D_TUB_results.jpg rename to docs/_images/MVLEM_3D_TUB_results.JPG diff --git a/docs/_images/PulseTimeSeries.png b/docs/_images/PulseTimeSeries.png deleted file mode 100644 index bf9f75c5..00000000 Binary files a/docs/_images/PulseTimeSeries.png and /dev/null differ diff --git a/docs/_images/RectangularTimeSeries.gif b/docs/_images/RectangularTimeSeries.gif deleted file mode 100644 index 69af83dc..00000000 Binary files a/docs/_images/RectangularTimeSeries.gif and /dev/null differ diff --git a/docs/_images/SFI_MVLEM_3D_TUC_model.jpg b/docs/_images/SFI_MVLEM_3D_TUC_model.jpg deleted file mode 100644 index 1896544d..00000000 Binary files a/docs/_images/SFI_MVLEM_3D_TUC_model.jpg and /dev/null differ diff --git a/docs/_images/SFI_MVLEM_3D_TUC_results_LD.jpg b/docs/_images/SFI_MVLEM_3D_TUC_results_LD.jpg deleted file mode 100644 index 02dcb13c..00000000 Binary files a/docs/_images/SFI_MVLEM_3D_TUC_results_LD.jpg and /dev/null differ diff --git a/docs/_images/SFI_MVLEM_3D_TUC_results_strain_stress.jpg b/docs/_images/SFI_MVLEM_3D_TUC_results_strain_stress.jpg deleted file mode 100644 index ef9d8897..00000000 Binary files a/docs/_images/SFI_MVLEM_3D_TUC_results_strain_stress.jpg and /dev/null differ diff --git a/docs/_images/SFI_MVLEM_3D_formulation.jpg b/docs/_images/SFI_MVLEM_3D_formulation.jpg deleted file mode 100644 index 565f01c0..00000000 Binary files a/docs/_images/SFI_MVLEM_3D_formulation.jpg and /dev/null differ diff --git a/docs/_images/TenNodeTetrahedron.png b/docs/_images/TenNodeTetrahedron.png deleted file mode 100644 index 11e9da09..00000000 Binary files a/docs/_images/TenNodeTetrahedron.png and /dev/null differ diff --git a/docs/_images/TriangularTimeSeries.png b/docs/_images/TriangularTimeSeries.png deleted file mode 100644 index c156bf10..00000000 Binary files a/docs/_images/TriangularTimeSeries.png and /dev/null differ diff --git a/docs/_images/TrigTimeSeries.gif b/docs/_images/TrigTimeSeries.gif deleted file mode 100644 index ba96c5ba..00000000 Binary files a/docs/_images/TrigTimeSeries.gif and /dev/null differ diff --git a/docs/_images/ZeroLengthContactASDimplex.png b/docs/_images/ZeroLengthContactASDimplex.png deleted file mode 100644 index f4978929..00000000 Binary files a/docs/_images/ZeroLengthContactASDimplex.png and /dev/null differ diff --git a/docs/_images/brick.gif b/docs/_images/brick.gif deleted file mode 100644 index 606877d9..00000000 Binary files a/docs/_images/brick.gif and /dev/null differ diff --git a/docs/_images/responseSpectrum.png b/docs/_images/responseSpectrumAnalysis.png similarity index 100% rename from docs/_images/responseSpectrum.png rename to docs/_images/responseSpectrumAnalysis.png diff --git a/docs/_sources/developer/build.rst.txt b/docs/_sources/developer/build.rst.txt index 860f5181..1a1c8c4e 100644 --- a/docs/_sources/developer/build.rst.txt +++ b/docs/_sources/developer/build.rst.txt @@ -28,7 +28,8 @@ For Windows 10 the user must have the following applications installed on their The very latest release of MSVC, 2022.2, does not currently work with Intel OneAPI. Install the version 2022.1 or the 2019 version of MSCV. -3. **IntelOne Basic & HPC Toolkits**: Intel's `oneAPI `_ and the `HPC toolkit `_. One advantage of installing the HPC one to obtain the Fortran compiler is that it comes with **MPI** for building and running the parallel OpenSees applications. + +3. **IntelOne Basic & HPC Toolkits**: Intel's `oneAPI `_ toolkits. To install the Fortran compiler you need to install TWO toolkits, the `base toolkit `_ and the `HPC toolkit `_. One advantage of installing the HPC one to obtain the Fortran compiler is that it comes with **MPI** for building and running the parallel OpenSees applications. .. note:: @@ -40,11 +41,11 @@ For Windows 10 the user must have the following applications installed on their 2. On windows order matters, the Intel compilers come after Visual Studio. If you reverse the order or if the install was not successfullm cmake when running below will give an error message about failing to find a fortran compiler. 4. **MUMPS**: Mumps is one of the defaults solvers used in OpenSessMP and OpenSeesMP. Like OpenSees it must be installed using **cmake**. Open a terminal window and type the following to set the intel env variables, download and then build the MUMPS library. + .. code:: - "C:\Program Files (x86)\Intel\oneAPI\setVars" intel64 mod - git clone https://github.com/OpenSees/mumps.git + git clone https://github.com/scivision/mumps.git cd mumps mkdir build cd build @@ -92,6 +93,21 @@ With everything installed the build process is somewhat simple! From a terminal cmake --build . --config Release --target OpenSeesPy cmake --build . --config Release --target OpenSeesMP cmake --build . --config Release --target OpenSeesSP +Building the OpenSeesPy Library +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With everything installed the build process is somewhat simple! Again from a terminal window: + + .. code:: + + "C:\Program Files (x86)\Intel\oneAPI\setVars" intel64 mod + cd OpenSees + mkdir build + cd build + conan install .. --build missing --settings compiler.runtime="MT" + cmake .. -DBLA_STATIC=ON -DMKL_LINK=static -DMKL_INTERFACE_FULL=intel_lp64 + cmake .. -DBLA_STATIC=ON -DMKL_LINK=static -DMKL_INTERFACE_FULL=intel_lp64 + cmake --build . --config Release --target OpenSeesPy --parallel 4 cd Release copy OpenSeesPy.dll opensees.pyd @@ -123,6 +139,7 @@ MacOS Software Requirements ^^^^^^^^^^^^^^^^^^^^^ + For MacOS the user must have the following applications installed on their computer: xcode command line tools, brew, cmake, gcc, gfortran, python, and open-mpi. All the applications are installed via the command line. Some of these you can skip as you may already have them installed. 1. **XCODE Command Line Tools**: To make Apple Clang and git available, type the following in a terminal application: @@ -150,19 +167,18 @@ For MacOS the user must have the following applications installed on their compu .. code:: brew install cmake - brew install gcc - brew install hdf5 + brew install gfortran brew install open-mpi - brew install scalapack brew install python@3.9 - git clone https://github.com/OpenSees/mumps.git - cd mumps - mkdir build - cd build - cmake .. -Darith=d - cmake --build . --config Release --parallel 4 - cd .. - + + +4. **conan** In a new terminal window type + + .. code:: + + pip3 install conan + + Obtaining the Source Code ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -197,19 +213,48 @@ With everything installed the build process is somehwat simple! Again from a ter cd OpenSees mkdir build cd build - cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES=/usr/local/Cellar/scalapack/2.2.0_1/lib/libscalapack.dylib - cmake --build . --config Release --target OpenSees --parallel 4 - cmake --build . --config Release --target OpenSeesPy - cmake --build . --config Release --target OpenSeesMP - cmake --build . --config Release --target OpenSeesSP + conan install .. --build missing + cmake .. + cmake --build . --config Release --target OpenSees + + +.. warning:: + + If conan fails, try updating conan to the latest with the following (NOTE: the update has worked if the versio nnumbers are different): + + .. code:: + + conan --version + git clone https://github.com/conan-io/conan.git conansrc + cd conansrc/ + pip3 install -e . + conan --version + +.. note:: + + 1. You only have to issue the first 4 commands once. The fifth command is only needed if you change a CMakeFile.txt. Typically if you are just editing code you only need to type the last command. + + +Building the OpenSeesPy Library +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With everything installed the build process is somewhat simple! Again from a terminal window: + + .. code:: + + cd OpenSees + mkdir build + cd build + conan install .. --build missing + cmake .. + cmake --build . --config Release --target OpenSeesPy mv ./lib/OpenSeesPy.dylib ./lib/opensees.so .. warning:: - 1. The path to scalapack might change depending on your Mac type, e.g. x86 or ARM cpu, and the version of scalapack. When using brew install scalapack, look to see what path the library is located in. USE THAT PATH IF DIFFERENT! - 2. This last copy is needed as the OpenSeesPy.dylib module at present actually needs to load from a file named **opensees.so** To import this module now in your code you must do one of 2 things: + This last copy is needed as the OpenSeesPy.dylib module at present actually needs to load from a file named **opensees.so** To import this module now in your code you must do one of 2 things: - 2.1 If you have used pip3 to install openseespy, you can replace the opensees.so file in the site_package location with the opensees.so above. To find the location of this module, use the following: + 1. If you have used pip3 to install openseespy, you can replace the opensees.so file in the site_package location with the opensees.so above. To find the location of this module, use the following: .. code:: @@ -220,7 +265,7 @@ With everything installed the build process is somehwat simple! Again from a ter You may of course want to give the existing file a new name with the **mv** command. - 2.2 If you have not installed openseespy or you want to load the .so you built instead of the installed one you can add the path to opensees.so to your **PYTHONPATH** env variables with export PYTHONPATH=$PWD or PYTHONPATH=$PWD:$PYTHONPATH depending on if PYTHONPATH exists when you type **env** in the terminal. NOTE: Using $PWD assumes you are in the directory containing the lib file, other put in the full path to the directory. + 2. If you have not installed openseespy or you want to load the .so you built instead of the installed one you can add the path to opensees.so to your **PYTHONPATH** env variables with export PYTHONPATH=$PWD or PYTHONPATH=$PWD:$PYTHONPATH depending on if PYTHONPATH exists when you type **env** in the terminal. NOTE: Using $PWD assumes you are in the directory containing the lib file, other put in the full path to the directory. 3. Finally plase note you will get a segmentation fault if you run with a different python exe than the one you build for. Look in output of **cmake ..** for the python library used. @@ -239,29 +284,35 @@ Software Requirements sudo apt install -y cmake sudo apt install -y gcc sudo apt install -y gfortran - sudo apt install -y python3-pip sudo apt install -y liblapack-dev + sudo apt install -y python3-pip sudo apt install -y libopenmpi-dev sudo apt install -y libmkl-rt sudo apt install -y libmkl-blacs-openmpi-lp64 sudo apt install -y libscalapack-openmpi-dev - git clone https://github.com/OpenSees/mumps.git + git clone https://github.com/scivision/mumps.git cd mumps mkdir build cd build cmake .. -Darith=d cmake --build . --config Release --parallel 4 - cd ../.. + cd .. + +2. **Install conan** In a new terminal window type + + .. code:: + pip3 install conan -.. warning:: + .. warning:: - Read the output from the last command. When building **OpenSees** below you will use the conan executable just installed. If located in a different location to the path used below, you will get an error. Change the command below to path where conan was just installed. + Read the output from the last command. When installing conan, the path to conan may not be added to your PATH environ variable. You will need to add it to your PATH variable, or modify the **conan install ** command below to include full path to the **conan** exe. -Obtaining the Source Code -^^^^^^^^^^^^^^^^^^^^^^^^^ +Obtaining the Source Code & Other setup +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -You need to obtain the OpenSees source code from github. To obtain the source code, from a terminal **cd** to the directory you want to place OpenSees and then type the following: +You need to obtain both OpenSees and install MUMPS +To obtain the source code, from a terminal **cd** to the directory you want to place OpenSees and then type the following: .. code:: @@ -281,28 +332,39 @@ You need to obtain the OpenSees source code from github. To obtain the source co git pull -Building the OpenSees Applications -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Building the OpenSees Tcl Interpreter +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -With everything installed the build process is somehwat simple! Again from a terminal window enter the following commands: +With everything installed the build process is somehwat simple! Again from a terminal window: .. code:: cd OpenSees mkdir build cd build - /home/ubuntu/.local/bin/conan install .. --build missing - cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libmkl_blacs_openmpi_lp64.so;/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" + conan install .. --build missing + cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libmkl_blacs_openmpi_lp64.so;/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" -DMUMPS_DIR="..\..\mumps\build cmake --build . --config Release --target OpenSees --parallel 4 - cmake --build . --config Release --target OpenSeesPy - cmake --build . --config Release --target OpenSeesMP - cmake --build . --config Release --target OpenSeesSP - mv ./OpenSeesPy.so ./opensees.so .. note:: - 1. If you have more than **4** cores available, you can use the extra cores by changing the **4** value! + 1. You only have to issue the first nine commands once. The tenth command is only needed if you change a CMakeFile.txt. Typically if you are just editing code you only need to type the last commands. + 2. If you have more than **4** cores available, you can use the exra cores by changing the **4** value! + +Building the OpenSeesPy Library +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With everything installed the build process is somewhat simple! Again from a terminal window: + .. code:: + + cd OpenSees + mkdir build + cd build + conan install .. --build missing + cmake .. + cmake --build . --config Release --target OpenSeesPy + mv ./lib/OpenSeesPy.so ./lib/opensees.so .. warning:: @@ -321,5 +383,5 @@ With everything installed the build process is somehwat simple! Again from a ter 2. If you have not installed openseespy or you want to load the .so you built instead of the installed one you can add the path to opensees.so to your **PYTHONPATH** env variables with export PYTHONPATH=$PWD or PYTHONPATH=$PWD:$PYTHONPATH depending on if PYTHONPATH exists when you type **env** in the terminal. NOTE: Using $PWD assumes you are in the directory containg the lib file. - 3. Finally please note you will get a segmentation fault if you run with a different python exe than the one you build with. Look in output of **cmake ..** for the python library used. + 3. Finally plase note you will get a segmentation fault if you run with a different python exe than the one you build for. Look in output of **cmake ..** for the python library used. diff --git a/docs/_sources/developer/contribute.rst.txt b/docs/_sources/developer/contribute.rst.txt index a881e330..3e7dd02d 100644 --- a/docs/_sources/developer/contribute.rst.txt +++ b/docs/_sources/developer/contribute.rst.txt @@ -1,5 +1,71 @@ .. _contribute: ***************** -Contributing Code -***************** \ No newline at end of file +Contributing Code & Documentation +***************** + +Code Contribution +================== +To submit your code contribution (e.g. Material Model, Element) please submit pull request to the `OpenSees Github Page `_. Please ensure that there is no merge conflict to the OpenSees Repo. Please include documentation! + +Documentation +============== + +To contribute documentation, submit a pull request to the `OpenSeesDocumentation GitHub page `_. OpenSees Documentation use sphinx and reStructured Text format. A dummy example is provided below with .. NOTE: as a comment/simple description. More detailed explanation can be found in `reStructured Text Basic `_ + +reStructured Text Quickstart +-------------------------------- + +.. admonition:: Example + + .. code-block:: rst + + .. _PageUUID: .. NOTE: This is the GLOBAL Identified for your page. Other page could dynamically link your page by calling :ref:`_PageUUID` + + DummyMaterial Material .. NOTE: Page Title + ^^^^^^^^^^^^^^^^ .. NOTE: This mark the above text (DummyMaterial) as an subsections. "===" is for section, "---" is for subsection, "^^^" is for subsubsection and '""""""' is for paragraph. + + .. function:: integrator GimmeMCK $m $c $k $ki .. The Function input for your model/element + + .. list-table:: .. NOTE: Preferred Table Setup. If you need more columns, add an integer value to the widths. Note that this will add columns to every row! + :widths: 10 10 40 + :header-rows: 1 + + * - Argument .. * marks a new row and - fill a column in the row (left-right order) + - Type + - Description + * - $m + - |float| + - If the value is not zero, add mass matrix to tangent matrix with factored value as large as the input. + * - $c + - |float| + - If the value is not zero, add damping matrix to tangent matrix with factored value as large as the input. + * - $ki + - |float| + - If the value is not zero, add the tangent stiffness matrix to tangent matrix with factored value as large as the input. + * - $kt + - |float| + - If the value is not zero, add the initial stiffness matrix to tangent matrix with factored value as large as the input. + + .. math: + + \textrm{reStructured Text support Latex Math} \leq \frac{a} {b} + + :math:`\frac{a}{b}` In Line Maths + .. note:: . + * This is a note + + .. admonition:: Example: + + + 1. **Tcl Code** + + .. code-block:: tcl + + Code Example for TcL Interpreter + + 1. **Python Code** + + .. code-block:: python + + Code Example for Python Interpreter \ No newline at end of file diff --git a/docs/_sources/user/examples/basicExamples.rst.txt b/docs/_sources/user/examples/basicExamples.rst.txt index 4d7eb31e..b7fedadb 100644 --- a/docs/_sources/user/examples/basicExamples.rst.txt +++ b/docs/_sources/user/examples/basicExamples.rst.txt @@ -12,11 +12,6 @@ In OpenSees, an analysis is an object which is composed by the aggregation of co #. Solution Algorithm -- determines the sequence of steps taken to solve the non-linear equation at the current time step #. Integrator -- determines the equations to solve, the predictive step, and how to update the reponses at the nodes given the solution to :math:`Ax=b` -.. figure:: figures/OpenSeesAnalysis.png - :align: center - :figclass: align-center - - OpenSees Analysis .. toctree:: :maxdepth: 1 diff --git a/docs/_sources/user/examples/basicExamples/basicTruss.rst.txt b/docs/_sources/user/examples/basicExamples/basicTruss.rst.txt index 69081880..b51c8d83 100644 --- a/docs/_sources/user/examples/basicExamples/basicTruss.rst.txt +++ b/docs/_sources/user/examples/basicExamples/basicTruss.rst.txt @@ -2,7 +2,7 @@ Basic Truss Example ------------------- Introduction -********** +************* .. figure:: figures/Truss.png :align: center @@ -14,7 +14,7 @@ This example is of a linear-elastic three bar truss, as shown in the top figure, Because the model is planar and is comprised of truss elements, the spatial dimension of the mesh (``ndm``) will be specified as **2** and the nodes will only be specified to have **2** degrees-of-freedom. Model Definition -**************** +***************** .. code-block:: tcl @@ -95,7 +95,7 @@ We will now show the commands to perform a static analysis using a linear soluti Output Specification -**************** +*********************** For this analysis, we will record the displacement at node 4, and all the element forces expressed both in the global coordinate system and the local system. .. code-block:: tcl @@ -108,7 +108,7 @@ For this analysis, we will record the displacement at node 4, and all the elemen recorder Element -file eleLocal.out -time -ele 1 2 3 basicForces Perform The Analysis -***************** +*********************** After the objects for the model, analysis and output has been defined we now perform the analysis. .. code-block:: tcl @@ -116,7 +116,7 @@ After the objects for the model, analysis and output has been defined we now per analyze 1 Print Information to Screen -********** +**************************** In addition to using recorders, it is possible to specify output using the print and puts commands. When no file identifiers are provided, these commands will print results to the screen. .. code-block:: tcl @@ -129,5 +129,5 @@ Results ********** When you run this script, you should see the following printed to the screen: .. figure:: figures/TrussRun.png - :align: center - :figclass: align-center \ No newline at end of file + :align: center + :figclass: align-center \ No newline at end of file diff --git a/docs/_sources/user/examples/basicTruss/basicTruss.rst.txt b/docs/_sources/user/examples/basicTruss/basicTruss.rst.txt deleted file mode 100644 index 6a8c4dc3..00000000 --- a/docs/_sources/user/examples/basicTruss/basicTruss.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -Basic Truss Example -------------------- - -This example is of a linear-elastic three bar truss, as shown in the figure, subject to static loads. The model has four nodes, labelled **1** through **4**, and three elements, labelled **1** through **3**. Nodes **1**, **2** ,and **3** are fixed and a loads of **100kip** and **-50kip** are imposed at node **4**. The elements all have a youngs modulus of **300ksi**, elements **2** and **3** have an area of **5in^2** and element **1** an area of **10in^***. - -.. note:: -Because the model is planar and is comprised of truss elements, the spatial dimension of the mesh (``ndm``) will be specified as **2** and the nodes will only be specified to have **2** degrees-of-freedom. - - - diff --git a/docs/_sources/user/manual/analysis/AMD.rst.txt b/docs/_sources/user/manual/analysis/AMD.rst.txt deleted file mode 100644 index d7759e15..00000000 --- a/docs/_sources/user/manual/analysis/AMD.rst.txt +++ /dev/null @@ -1,35 +0,0 @@ -Alternative Min Degree Numberer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This command is used to construct an AMD degree-of-freedom numbering object to provide the mapping between the degrees-of-freedom at the nodes and the equation numbers. An AMD numberer uses the approximate minimum degree scheme to order the matrix equations. The command to construct an AMD numberer is a follows: - -.. function:: numberer AMD - -.. admonition:: Example - - The following example shows how to construct an alternative min-degree numberer. - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer AMD - - - 2. **Python Code** - - .. code-block:: python - - numberer('AMD') - - -Code developed by: |fmk| - - -.. [REFERENCES] - - Algorithm 837: AMD, An approximate minimum degree ordering algorithm, P. Amestoy, T. A. Davis, and I. S. Duff, ACM Transactions on Mathematical Software, vol 30, no. 3, Sept. 2004, pp. 381-388. - - An approximate minimum degree ordering algorithm, P. Amestoy, T. A. Davis, and I. S. Duff, SIAM Journal on Matrix Analysis and Applications, vol 17, no. 4, pp. 886-905, Dec. 1996. - - Direct Methods for Sparse Linear Systems, T. A. Davis, SIAM, Philadelphia, Sept. 2006. Part of the SIAM Book Series on the Fundamentals of Algorithms. \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/BandGeneral.rst.txt b/docs/_sources/user/manual/analysis/BandGeneral.rst.txt deleted file mode 100644 index 773cfa81..00000000 --- a/docs/_sources/user/manual/analysis/BandGeneral.rst.txt +++ /dev/null @@ -1,56 +0,0 @@ -BandGeneral System ------------------- - -This command is used to construct a BandGeneral linear system of equation object. As the name implies, this class is used for matrix systems which have a banded profile. The matrix is stored as shown below in a 1dimensional array of size equal to the bandwidth times the number of unknowns. When a solution is required, the Lapack routines DGBSV and SGBTRS are used. The following command is used to construct such a system: - -.. function:: system BandGeneral - -An n×n matrix A=(ai,j) is a band matrix if all matrix elements are zero outside a diagonally bordered band whose range is determined by constants k1 and k2: - -:math:`a_{i,j}=0 \quad\mbox{if}\quad ji+k_2; \quad k_1, k_2 \ge 0.\ ` -The quantities k1 and k2 are the left and right half-bandwidth, respectively. The bandwidth of the matrix is :math:`k1 + k2 + 1` and only the entries in the band are stored; the rest being implicitly zero. - -For example, 6-by-6 a matrix with bandwidth 3: - -.. math:: - - \begin{bmatrix} - B_{11} & B_{12} & 0 & \cdots & \cdots & 0 \\ - B_{21} & B_{22} & B_{23} & \ddots & \ddots & \vdots \\ - 0 & B_{32} & B_{33} & B_{34} & \ddots & \vdots \\ - \vdots & \ddots & B_{43} & B_{44} & B_{45} & 0 \\ - \vdots & \ddots & \ddots & B_{54} & B_{55} & B_{56} \\ - 0 & \cdots & \cdots & 0 & B_{65} & B_{66} - \end{bmatrix} - - -is stored as the 6-by-3 matrix - -.. math:: - - \begin{bmatrix} - 0 & B_{11} & B_{12}\\ - B_{21} & B_{22} & B_{23} \\ - B_{32} & B_{33} & B_{34} \\ - B_{43} & B_{44} & B_{45} \\ - B_{54} & B_{55} & B_{56} \\ - B_{65} & B_{66} & 0 - \end{bmatrix} - -.. admonition:: Example - - The following example shows how to construct a ProfileSPD system - - 1. **Tcl Code** - - .. code-block:: tcl - - system BandGeneral - - 2. **Python Code** - - .. code-block:: python - - system('BandGeneral') - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/BandSPD.rst.txt b/docs/_sources/user/manual/analysis/BandSPD.rst.txt deleted file mode 100644 index 44c60727..00000000 --- a/docs/_sources/user/manual/analysis/BandSPD.rst.txt +++ /dev/null @@ -1,58 +0,0 @@ -BandSPD System --------------- - -This command is used to construct a BandSPD linear system of equation object. As the name implies, this class is used for symmetric positive definite matrix systems which have a banded profile. The matrix is stored as shown below in a 1 dimensional array of size equal to the (bandwidth/2) times the number of unknowns. When a solution is required, the Lapack routines DPBSV and DPBTRS are used. The following command is used to construct such a system: - -.. function:: system BandSPD - -An n×n matrix is a symmetric positive definite banded matrix if: - -1. :math:`A_{i,j}=0 \quad\mbox{if}\quad ji+k; \quad k \ge 0.` - -2. :math:`A_{i,j} = A_{j,i}` - -3. :math:`y^T A y != 0` for all non-zero vectors y with real entries (:math:`y \in \mathbb{R}^n`), - -The bandwidth of the matrix is k + k + 1. - -For example, a symmetric 6-by-6 matrix with a right bandwidth of 2: - -.. math:: - \begin{bmatrix} - A_{11} & A_{12} & A_{13} & 0 & \cdots & 0 \\ - & A_{22} & A_{23} & A_{24} & \ddots & \vdots \\ - & & A_{33} & A_{34} & A_{35} & 0 \\ - & & & A_{44} & A_{45} & A_{46} \\ - & sym & & & A_{55} & A_{56} \\ - & & & & & A_{66} - \end{bmatrix} - -is stored as follows: - -.. math:: - \begin{bmatrix} - A_{11} & A_{12} & A_{13} \\ - A_{22} & A_{23} & A_{24} \\ - A_{33} & A_{34} & A_{35} \\ - A_{44} & A_{45} & A_{46} \\ - A_{55} & A_{56} & 0 \\ - A_{66} & 0 & 0 - \end{bmatrix} - -.. admonition:: Example - - The following example shows how to construct a BandSPD system - - 1. **Tcl Code** - - .. code-block:: tcl - - system BandSPD - - 2. **Python Code** - - .. code-block:: python - - system('BandSPD') - -Code developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/DisplacementControl.rst.txt b/docs/_sources/user/manual/analysis/DisplacementControl.rst.txt deleted file mode 100644 index 7d640ba0..00000000 --- a/docs/_sources/user/manual/analysis/DisplacementControl.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -DisplacementControl Command ---------------------------- - -This command is used to construct a DisplacementControl integrator object. In an analysis step with Displacement Control we seek to determine the time step that will result in a displacement increment for a particular degree-of-freedom at a node to be a prescribed value. - -.. function:: integrator DisplacementControl $node $dof $incr <$numIter :math`\Delta U \text{min}` $:math:\Delta U \text{max}`> - - $node, |integer|, node whose response controls solution - $dof, |integer|, degree of freedom at the node, valid options: 1 through ndf at node. - $incr, |float|, first displacement increment \Delta U_{\text{dof}} - $numIter, |integer|, the number of iterations the user would like to occur in the solution algorithm. Optional, default = 1.0. - $:math:`\Delta U \text{min}`, |float|, the min step size the user will allow. optional: default :math`= \Delta U_{min} = \Delta U_0` - $\Delta U \text{max}, |float|, the max step size the user will allow. optional: default :math:`= \Delta U_{max} = \Delta U_0` - - - - -integrator DisplacementControl 1 2 0.1; # displacement control algorithm seeking constant increment of 0.1 at node 1 at 2'nd dof. - - -THEORY -^^^^^^ - -If we write the governing finite element equation at :math:`t + \Delta t\` as: - -.. math:: - - R(U_{t+\Delta t}, \lambda_{t+\Delta t}) = \lambda_{t+\Delta t} F^{ext} - F(U_{t+\Delta t}) \!` - -where :math:`F(U_{t+\Delta t})\!` are the internal forces which are a function of the displacements :math:`U_{t+\Delta t}\!`, :math:`F^{ext}\!` is the set of reference loads and :math:`\lambda\!` is the load multiplier. Linearizing the equation results in: - -.. math:: - - K_{t+\Delta t}^{*i} \Delta U_{t+\Delta t}^{i+1} = \left ( \lambda^i_{t+\Delta t} + \Delta \lambda^i \right ) F^{ext} - F(U_{t+\Delta t}) - -This equation represents n equations in n+1 unknowns, and so an additional equation is needed to solve the equation. For displacement control, we introduce a new constraint equation in which in each analysis step we set to ensure that the displacement increment for the degree-of-freedom \text{dof} at the specified node is: - -.. math:: - - \Delta U_\text{dof} = \text{incr}\! - -MORE TO COME: - - -In Displacement Control the \Delta_U\text{dof} set to t + \lambda_{t+1} where, - - - \Delta U_\text{dof}^{t+1} = \max \left ( \Delta U_{min}, \min \left ( \Delta U_\text{max}, \frac{\text{numIter}}{\text{lastNumIter}} \Delta U_\text{dof}^{t} \right ) \right ) diff --git a/docs/_sources/user/manual/analysis/FullGeneral.rst.txt b/docs/_sources/user/manual/analysis/FullGeneral.rst.txt deleted file mode 100644 index 19f2024f..00000000 --- a/docs/_sources/user/manual/analysis/FullGeneral.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -FullGeneral System ------------------- - -This command is used to construct a Full General linear system of equation object. As the name implies, the class utilizes NO space saving techniques to cut down on the amount of memory used. If the matrix is of size, nxn, then storage for an nxn array is sought from memory when the program runs. When a solution is required, the Lapack routines DGESV and DGETRS are used. The following command is used to construct such a system: - -.. function:: system FullGeneral - -.. warning:: - 1. This type of system should almost never be used in production! This is because it requires a lot more memory than every other solver and takes more time in the actual solving operation than any other solver. - 2. It is required if the user is interested in looking at the global system matrix, using the **printA** command - -.. admonition:: Example - - The following example shows how to construct a FullGeneral system - - 1. **Tcl Code** - - .. code-block:: tcl - - system FullGeneral - - - 2. **Python Code** - - .. code-block:: python - - system('FullGeneral') - -Code Developed by: |fmk| \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/LinerAlgorithm.rst.txt b/docs/_sources/user/manual/analysis/LinerAlgorithm.rst.txt deleted file mode 100644 index 42db5f5d..00000000 --- a/docs/_sources/user/manual/analysis/LinerAlgorithm.rst.txt +++ /dev/null @@ -1,43 +0,0 @@ -.. _LinearAlgorithm: - -Linear Algorithm ----------------- - -This command is used to construct a Linear algorithm object which takes one iteration to solve the system of equations. - -.. function:: algorithm Linear <-initial> <-factorOnce> - - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - -initial, |string|, optional flag to indicate to use initial stiffness - -factorOnce, |string|, optional flag to indicate to only set up and factor matrix once - -.. note:: - - As the tangent matrix typically will not change during the analysis in case of an elastic system it is highly advantageous to use the -factorOnce option. Do not use this option if you have a nonlinear system and you want the tangent used to be actual tangent at time of the analysis step. - - The Linear algorithm REQUIRES NO :ref:`test` and will complain if one is provided. This means that convergence is not checked. - - Certain transient explicit :ref:`integration` schemes require a Linear algorithm. - -.. admonition:: Example: - - The following examples demonstrate the command to create a Linear solution algorithm. - - 1. **Tcl Code** - - .. code-block:: tcl - - algorithm Linear - - 2. **Python Code** - - .. code-block:: python - - algorithm('Linear') - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/LoadControl.rst.txt b/docs/_sources/user/manual/analysis/LoadControl.rst.txt deleted file mode 100644 index cbf8f6b8..00000000 --- a/docs/_sources/user/manual/analysis/LoadControl.rst.txt +++ /dev/null @@ -1,53 +0,0 @@ -LoadControl Command -------------------- - -This command is used to construct a LoadControl integrator object. - -.. function:: integrator LoadControl $lambda <$numIter $minLambda $maxLambda> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $lambda, |float|,the load factor increment :math:`\lambda` - $numIter, |integer|, the number of iterations the user would like to occur in the solution algorithm. Optional: optional default = 1 - $minLambda, |float|, the min stepsize the user will allow. optional: defualt :math:`= \lambda_{min} = \lambda` - $maxLambda, |float|, the max stepsize the user will allow. optional: default :math:`= \lambda_{max} = \lambda` - -.. note:: - - The change in applied loads that this causes depends on the active load patterns (those load patterns not set constant) and the loads in the load patterns. If the only active loads acting on the domain are in load patterns with a Linear time series with a factor of 1.0, this integrator is the same as the classical load control method. - - The optional arguments are supplied to speed up the step size in cases where convergence is too fast and slow down the step size in cases where convergence is too slow. - -Theory -^^^^^^ - -In Load Control the time in the domain is set to :math:`t + \lambda_{t+1}` where, - - .. math:: - - \lambda_{t+1} = \max \left ( \lambda_{min}, \min \left ( \lambda_{max}, \frac{\text{numIter}}{\text{lastNumIter}} \lambda_{t} \right ) \right ) - - -where *lastNumIter* is number of steps required to achieve convergence in the previous step. Changing the step size based on number of iterations in previous step, allows user to reduce the step size when the analysis struggles to converge. - - -.. admonition:: Example - - The following example shows how to construct a Load Control Integrator with a step size of **0.1**, which in a static analysis would increment the pseudo time by the **0.1** factor at each analysis step, thus requiring **10** analysis steps if the full load is considered to be applied when the pseudo domain time is **1.0**. - - 1. **Tcl Code** - - .. code-block:: tcl - - integrator LoadControl 0.1 - - 2. **Python Code** - - .. code-block:: python - - integrator('LoadControl', 0.1) - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/Mumps.rst.txt b/docs/_sources/user/manual/analysis/Mumps.rst.txt deleted file mode 100644 index c905dcd7..00000000 --- a/docs/_sources/user/manual/analysis/Mumps.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -Mumps Solver ------------- - -This command is used to construct a sparse system of equations which uses the `Mumps `_ solver. The following command is used to construct such a system: - -.. function:: system Mumps - -.. warning:: - - It is presently limited to the parallel **OpenSeesSP** and **OpenSeesMP** applications. - -.. admonition:: Example - - The following example shows how to construct a sparse system solved using the Mumps solver. - - 1. **Tcl Code** - - .. code-block:: tcl - - system Mumps - - 2. **Python Code** - - .. code-block:: python - - system('Mumps') - -Code developed by: |fmk| - - diff --git a/docs/_sources/user/manual/analysis/Newmark.rst.txt b/docs/_sources/user/manual/analysis/Newmark.rst.txt deleted file mode 100644 index fd52d6f3..00000000 --- a/docs/_sources/user/manual/analysis/Newmark.rst.txt +++ /dev/null @@ -1,126 +0,0 @@ -Newmark Method -------------------- - -This command is used to construct a Newmark integrator object. - -.. function:: integrator Newmark $gamma $beta - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $gamma, |float|, :math:`\gamma` factor - $beta, |float|, :math:`\beta` factor - -.. note:: - 1. If the accelerations are chosen as the unknowns and :math:`\beta` is chosen as 0, the formulation results in the fast but conditionally stable explicit Central Difference method. Otherwise the method is implicit and requires an iterative solution process. - - 2. Two common sets of choices are: - - Average Acceleration Method (:math:`\gamma=\frac{1}{2}, \beta = \frac{1}{4}`) - - Linear Acceleration Method (:math:`\gamma=\frac{1}{2}, \beta = \frac{1}{6}`) - - 3. :math:`\gamma > \frac{1}{2}` results in numerical damping proportional to :math:`\gamma - \frac{1}{2}` - - 4. The method is second order accurate if and only if :math:`\gamma = \frac{1}{2}` - - 5. The method is conditionally stable for :math:`\beta >= \frac{\gamma}{2} >= \frac{1}{4}` - - -Theory -^^^^^^ - -The Newmark method is a one step implicit method for solving the transient problem, represented by the residual for the momentum equation: - -.. math:: - - R_{t + \Delta t} = F_{t+\Delta t}^{ext} - M \ddot U_{t + \Delta t} - C \dot U_{t + \Delta t} + F(U_{t + \Delta t})^{int} - -Using the Taylor series approximation of :math:`U_{t+\Delta t}` and :math:`\dot U_{t+\Delta t}`: - -.. math:: - - U_{t+\Delta t} = U_t + \Delta t \dot U_t + \frac{\Delta t^2}{2} \ddot U_t + \frac{\Delta t^3}{6} \dddot U_t + \cdots - - \dot U_{t+\Delta t} = \dot U_t + \Delta t \ddot U_t + \frac{\Delta t^2}{2} \dddot U_t + \cdots - -Newton truncated these using the following: - -.. math:: - - U_{t+\Delta t} = u_t + \Delta t \dot U_t + \frac{\Delta t^2}{2} \ddot U + \beta {\Delta t^3} \dddot U - - \dot U_{t + \Delta t} = \dot U_t + \Delta t \ddot U_t + \gamma \Delta t^2 \dddot U - -in which he assumed linear acceleration within a time step, i.e., - -.. math:: - \dddot U = \frac{{\ddot U_{t+\Delta t}} - \ddot U_t}{\Delta t} - -which results in the following expressions: - -.. math:: - U_{t+\Delta t} = U_t + \Delta t \dot U_t + [(0.5 - \beta) \Delta t^2] \ddot U_t + [\beta \Delta t^2] \ddot U_{t+\Delta t} - - \dot U_{t+\Delta t} = \dot U_t + [(1-\gamma)\Delta t] \ddot U_t + [\gamma \Delta t ] \ddot U_{t+\Delta t} - -The variables :math:`\beta` and :math:`\gamma` are numerical parameters that control both the stability of the method and the amount of numerical damping introduced into the system by the method. For :math:`\gamma=\frac{1}{2}` there is no numerical damping; for :math:`\gamma>=\frac{1}{2}` numerical damping is introduced. Two well known and commonly used cases are: - - 1. Average Acceleration Method (:math:`\gamma=\frac{1}{2}, \beta = \frac{1}{4}`) - - 2. Constant Acceleration Method (:math:`\gamma=\frac{1}{2}, \beta = \frac{1}{6}`) - -The linearization of the Newmark equations gives: - -.. math:: - dU_{t+\Delta t}^{i+1} = \beta \Delta t^2 d \ddot U_{t+\Delta t}^{i+1} - - d \dot U_{t+\Delta t}^{i+1} = \gamma \Delta t \ddot U_{t+\Delta t}^{i+1} - -which gives the update formula when displacement increment is used as unknown in the linearized system as: - -.. math:: - U_{t+\Delta t}^{i+1} = U_{t+\Delta t}^i + dU_{t+\Delta t}^{i+1} - - \dot U_{t+\Delta t}^{i+1} = \dot U_{t+\Delta t}^i + \frac{\gamma}{\beta \Delta t}dU_{t+\Delta t}^{i+1} - - \ddot U_{t+\Delta t}^{i+1} = \ddot U_{t+\Delta t}^i + \frac{1}{\beta \Delta t^2}dU_{t+\Delta t}^{i+1} - -The linearization of the momentum equation using the displacements as the unknowns leads to the following linear equation: - -.. math:: - K_{t+\Delta t}^{*i} \Delta U_{t+\Delta t}^{i+1} = R_{t+\Delta t}^i - -where, - -.. math:: - K_{t+\Delta t}^{*i} = K_t + \frac{\gamma}{\beta \Delta t} C_t + \frac{1}{\beta \Delta t^2} M - -and, - -.. math:: - R_{t+\Delta t}^i = F_{t + \Delta t}^{ext} - F(U_{t + \Delta t}^{i-1})^{int} - C \dot U_{t+\Delta t}^{i-1} - M \ddot U_{t+ \Delta t}^{i-1} - - -.. admonition:: Example - - The following example shows how to construct a Newmark Integrator. - - 1. **Tcl Code** - - .. code-block:: tcl - - integrator Newmark 0.5 0.25 - - 2. **Python Code** - - .. code-block:: python - - integrator('Newmark', 0.5, 0.25) - - -.. [Newmark1959] Newmark, N.M. "A Method of Computation for Structural Dynamics" ASCE Journal of Engineering Mechanics Division, Vol 85. No EM3, 1959. - - -Code Developed by: |fmk| \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/Newton.rst.txt b/docs/_sources/user/manual/analysis/Newton.rst.txt deleted file mode 100644 index 63ec0790..00000000 --- a/docs/_sources/user/manual/analysis/Newton.rst.txt +++ /dev/null @@ -1,65 +0,0 @@ - -This command is used to construct a NewtonRaphson algorithm object which is uses the Newton-Raphson algorithm to solve the nonlinear residual equation. The Newton-Raphson method is the most widely used and most robust method for solving nonlinear algebraic equations. The command is of the following form: - -.. function:: algorithm Newton <-initial> <-initialThenCurrent> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - -initial, |string|, optional flag to indicate to use initial stiffness - -initialThenCurrent, |string|, optional flag to indicate to use initial stiffness on first step and then current on subsequent steps - - -The Newton method used in finite element analysis is identical to that taught in basic calculus courses. It is just extended for the n unknown degrees-of-freedom. The method as taught in basic calculus, is a root-finding algorithm that uses the first few terms of the Taylor series of a function :math:`f(x)\,\!` in the vicinity of a suspected root :math:`x_n\,\!` to find the root :math:`x_{n+1}\,\!`. Newton's method is sometimes also known as Newton's iteration, although in this work the latter term is reserved to the application of Newton's method for computing square roots. - -The Taylor series of :math:`r(x)\,\!` about the point :math:`x=x_n+\Delta x\,\!` is given by - -:math:`f(x_n+\Delta x) = f(x_n)+r^{'}(x_n)\Delta x + 1/2r^{}(x_n) \Delta x^2+....\,\!` -Keeping terms only to first order, - -:math:`f(x_n+\Delta x) \approx f(x_n)+r^'(x_n)\Delta x = f(x_n)+ \frac{df(x_n)}{dx}\Delta x` -and since at the root we wish to find :math:`x_n + \Delta x`, the function equates to 0, i.e. :math:`f(x_n+\Delta x) = 0`, we can solve for an approximate :math:`\Delta x` - -:math:` \Delta x \approx -\frac{f(x_n)}{f^'(x_n)} = - \frac{df(x_n)}{dx}^{-1}f(x_n)` -The Newmark method is thus an iterative method in which, starting at a good initial guess :math:`x_0\,\!` we keep iterating until our convergence criteria is met with the following: - -:math:` \Delta x = - \frac{df(x_n)}{dx}^{-1}f(x_n)\,\!` -:math:` x_{n+1} = x_n + \Delta x\,\!` - -The method is generalized to n unknowns by replacing the above scalar equations with matrix ones. - -:math:`R(U_n+\Delta x) = R(U_n)+\frac{\partial R(U_n)}{\partial U} \Delta U + O(\Delta U ^2) \,\!` -The matrix :math:`\frac{\partial R(U_n)}{\partial U}\,\!` is called the system Jacobian matrix and will be denoted K: - -.. math:: - - `K = \frac{\partial R(U_n)}{\partial U}\,\! - -resulting in our iterative procedure where starting from a good initial guess we iterate until our convergence criteria is met with the following: - -.. math:: - - \Delta U = - K^{-1}R(U_n),\! -.. math:: - - U_{n+1} = U_n + \Delta U\,\! - -.. admonition:: Example: - - The following examples demonstrate the command to create a Linear solution algorithm. - - 1. **Tcl Code** - - .. code-block:: tcl - - algorithm Newton - - 2. **Python Code** - - .. code-block:: python - - algorithm('Newton') - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/NormDispIncr.rst.txt b/docs/_sources/user/manual/analysis/NormDispIncr.rst.txt deleted file mode 100644 index d8d43406..00000000 --- a/docs/_sources/user/manual/analysis/NormDispIncr.rst.txt +++ /dev/null @@ -1,46 +0,0 @@ -.. _NormDispIncr: - -Norm Displacement Increment ----------------------------- - -This command is used to construct a convergence test which uses the norm of the solution, :math:`x` vector, of the matrix equation, :math:`Ax=b` to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the change in nodal displacements in the system due to the current unbalance. The command to create a NormUnbalance test is the following: - -.. function:: test NormDispIncr $tol $iter <$pFlag> <$nType> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $tol, |float|, the tolerance criteria used to check for convergence - $iter, |integer|, the max number of iterations to check before returning failure condition - $pFlag, |integer|, " | print flag (optional: default is 0) valid options: - | 0 print nothing - | 1 print information on norms each time test() is invoked - | 2 print information on norms and number of iterations at end of successful test - | 4 at each step it will print the norms and also the \Delta U and R(U) vectors. - | 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test." - $nType, |integer|, "type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm ...))" - - -.. note:: - - When using a :ref:`penalty` constraint handler, large forces (those necessary to enforce the constraint) are included in the :math:`x` vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the :math:`x` vector. - -.. admonition:: Example: - - The following examples demonstrate the command to create a NormDispIncr test which allows 10 iterations till failure with a 2-norm in the :math:`x` vector, i.e. :math:`\sqrt(x^T x)` of **1.0e-2**. - - 1. **Tcl Code** - - .. code-block:: tcl - - test NormDispIncr 1.0e-2 10 2 - - 2. **Python Code** - - .. code-block:: python - - test('NormDispIncr', 1.0e-2, 10, 2) - - -Code Developed by: **fmk** \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/NormEnergyIncr.rst.txt b/docs/_sources/user/manual/analysis/NormEnergyIncr.rst.txt deleted file mode 100644 index 6e1d146b..00000000 --- a/docs/_sources/user/manual/analysis/NormEnergyIncr.rst.txt +++ /dev/null @@ -1,44 +0,0 @@ -.. _EnergyIncr: - -Energy Increment ----------------- - -This command is used to construct a convergence test which uses the energy increment, :math:`0.5 (x^T b)`, where the two vector come from the matrix equation :math:`Ax=b`, to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, :math:`x` is equal to the incremental displacement and :math:`b` the unbalanced force. The command to create a NormEnergyIncr test is the following: - -.. function:: test EnergyIncr $tol $iter <$pFlag> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $tol, |float|, the tolerance criteria used to check for convergence - $iter, |integer|, the max number of iterations to check before returning failure condition - $pFlag, |integer|, " | print flag (optional: default is 0) valid options: - | 0 print nothing - | 1 print information on norms each time test() is invoked - | 2 print information on norms and number of iterations at end of successful test - | 4 at each step it will print the norms and also the \Delta U and R(U) vectors. - | 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test." - -.. note:: - - When using a :ref:`penalty` constraint handler, large forces (those necessary to enforce the constraint) are included in the :math:`x` vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the :math:`x` vector. - -.. admonition:: Example: - - The following examples demonstrate the command to create a NormEnergyIncr test which allows 10 iterations till failure with an energy increment :math:`0.5 (x^T b)` of **1.0e-2**. - - 1. **Tcl Code** - - .. code-block:: tcl - - test EnergyIncr 1.0e-2 10 2 - - 2. **Python Code** - - .. code-block:: python - - test('EnergyIncr', 1.0e-2, 10, 2) - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/NormUnbalance.rst.txt b/docs/_sources/user/manual/analysis/NormUnbalance.rst.txt deleted file mode 100644 index 10616db7..00000000 --- a/docs/_sources/user/manual/analysis/NormUnbalance.rst.txt +++ /dev/null @@ -1,47 +0,0 @@ -.. _NormUnbalance: - -Norm Unbalance --------------- - -This command is used to construct a convergence test which uses the norm of the right hand side of the matrix equation, i.e. :math:`b` vector in :math:`Ax=b`, to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the unbalanced forces in the system. The command to create a NormUnbalance test is the following: - -.. function:: test NormUnbalance $tol $iter <$pFlag> <$nType> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - - $tol, |float|, the tolerance criteria used to check for convergence - $iter, |integer|, the max number of iterations to check before returning failure condition - $pFlag, |integer|, " | print flag (optional: default is 0) valid options: - | 0 print nothing - | 1 print information on norms each time test() is invoked - | 2 print information on norms and number of iterations at end of successful test - | 4 at each step it will print the norms and also the \Delta U and R(U) vectors. - | 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test." - $nType, |integer|, "type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm ...))" - - -.. note:: - - When using a :ref:`penalty` constraint handler, large forces (those necessary to enforce the constraint) are included in the :math:`b` vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the :math:`b` vector. - -.. admonition:: Example: - - The following examples demonstrate the command to create a NormUnbalance test which allows 10 iterations till failure with a 2-norm in the :math:`b` vector, i.e. :math:`\sqrt(b^T b)` of **1.0e-2**. - - 1. **Tcl Code** - - .. code-block:: tcl - - test NormUnbalance 1.0e-2 10 2 - - 2. **Python Code** - - .. code-block:: python - - test('NormUnbalance', 1.0e-2, 10, 2) - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/PenaltyMethod.rst.txt b/docs/_sources/user/manual/analysis/PenaltyMethod.rst.txt deleted file mode 100644 index da4b0df9..00000000 --- a/docs/_sources/user/manual/analysis/PenaltyMethod.rst.txt +++ /dev/null @@ -1,36 +0,0 @@ -Penalty Method -^^^^^^^^^^^^^^ - -This command is used to construct a PenaltyMethod constraint handler, which enforces the constraints by using the penalty method. The following is the command to construct such a constraint handler: - -.. function:: constraints Penalty $alphaS $alphaM - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $alphaS, |float|, :math:`\alpha_S` factor on singe points. - $alphaM, |float|, :math:`\alpha_M` factor on multi-points. - - -.. warning:: - The degree to which the constraints are enforced is dependent on the penalty values chosen. Problems can arise if these values are too small (constraint not enforced strongly enough) or too large (problems associated with conditioning of the system of equations). - -.. admonition:: Example - - The following example shows how to construct a Penalty Method constraint handler - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer Penalty 1.0e10 1.0e10 - - - 2. **Python Code** - - .. code-block:: python - - numberer('Penalty', 1.0e10, 1.0e10) - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/PlainConstraints.rst.txt b/docs/_sources/user/manual/analysis/PlainConstraints.rst.txt deleted file mode 100644 index 148c5414..00000000 --- a/docs/_sources/user/manual/analysis/PlainConstraints.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -Plain Constraint Handler -^^^^^^^^^^^^^^^^^^^^^^^^ - -This command is used to construct a Plain constraint handler. A plain constraint handler can only enforce homogeneous single point constraints (fix command) and multi-point constraints constructed where the constraint matrix is equal to the identity (equalDOF command). The following is the command to construct a plain constraint handler: - -.. function:: constraints Plain - -.. warning:: - -This constraint handler can only enforce homogeneous single point constraints (fix command) and multi-pont constraints where the constraint matrix is equal to the identity (equalDOF command). - -It does not follow constraints, by that we mean the constrained node in a MP_Constraint cannot be a retained node in another MP_Constraint. - - -.. admonition:: Example - - The following example shows how to construct a reverse Cuthill-McKee numberer. - - 1. **Tcl Code** - - .. code-block:: tcl - - constraints Plain - - - 2. **Python Code** - - .. code-block:: python - - constraints('Plain') - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/PlainNumberer.rst.txt b/docs/_sources/user/manual/analysis/PlainNumberer.rst.txt deleted file mode 100644 index adf710eb..00000000 --- a/docs/_sources/user/manual/analysis/PlainNumberer.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -Plain Numberer -^^^^^^^^^^^^^^ - -This command is used to construct a Plain degree-of-freedom numbering object to provide the mapping between the degrees-of-freedom at the nodes and the equation numbers. A Plain numberer just takes whatever order the domain gives it nodes and numbers them, this ordering is both dependent on node numbering and size of the model. The command to construct a Plain numberer is a follows: - - -.. function:: numberer Plain - -.. note:: - - For very small problems and for the sparse matrix solvers which provide their own numbering scheme, order is not really important so plain numberer is just fine. For large models and analysis using solver types other than the sparse solvers, the order will have a major impact on performance of the solver and the plain handler is a poor choice. - - -.. admonition:: Example - - The following example shows how to construct a plain numberer - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer Plain - - - 2. **Python Code** - - .. code-block:: python - - numberer('Plain') - - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/ProfileSPD.rst.txt b/docs/_sources/user/manual/analysis/ProfileSPD.rst.txt deleted file mode 100644 index 95e5e6ee..00000000 --- a/docs/_sources/user/manual/analysis/ProfileSPD.rst.txt +++ /dev/null @@ -1,60 +0,0 @@ -ProfileSPD System ------------------ - -This command is used to construct a ProfileSPD linear system of equation object. As the name implies, this class is used for symmetric positive definite matrix systems. The matrix is stored as shown below in a 1 dimensional array with only those values below the first non-zero row in any column being stored. This is sometimes also referred to as a skyline storage scheme. The following command is used to construct such a system: - -.. function:: system ProfileSPD - -An n×n matrix A= is a symmetric positive definite matrix if: - -1. :math:`a_{i,j} = a_{j,i}` -2. :math:`y^T A y != 0` for all non-zero vectors y with real entries (:math:`y \in \mathbb{R}^n`). - -In the skyline or profile storage scheme only the entries below the first no-zero row entry in any column are stored if storing by rows: The reason for this is that as no reordering of the rows is required in gaussian eleimination because the matrix is SPD, no non-zero entries will ocur in the elimination process outside the area stored. - -For example, a symmetric 6-by-6 matrix with a structure as shown below: - -.. math:: - - \begin{bmatrix} - A_{11} & A_{12} & 0 & 0 & 0 \\ - & A_{22} & A_{23} & 0 & A_{25} \\ - & & A_{33} & 0 & 0 \\ - & & & A_{44} & A_{45} \\ - & sym & & & A_{55} - \end{bmatrix} - -The matrix is stored as 1-d array - -.. math:: - - \begin{bmatrix} - A_{11} & A_{12} & A_{22} & A_{23} & A_{33} & A_{44} & A_{25} & 0 & A_{45} & A_{55} - \end{bmatrix} - -with a further array containing indices of diagonal elements: - -.. math:: - - \begin{bmatrix} - 1 & 3 & 5 & 6 & 10 - \end{bmatrix} - -.. admonition:: Example - - The following example shows how to construct a ProfileSPD system - - 1. **Tcl Code** - - .. code-block:: tcl - - system ProfileSPD - - - 2. **Python Code** - - .. code-block:: python - - system('ProfileSPD') - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/RCM.rst.txt b/docs/_sources/user/manual/analysis/RCM.rst.txt deleted file mode 100644 index 19ad029c..00000000 --- a/docs/_sources/user/manual/analysis/RCM.rst.txt +++ /dev/null @@ -1,36 +0,0 @@ -Reverse Cuthill McKee Numberer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This command is used to construct an RCM degree-of-freedom numbering object to provide the mapping between the degrees-of-freedom at the nodes and the equation numbers. An RCM numberer uses the reverse Cuthill-McKee scheme to order the matrix equations. The command to construct an RCM numberer is a follows: - -.. function:: numberer RCM - -.. note:: - - For very small problems and for the sparse matrix solvers which provide their own numbering scheme, order is not really important so plain numberer is just fine. For large models and analysis using solver types other than the sparse solvers, the order will have a major impact on performance of the solver and the plain handler is a poor choice. - -.. admonition:: Example - - The following example shows how to construct a reverse Cuthill-McKee numberer. - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer RCM - - - 2. **Python Code** - - .. code-block:: python - - numberer('RCM') - -.. [REFERNCES] - - E. Cuthill and J. McKee. Reducing the bandwidth of sparse symmetric matrices In Proc. 24th Nat. Conf. ACM, pages 157–172, 1969. - - J. A. George and J. W-H. Liu, Computer Solution of Large Sparse Positive Definite Systems, Prentice-Hall, 1981 - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/RelativeNormUnbalance.rst.txt b/docs/_sources/user/manual/analysis/RelativeNormUnbalance.rst.txt deleted file mode 100644 index 62ac6077..00000000 --- a/docs/_sources/user/manual/analysis/RelativeNormUnbalance.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -.. _RelativeNormUnbalance: - -Relative Norm Unbalance ------------------------ - -This command is used to construct a convergence test which uses the norms of the right hand side of the matrix equation, i.e. :math:`b` vector in :math:`Ax=b`, to determine if convergence has been reached. It uses the ratio of the current norm to the first norm, i.e. :math:`\frac{\sqrt({b_i}^T{b_i})}{\sqrt({b_1}^T{b_1})}. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the unbalanced forces in the system. The command to create a RelativeNormUnbalance test is the following: - -.. function:: test RelativeNormUnbalance $tol $iter <$pFlag> <$nType> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $tol, |float|, the tolerance criteria used to check for convergence - $iter, |integer|, the max number of iterations to check before returning failure condition - $pFlag, |integer|, " | print flag (optional: default is 0) valid options: - | 0 print nothing - | 1 print information on norms each time test() is invoked - | 2 print information on norms and number of iterations at end of successful test - | 4 at each step it will print the norms and also the \Delta U and R(U) vectors. - | 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test." - $nType, |integer|, "type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm ...))" - -.. note:: - - The convergence test compares the current norm of the unbalance with the norm of the first step to determine if convergence has been achieved. As a consequence it will always take at least two steps to achieve convergence. - - If numerically the solution has a very small unbalance at the first step, this may mean that the test may never indicate success even though the solution had indeed converged to a solution. This is because machine precision and numerical round-off limit how small the unbalance can become. - - -.. admonition:: Example: - - The following examples demonstrate the command to create a RelativeNormUnbalance test which allows 10 iterations till failure with a 2-norm in the :math:`b` vector, i.e. :math:`\sqrt(b^T b)` of **1.0e-2**. - - 1. **Tcl Code** - - .. code-block:: tcl - - test RelativeNormUnbalance 1.0e-2 10 2 - - 2. **Python Code** - - .. code-block:: python - - test('RelativeNormUnbalance', 1.0e-2, 10, 2) - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/SparseSYM.rst.txt b/docs/_sources/user/manual/analysis/SparseSYM.rst.txt deleted file mode 100644 index 45cbc7ea..00000000 --- a/docs/_sources/user/manual/analysis/SparseSYM.rst.txt +++ /dev/null @@ -1,32 +0,0 @@ -SparseSYM Solver ----------------- - -This command is used to construct a sparse symmetric system of equations which uses a row-oriented solution method in the solution phase. The following command is used to construct such a system: - -.. function:: system SparseSYM - -.. note:: - - Versions of OpenSees up to and including 2.2.0 used SparseSPD instead of SparseSYM as the option to create this system. The code is more general than the SPD moniker implies, working for negative definite as well as positive definite. For backward compatibility this old option continues to work. - -.. admonition:: Example - - The following example shows how to construct a SparseSYM system: - - 1. **Tcl Code** - - .. code-block:: tcl - - system SparseSYM - - 2. **Python Code** - - .. code-block:: python - - system('SparseSYM') - -Code developed by: `J. Peng `_ - -.. [REFERENCES] - -Kincho H. Law and David R. McKay, “A Parallel Row-Oriented Sparse Solution Method for Finite Element Structural Analysis,” International Journal for Numerical Methods in Engineering, 36:2895-2919, 1993. diff --git a/docs/_sources/user/manual/analysis/SuperLU.rst.txt b/docs/_sources/user/manual/analysis/SuperLU.rst.txt deleted file mode 100644 index 3f7e229c..00000000 --- a/docs/_sources/user/manual/analysis/SuperLU.rst.txt +++ /dev/null @@ -1,35 +0,0 @@ -SuperLU System --------------- - -This command is used to construct a SparseGEN linear system of equation object. As the name implies, this class is used for sparse matrix systems. The solution of the sparse matrix is carried out using .. `SuperLU `_. To following command is used to construct such a system: - -.. function:: system SuperLU - -.. note:: - - 1. When using the SuperLU system, the software will renumber the equations to ensure a fast solve. As a consequence it is a waste of time specifying anything but a Plain numberer. - 2. The original and still working command was ``system SparseGEN`` - -.. admonition:: Example - - The following example shows how to construct a SuperLU system - - 1. **Tcl Code** - - .. code-block:: tcl - - system SuperLU - - 2. **Python Code** - - .. code-block:: python - - system('SuperLU') - - -Code developed by: |fmk| - -.. [REFERENCES] - - James W. Demmel and Stanley C. Eisenstat and John R. Gilbert and Xiaoye S. Li and Joseph W. H. Liu, "A supernodal approach to sparse partial pivoting", SIAM J. Matrix Analysis and Applications, 20(3), 720-755, 1999. - diff --git a/docs/_sources/user/manual/analysis/TransformationMethod.rst.txt b/docs/_sources/user/manual/analysis/TransformationMethod.rst.txt deleted file mode 100644 index 40bd4ac1..00000000 --- a/docs/_sources/user/manual/analysis/TransformationMethod.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -Transformation Method -^^^^^^^^^^^^^^^^^^^^^ - -This command is used to construct a ``PenaltyMethod`` constraint handler, which enforces the constraints by using the penalty method. The following is the command to construct such a constraint handler: - -.. function:: constraints Transformation - -.. note:: - - The single-point constraints when using the transformation method are done directly. The matrix equation is not manipulated to enforce them, rather the trial displacements are set directly at the nodes at the start of each analysis step. -Great care must be taken when multiple constraints are being enforced as the transformation method does not follow constraints: - 1. If a node is fixed, constrain it with the fix command and not equalDOF or other type of constraint. - - 2. If multiple nodes are constrained, make sure that the retained node is not constrained in any other constraint. - -.. admonition:: Example - - The following example shows how to construct a Lagrange constraint handler - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer Transformation - - - 2. **Python Code** - - .. code-block:: python - - numberer('Transformation') - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/Umfpack.rst.txt b/docs/_sources/user/manual/analysis/Umfpack.rst.txt deleted file mode 100644 index 8b4d36c8..00000000 --- a/docs/_sources/user/manual/analysis/Umfpack.rst.txt +++ /dev/null @@ -1,38 +0,0 @@ -Umfpack System --------------- - -This command is used to construct a sparse system of equations which uses the `UmfPack `_ solver. The following command is used to construct such a system: - -.. function:: system Umfpack <-lvalueFact $LVALUE> - -(LVALUE*the number of nonzero entries) is the amount of additional memory set aside for fill in during the matrix solution, by default the LVALUE factor is 10. You only need to experiment with this if you get error messages back about LVALUE being too small. - -.. admonition:: Example - - The following example shows how to construct a SuperLU system - - 1. **Tcl Code** - - .. code-block:: tcl - - system Umfpack - - 2. **Python Code** - - .. code-block:: python - - system('Umfpack') - - -Code developed by: |fmk| - -.. [REFERNCES] - - 1. A column pre-ordering strategy for the unsymmetric-pattern multifrontal method, T. A. Davis, ACM Transactions on Mathematical Software, vol 30, no. 2, June 2004, pp. 165-195. - - 2. Algorithm 832: UMFPACK, an unsymmetric-pattern multifrontal method, T. A. Davis, ACM Transactions on Mathematical Software, vol 30, no. 2, June 2004, pp. 196-199. - - 3. A combined unifrontal/multifrontal method for unsymmetric sparse matrices, T. A. Davis and I. S. Duff, ACM Transactions on Mathematical Software, vol. 25, no. 1, pp. 1-19, March 1999. - - 4. An unsymmetric-pattern multifrontal method for sparse LU factorization, T. A. Davis and I. S. Duff, SIAM Journal on Matrix Analysis and Applications, vol 18, no. 1, pp. 140-158, Jan. 1997. - \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/algorithm/BFGS.rst.txt b/docs/_sources/user/manual/analysis/algorithm/BFGS.rst.txt new file mode 100644 index 00000000..8a909054 --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/BFGS.rst.txt @@ -0,0 +1,19 @@ +.. _BFGS: + +BFGS Algorithm +---------------- +.. function:: algorithm BFGS <$count> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $count + - |integer| + - number of iterations within a time step until a new tangent is formed + + +This command is used to construct a BFGS algorithm object for symmetric systems which performs successive rank-two updates of the tangent at the first iteration of the current time step. diff --git a/docs/_sources/user/manual/analysis/algorithm/Broyden.rst.txt b/docs/_sources/user/manual/analysis/algorithm/Broyden.rst.txt new file mode 100644 index 00000000..aa62de5e --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/Broyden.rst.txt @@ -0,0 +1,19 @@ +.. _Broyden: + +Broyden Algorithm +-------------------------------- +.. function:: algorithm Broyden <$count> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $count + - |integer| + - number of iterations within a time step until a new tangent is formed + + +This command is used to construct a Broyden algorithm object for general unsymmetric systems which performs successive rank-one updates of the tangent at the first iteration of the current time step. \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/algorithm/KrylovNewton.rst.txt b/docs/_sources/user/manual/analysis/algorithm/KrylovNewton.rst.txt new file mode 100644 index 00000000..6d5bb8bb --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/KrylovNewton.rst.txt @@ -0,0 +1,30 @@ +.. _KrylovNewton: + +Krylov-Newton Algorithm +-------------------------------- +.. function:: algorithm KrylovNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $tangIter + - |string| + - tangent to iterate on, options are current, initial, noTangent. default is current. + * - $tangIncr + - |string| + - tangent to increment on, options are current, initial, noTangent. default is current + * - $maxDim + - |float| + - max number of iterations until the tangent is reformed and acceleration restarts (default = 3) of iterations within a time step until a new tangent is formed + + + +This command is used to construct a KrylovNewton algorithm object which uses a modified Newton method with Krylov subspace acceleration to advance to the next time step. + +.. note:: + References: + * Scott, M.H. and G.L. Fenves. "A Krylov Subspace Accelerated Newton Algorithm: Application to Dynamic Progressive Collapse Simulation of Frames." Journal of Structural Engineering, 136(5), May 2010. DOI \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/algorithm/ModifiedNewton.rst.txt b/docs/_sources/user/manual/analysis/algorithm/ModifiedNewton.rst.txt new file mode 100644 index 00000000..09ebb72d --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/ModifiedNewton.rst.txt @@ -0,0 +1,18 @@ +.. _ModifiedNewton: + +Modified Newton Algorithm +-------------------------------- +.. function:: algorithm ModifiedNewton <-initial> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - -initial + - |string| + - optional flag to indicate to use initial stiffness iterations + +This command is used to construct a ModifiedNewton algorithm object, which uses the modified newton-raphson algorithm to solve the nonlinear residual equation. diff --git a/docs/_sources/user/manual/analysis/algorithm/NewtonLineSearch.rst.txt b/docs/_sources/user/manual/analysis/algorithm/NewtonLineSearch.rst.txt new file mode 100644 index 00000000..445c1245 --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/NewtonLineSearch.rst.txt @@ -0,0 +1,39 @@ +.. _NewtonLineSearch: + +Newton Line Search Algorithm +---------------- +This command is used to construct a NewtonLineSearch algorithm object which introduces line search to the Newton-Raphson algorithm to solve the nonlinear residual equation. Line search increases the effectiveness of the Newton method when convergence is slow due to roughness of the residual. The command is of the following form: + +.. function:: algorithm NewtonLineSearch <-type $typeSearch> <-tol $tol> <-maxIter $maxIter> <-minEta $minEta> <-maxEta $maxEta> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $typeSearch, |string|, Line Search Algorithm. Optional Default is InitialInterpolated. Valid Types are: Bisection Secant RegulaFalsi + InitialInterpolated. + $tol, |float|, tolerance for search. optional. The default is 0.8. + $maxIter, |integer|, maximum number of iteration to try. The default is 10. + $minEta, |float|, a minimum :math:`\eta` value. Optional; The default is 0.1 + $maxEta, |float|, a maximum :math:`\eta` value. Optional; The default is 10.0 + +Theory +^^^^^^^^^^^^^^ + +The rationale behind line search is that: + 1. The direction behind :math:`\delta_U` found by the Newton-Raphson method is often a good direction, but the step size :math:`\Delta_U` is not. + 2. It is cheaper to compute the residual for several point along :math:`\Delta_U` rather than form and factor a new system Jacobian. + +In NewtonLineSearch, the regular Newton-Raphson method is used to compute the :math:`\Delta_U` but the update that is used is modified.. The modified update is: + +:math:`U_{n+1} = U_n + \eta \delta_U` + + +The different line search algorithms use different root finding methods to obtain \eta\,\!, a root to the function s(\eta) defined as: + +:math:`s_\eta = \delta_U R(U_{n} + \eta \delta_U)` + +with +:math:`s_0 = \delta-U R(U_n)` + +Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/algorithm/SecantNewton.rst.txt b/docs/_sources/user/manual/analysis/algorithm/SecantNewton.rst.txt new file mode 100644 index 00000000..cb786b55 --- /dev/null +++ b/docs/_sources/user/manual/analysis/algorithm/SecantNewton.rst.txt @@ -0,0 +1,32 @@ +.. _SecantNewton: + +Secant Newton Algorithm +---------------- +.. function:: algorithm SecantNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $tangIter + - |string| + - tangent to iterate on, options are current, initial, noTangent. default is current. + * - $tangIncr + - |string| + - tangent to increment on, options are current, initial, noTangent. default is current + * - $maxDim + - |float| + - max number of iterations until the tangent is reformed and acceleration restarts (default = 3) of iterations within a time step until a new tangent is formed + +This command is used to construct a SecantNewton algorithm object which uses the two-term update to accelerate the convergence of the modified newton method. + +.. note:: + * The default "cut-out" values recommended by Crisfield (R1=3.5, R2=0.3) are used. + +.. note:: + References: + * Crisfield, M.A. "Non-linear Finite Element Analysis of Solids and Structures", Vol. 1, Wiley, 1991. + diff --git a/docs/_sources/user/manual/analysis/integrator.rst.txt b/docs/_sources/user/manual/analysis/integrator.rst.txt index fd6dbc15..5af88231 100644 --- a/docs/_sources/user/manual/analysis/integrator.rst.txt +++ b/docs/_sources/user/manual/analysis/integrator.rst.txt @@ -43,7 +43,6 @@ Transient Integrators: integrator/HHT integrator/GeneralizedAlpha integrator/TRBDF2 - integrator/TRBDF3 integrator/ExplicitDifference diff --git a/docs/_sources/user/manual/analysis/integrator/ArcLength.rst.txt b/docs/_sources/user/manual/analysis/integrator/ArcLength.rst.txt new file mode 100644 index 00000000..077f6d73 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/ArcLength.rst.txt @@ -0,0 +1,22 @@ +.. _ArcLengthControl: + +Arc-Length Control +-------------------------------- +.. function:: integrator ArcLength $s $alpha + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $s + - |float| + - the arcLength + * - $alpha + - |float| + - a scaling factor on the reference loads. + + +This command is used to construct an ArcLength integrator object. In an analysis step with ArcLength we seek to determine the time step that will result in our constraint equation being satisfied. \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/integrator/CentralDifference.rst.txt b/docs/_sources/user/manual/analysis/integrator/CentralDifference.rst.txt new file mode 100644 index 00000000..b8650c34 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/CentralDifference.rst.txt @@ -0,0 +1,28 @@ +.. _CentralDifference: + +Central Difference +-------------------------------- +.. function:: integrator CentralDifference + +.. note:: + * The calculation of :math:`U_{t+\Delta t}`, as shown below, is based on using the equilibrium equation at time t. For this reason the method is called an explicit integration method. + * If there is no rayleigh damping and the C matrix is 0, for a diagonal mass matrix a diagonal solver may and should be used. + * For stability, :math:`\frac{\Delta t}{T_n} < \frac{1}{\pi}` + + +THEORY: +^^^^^^^^^ + +The Central difference approximations for velocity and acceleration: + + :math:` v_n = \frac{d_{n+1} - d_{n-1}}{2 \Delta t}` + + :math:` a_n = \frac{d_{n+1} - 2 d_n + d_{n-1}}{\Delta t^2}` + +In the Central Difference method we determine the displacement solution at time :math:`t+\delta t` by considering the the eqilibrium equation for the finite element system in motion at time t: + + :math:`M \ddot U_t + C \dot U_t + K U_t = R_t` + +which when using the above two expressions of becomes: + + :math:` \left ( \frac{1}{\Delta t^2} M + \frac{1}{2 \Delta t} C \right ) U_{t+\Delta t} = R_t - \left (K - \frac{2}{\Delta t^2}M \right )U_t - \left (\frac{1}{\Delta t^2}M - \frac{1}{2 \Delta t} C \right) U_{t-\Delta t} ` \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/integrator/DisplacementControl.rst.txt b/docs/_sources/user/manual/analysis/integrator/DisplacementControl.rst.txt index cf55d4ab..3ed7f8b2 100644 --- a/docs/_sources/user/manual/analysis/integrator/DisplacementControl.rst.txt +++ b/docs/_sources/user/manual/analysis/integrator/DisplacementControl.rst.txt @@ -29,7 +29,6 @@ integrator DisplacementControl 1 2 0.1; # displacement control algorithm seeking Theory ======= - If we write the governing finite element equation at :math:`t + \Delta t\` as: .. math:: @@ -42,7 +41,7 @@ where :math:`F(U_{t+\Delta t})\!` are the internal forces which are a function o K_{t+\Delta t}^{*i} \Delta U_{t+\Delta t}^{i+1} = \left ( \lambda^i_{t+\Delta t} + \Delta \lambda^i \right ) F^{ext} - F(U_{t+\Delta t}) -This equation represents n equations in n+1 unknowns, and so an additional equation is needed to solve the equation. For displacement control, we introduce a new constraint equation in which in each analysis step we set to ensure that the displacement increment for the degree-of-freedom \text{dof} at the specified node is: +This equation represents n equations in :math:`n+1`` unknowns, and so an additional equation is needed to solve the equation. For displacement control, we introduce a new constraint equation in which in each analysis step we set to ensure that the displacement increment for the degree-of-freedom \text{dof} at the specified node is: .. math:: @@ -51,7 +50,7 @@ This equation represents n equations in n+1 unknowns, and so an ad MORE TO COME: -In Displacement Control the \Delta_U\text{dof} set to t + \lambda_{t+1} where, +In Displacement Control the :math:`\Delta_U\text{dof}` set to :math:`t + \lambda_{t+1}` where, - \Delta U_\text{dof}^{t+1} = \max \left ( \Delta U_{min}, \min \left ( \Delta U_\text{max}, \frac{\text{numIter}}{\text{lastNumIter}} \Delta U_\text{dof}^{t} \right ) \right ) +:math:`\Delta U_\text{dof}^{t+1} = \max \left ( \Delta U_{min}, \min \left ( \Delta U_\text{max}, \frac{\text{numIter}}{\text{lastNumIter}} \Delta U_\text{dof}^{t} \right ) \right )` diff --git a/docs/_sources/user/manual/analysis/integrator/ExplicitDifference.rst.txt b/docs/_sources/user/manual/analysis/integrator/ExplicitDifference.rst.txt new file mode 100644 index 00000000..85e67f94 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/ExplicitDifference.rst.txt @@ -0,0 +1,26 @@ +.. _ExplicitDifference: + +Explicit Difference +-------------------------------- +.. function:: integrator Explicitdifference + +.. note:: + * When using Rayleigh damping, the damping ratio of high vibration modes is overrated, and the critical time step size will be much smaller. Hence Modal damping is more suitable for this method. + * There should be no zero element on the diagonal of the mass matrix when using this method. + * Diagonal solver should be used when lumped mass matrix is used because the equations are uncoupled. + * For stability :math:`\delta t \leq (\sqrt{\xi^2 +1} - \xi) \frac{2}{\omega}` + + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + integrator Explicitdifference + + 2. **Python Code** + + .. code-block:: python + + integrator('ExplicitDifference') diff --git a/docs/_sources/user/manual/analysis/integrator/GeneralizedAlpha.rst.txt b/docs/_sources/user/manual/analysis/integrator/GeneralizedAlpha.rst.txt new file mode 100644 index 00000000..078a2471 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/GeneralizedAlpha.rst.txt @@ -0,0 +1,95 @@ +.. _GeneralizedAlphaMethod: + +Generalized Alpha Method +-------------------------------- +.. function:: integrator GeneralizedAlpha $alphaM $alphaF <$gamma $beta> + +This command is used to construct a Generalized :math:`\alpha` integration object. This is an implicit method that like the HHT method allows for high frequency energy dissipation and second order accuracy, i.e. :math:`\Delta t^2`. Depending on choices of input parameters, the method can be unconditionally stable. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + integrator Explicitdifference + + 2. **Python Code** + + .. code-block:: python + + integrator('ExplicitDifference') + +.. note:: + * :math:` \alpha_F` and :math:`\alpha_M` are defined differently that in the paper, we use :math:`\alpha_F = (1-\alpha_f)` and :math:`\alpha_M=(1-\gamma_m)` where :math:`\alpha_f` and :math:`\alpha_m` are those used in the paper. + * Like Newmark and all the implicit schemes, the unconditional stability of this method applies to linear problems. There are no results showing stability of this method over the wide range of nonlinear problems that potentially exist. Experience indicates that the time step for implicit schemes in nonlinear situations can be much greater than those for explicit schemes. + * :math:` \alpha_M = 1.0, \alpha_F = 1.0` produces the Newmark Method. + * :math:` \alpha_M = 1.0` corresponds to the HHT method. + * The method is second-order accurate provided :math:`\gamma = \tfrac{1}{2} + \alpha_M - \alpha_F` + * The method is unconditionally stable provided :math:`\alpha_M >= \alpha_F >= \tfrac{1}{2}, \beta>=\tfrac{1}{4} +\tfrac{1}{2}(\gamma_M - \gamma_F)` + * :math:`\gamma` and :math:`\beta` are optional. The default values ensure the method is unconditionally stable, second order accurate and high frequency dissipation is maximized. + +The defaults are: + +.. math:: + + \gamma = \tfrac{1}{2} + \gamma_M - \gamma_F + +and + +.. math:: + + \beta = \tfrac{1}{4}(1 + \gamma_M - \gamma_F)^2 + + +Theory +^^^^^^^^ + +The Generalized :math:`\alpha` method (sometimes called the :math:`\alpha` method) is a one step implicit method for solving the transient problem which attempts to increase the amount of numerical damping present without degrading the order of accuracy. In the HHT method, the same Newmark approximations are used: + +.. math:: + U_{t+\Delta t} = U_t + \Delta t \dot U_t + [(0.5 - \beta) \Delta t^2] \ddot U_t + [\beta \Delta t^2] \ddot U_{t+\Delta t} + +.. math:: + + \dot U_{t+\Delta t} = \dot U_t + [(1-\gamma)\Delta t] \ddot U_t + [\gamma \Delta t ] \ddot U_{t+\Delta t} + +but the time-discrete momentum equation is modified: + +.. math:: + + R_{t + \alpha_M \Delta t} = F_{t+\Delta t}^{ext} - M \ddot U_{t + \alpha_M \Delta t} - C \dot U_{t+\alpha_F \Delta t} - F^{int}(U_{t + \alpha_F \Delta t}) + + +where the displacements and velocities at the intermediate point are given by: + +.. math:: + + U_{t+ \alpha_F \Delta t} = (1 - \alpha_F) U_t + \alpha_F U_{t + \Delta t} + +.. math:: + + \dot U_{t+\alpha_F \Delta t} = (1-\alpha_F) \dot U_t + \alpha_F \dot U_{t + \Delta t} + +.. math:: + + \ddot U_{t+\alpha_M \Delta t} = (1-\alpha_M) \ddot U_t + \alpha_M \ddot U_{t + \Delta t} + +Following the methods outlined for Newmark method, linearization of the nonlinear momentum equation results in the following linear equations: + +.. math:: + K_{t+\Delta t}^{*i} d U_{t+\Delta t}^{i+1} = R_{t+\Delta t}^i + +where + +.. math:: + + K_{t+\Delta t}^{*i} = \alpha_F K_t + \frac{\alpha_F \gamma}{\beta \Delta t} C_t + \frac{\alpha_M}{\beta \Delta t^2} M + +and + +.. math:: + R_{t+\Delta t}^i = F_{t + \Delta t}^{ext} - F(U_{t + \alpha F \Delta t}^{i-1})^{int} - C \dot U_{t+\alpha F \Delta t}^{i-1} - M \ddot U_{t+ \alpha M \Delta t}^{i-1} + + +The linear equations are used to solve for :math:`U_{t+\alpha F \Delta t}, \dot U_{t + \alpha F \Delta t} \ddot U_{t+ \alpha M \Delta t}`. Once convergence has been achieved the displacements, velocities and accelerations at time :math:`t + \Delta t` can be computed. \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/integrator/HHT.rst.txt b/docs/_sources/user/manual/analysis/integrator/HHT.rst.txt new file mode 100644 index 00000000..c0cbd007 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/HHT.rst.txt @@ -0,0 +1,97 @@ +.. _HilberHughesTaylorMethod: + +Hilber-Hughes-Taylor Method +-------------------------------- +.. function:: integrator HHT $alpha <$gamma $beta> + +This command is used to construct a Hilber-Hughes-Taylor (HHT) integration object. This is an implicit method that allows for energy dissipation and second order accuracy (which is not possible with the regular Newmark method). Depending on choices of input parameters, the method can be unconditionally stable. + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $alpha + - |float| + - :math:`\alpha` factor + * - $gamma + - |float| + - :math:`\gamma` factor + * - $beta + - |float| + - :math:`\beta` factor + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + integrator HHT 0.9 + + 1. **Python Code** + + .. code-block:: python + + integrator('HHT', 0.9) + +.. note:: + :math:`\alpha` is defined differently that in the paper, we use :math:`\alpha = \alpha_{HHT} - 1` where :math:`\alpha_{HHT}` is that used in the paper. + + * Like Newmark and all the implicit schemes, the unconditional stability of this method applies to linear problems. There are no results showing stability of this method over the wide range of nonlinear problems that potentially exist. Experience indicates that the time step for implicit schemes in nonlinear situations can be much greater than those for explicit schemes. + * :math:`\alpha = 1.0` corresponds to the Newmark method. + * :math:`\alpha` should be between 0.67 and 1.0. The smaller the :math:`\alpha` the greater the numerical damping. + * :math:`\gamma` and :math:`\beta` are optional. The default values ensure the method is second order accurate and unconditionally stable when :math:`\alpha` is :math:`\tfrac{2}{3} <= \alpha <= 1.0`. The defaults are: :math:`\beta = \frac{(2 - \alpha)^2}{4}` and :math:`\gamma = \frac{3}{2} - \alpha` + + +Theory +^^^^^^^^ +The HHT method (sometimes called the :math:` \alpha` method) is a one step implicit method for solving the transient problem which attempts to increase the amount of numerical damping present without degrading the order of accuracy. In the HHT method, the same Newmark approximations are used: + +.. math:: + + U_{t+\Delta t} = U_t + \Delta t \dot U_t + [(0.5 - \beta) \Delta t^2] \ddot U_t + [\beta \Delta t^2] \ddot U_{t+\Delta t} + +.. math:: + + \dot U_{t+\Delta t} = \dot U_t + [(1-\gamma)\Delta t] \ddot U_t + [\gamma \Delta t ] \ddot U_{t+\Delta t} + +but the time-discrete momentum equation is modified: + +.. math:: + + R_{t + \alpha \Delta t} = F_{t+\Delta t}^{ext} - M \ddot U_{t + \Delta t} - C \dot U_{t+\alpha \Delta t} - F^{int}(U_{t + \alpha \Delta t}) + +` + +where the displacements and velocities at the intermediate point are given by: + +.. math:: + + U_{t+ \alpha \Delta t} = (1 - \alpha) U_t + \alpha U_{t + \Delta t} + +.. math:: + + \dot U_{t+\alpha \Delta t} = (1-\alpha) \dot U_t + \alpha \dot U_{t + \Delta t} + +Following the methods outlined for Newmarks method, loinearization of the nonlinear momentum equation results in the following linear equations: + +.. math:: + + K_{t+\Delta t}^{*i} d U_{t+\Delta t}^{i+1} = R_{t+\Delta t}^i + +where + +.. math:: + + K_{t+\Delta t}^{*i} = \alpha K_t + \frac{\alpha \gamma}{\beta \Delta t} C_t + \frac{1}{\beta \Delta t^2} M + +and + +.. math:: + + R_{t+\Delta t}^i = F_{t + \Delta t}^{ext} - F(U_{t + \alpha \Delta t}^{i-1})^{int} - C \dot U_{t+\alpha \Delta t}^{i-1} - M \ddot U_{t+ \Delta t}^{i-1} + +The linear equations are used to solve for :math:`U_{t+\alpha \Delta t}, \dot U_{t + \alpha \Delta t} \ddot U_{t+\Delta t}`. Once convergence has been achieved the displacements and velocities at time :math:`t + \Delta t` can be computed. \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/integrator/LoadControl.rst.txt b/docs/_sources/user/manual/analysis/integrator/LoadControl.rst.txt index cbf8f6b8..984dbe81 100644 --- a/docs/_sources/user/manual/analysis/integrator/LoadControl.rst.txt +++ b/docs/_sources/user/manual/analysis/integrator/LoadControl.rst.txt @@ -1,3 +1,5 @@ +.. _LoadControl: + LoadControl Command ------------------- diff --git a/docs/_sources/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.rst.txt b/docs/_sources/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.rst.txt new file mode 100644 index 00000000..c8743f66 --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/MinimumUnbalancedDisplacementNorm.rst.txt @@ -0,0 +1,35 @@ +.. _MinimumUnbalancedDisplacementNorm: + +MinimumUnbalancedDisplacementNorm +-------------------------------------- + + +This command is used to construct a StaticIntegrator object of type MinUnbalDispNorm. + +.. function:: integrator MinUnbalDispNorm $dlambda11 <$Jd $minLambda $maxLambda> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $dlambda11 + - |float| + - First load increment (pseudo-time step) at the first iteration in the next invocation of the analysis command. + * - $Jd + - |float| + - Factor relating first load increment at subsequent time steps. (optional, default: 1.0) + * - $minLambda + - |float| + - arguments used to bound the load increment (optional, default: $dLambda11) + * - $maxLambda + - |float| + - arguments used to bound the load increment (optional, default: $dLambda11) + +Theory +^^^^^^ +The load increment at iteration i, :math:`d\lambda_{1,i}` is related to load increment at i-1, :math:`d\lambda_{1,i-1}`, and the number of iteration at (i-1), :math:`J_{i-1}` by the following: + +:math:`d\lambda_{1,i} = d\lambda_{1,i-1} \frac{J_d}{J_{i-1}}` \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/integrator/Newmark.rst.txt b/docs/_sources/user/manual/analysis/integrator/Newmark.rst.txt index fd52d6f3..6f233909 100644 --- a/docs/_sources/user/manual/analysis/integrator/Newmark.rst.txt +++ b/docs/_sources/user/manual/analysis/integrator/Newmark.rst.txt @@ -1,3 +1,5 @@ +.. _Newmark: + Newmark Method ------------------- diff --git a/docs/_sources/user/manual/analysis/integrator/TRBDF2.rst.txt b/docs/_sources/user/manual/analysis/integrator/TRBDF2.rst.txt new file mode 100644 index 00000000..4811884a --- /dev/null +++ b/docs/_sources/user/manual/analysis/integrator/TRBDF2.rst.txt @@ -0,0 +1,10 @@ +.. _TRBDF2: + +TRBDF2 +-------------------------------- +.. function:: integrator TRBDF2 + +.. note:: + * As opposed to dividing the time-step in 2 as outlined in the papers, we just switch alternate between the 2 integration strategies,i.e. the time step in our implementation is double that described in the papers. + +This command is used to construct a TRBDF2 integrator object. The TRBDF2 integrator is a composite scheme that alternates between the Trapezoidal scheme and a 3 point backward Euler scheme. It does this in an attempt to conserve energy and momentum, something newmark does not always do. diff --git a/docs/_sources/user/manual/analysis/integrator/gimmeMCK.rst.txt b/docs/_sources/user/manual/analysis/integrator/gimmeMCK.rst.txt index c8264550..e257cc33 100644 --- a/docs/_sources/user/manual/analysis/integrator/gimmeMCK.rst.txt +++ b/docs/_sources/user/manual/analysis/integrator/gimmeMCK.rst.txt @@ -1,3 +1,5 @@ +.. _gimmeMCK: + GimmeMCK Command ------------------- @@ -66,7 +68,7 @@ Assembles A = m*M + c*C + kt*KT + ki*KI printA -file "C.txt" - 1. **Python Code** + 2. **Python Code** .. code-block:: python diff --git a/docs/_sources/user/manual/analysis/lagrangeMultipliers.rst.txt b/docs/_sources/user/manual/analysis/lagrangeMultipliers.rst.txt deleted file mode 100644 index 513e4d00..00000000 --- a/docs/_sources/user/manual/analysis/lagrangeMultipliers.rst.txt +++ /dev/null @@ -1,43 +0,0 @@ -Lagrange Multipliers -^^^^^^^^^^^^^^^^^^^^ - -This command is used to construct a LagrangeMultiplier constraint handler, which enforces the constraints by introducing Lagrange multipliers to the system of equation. The following is the command to construct a plain constraint handler: - -.. function:: constraints Lagrange <$alphaS $alphaM > - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $alphaS, |float|, :math:`\alpha_S` factor on singe points. optional: default = 1.0 - $alphaM, |float|, :math:`\alpha_M` factor on multi-points. optional: default = 1.0 - -.. warning:: - - The Lagrange multiplier method introduces new unknowns to the system of equations. The diagonal part of the system corresponding to these new unknowns is 0.0. This ensure that the system **IS NOT** symmetric positive definite and so do not use a positive definite solver. - -.. admonition:: Example - - The following example shows how to construct a Lagrange constraint handler - - 1. **Tcl Code** - - .. code-block:: tcl - - numberer Lagrange - - - 2. **Python Code** - - .. code-block:: python - - numberer('Lagrange') - -Code Developed by: |fmk| - - - - - - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/analysis/modalProperties.rst.txt b/docs/_sources/user/manual/analysis/modalProperties.rst.txt index b9d5d64c..030974ef 100644 --- a/docs/_sources/user/manual/analysis/modalProperties.rst.txt +++ b/docs/_sources/user/manual/analysis/modalProperties.rst.txt @@ -30,7 +30,7 @@ modalProperties Command .. note:: * This command can be used only if a previous call to :ref:`eigen` has been performed. * This command has only optional arguments, and they can be given in any order. Note, however, that the only requirement is that the **$reportFileName** must follow the **-file** option if used. - * The modal properties are computed and stored in the **Domain** object, so that they can be accessed later in the :ref:`responseSpectrum`. + * The modal properties are computed and stored in the **Domain** object, so that they can be accessed later in the :ref:`responseSpectrumAnalysis`. * This command directly accesses the mass matrix of the model, so it accounts for both nodal masses and element's (distributed) masses. And the element mass matrix can be either lumped or consistent. * The global mass matrix is then stored into a temporary sparse matrix storage, so it can be used for both small and large models. * This command can be used for both 2D problems (-ndm = 2, -ndf = 2 or 3) and 3D problems (-ndm = 3, -ndf = 3, 4 or 6). In both cases the algorithm computes rotational masses. If a node has rotational DOFs, the rotational masses account for both the direct rotational masses (i.e. those input by the user at rotational DOFs) and the effect of translational masses gyrating about the center of mass. If a node has no rotational DOF, only the latter is considered. @@ -39,14 +39,20 @@ modalProperties Command Theory ^^^^^^ | The eigenvalues :math:`\lambda` and the eigenvectors :math:`\Phi` can be obtained after solving the *generalized eigenvalue problem* for two symmetric matrices :math:`K` (stiffness) and :math:`M` (mass) given by: + .. math:: \left (K - \lambda M \right ) \Phi = 0 + | The global mass matrix :math:`M` is given by the assembly of :math:`n` elemental and nodal mass matrices :math:`m_e`: + .. math:: M = \bigwedge_{i=1}^{n}m_e + | :math:`M` is not necessarily diagonal, because some elemental matrices :math:`m_e` may be consistent. However, the computation of :math:`CoM`, :math:`m_t` and :math:`m_f` requires a lumped version of :math:`M`. The global lumped mass matrix :math:`LM` can be computed by the assembly of a diagonalized version of the elemental mass matrices :math:`m_e`: + .. math:: LM = \bigwedge_{i=1}^{n}diag\left(m_e\right) + | :math:`diag\left(m_e\right)` cannot be computed just by summing the summing the components of each row (in beams or solid with higher order interpolation, this would produces negative terms on the diagonal mass matrix that would be unphysical). | Instead we use the **HRZ** algorithm [HintonEtAl1976]_, named after the authors Hinton, Rock and Zienkiewicz: *“The procedure of lumping recommended in view of the infinite possibilities offered by condition (5) is to compute the diagonal terms of the consistent mass matrix and then scale these terms so as to preserve the total mass of the element”*. | The procedure is as follows: @@ -60,20 +66,24 @@ Theory | :math:`diag\left(m_e\right)_j = DC_j \cdot SM_i/SC_i`. | The center of mass :math:`CoM` and the total masses :math:`m_t` and :math:`m_f` of the structure, for each node :math:`n` with position :math:`X_n` and each DOF :math:`i`, can now be easily computed from :math:`LM`: + .. math:: m_{t_i} &= \sum_{n=1}^{Nnodes} LM_{ni}\\ m_{f_i} &= \sum_{n=1}^{Nnodes} LM_{ni}\quad(\text{if}\:i = free)\\ CoM_i &= \frac{\sum_{n=1}^{Nnodes} X_{ni} \cdot LM_{ni}}{m_{f_i}} \quad(\text{if}\:i = free) | The generalized mass matrix is + .. math:: gm = \Phi^T M \Phi + | If the default solver is used in the :ref:`eigen` (-genBandArpack), and the option **-unorm** is not used, the eigenvectors are mass-normalized and :math:`gm` will be an identity matrix, i.e. a diagonal matrix whose diagonal entries are = 1, and whose size is :math:`n_m \times n_m` (where :math:`n_m` is the number of requested eigenvalues). | | The modal participation factor matrix :math:`MPF` is a :math:`n_m \times ndf` matrix (where ndf = 3 in 2D and 6 in 3D), where each row contains the modal participation factors for each DOF. The modal participation factor for a certain mode :math:`i` and DOF :math:`j` indicates how strongly the motion (or rotation) associated to that DOF is represented in the eigenvector :math:`i` .. math:: MPF_{ij} = \frac{\Phi_{i}^T M T_j}{gm_{ii}} | where :math:`T_j` defines the magnitude of the rigid body response to imposed rigid body motion (displacement or infinitesimal rotation) in the DOF :math:`j`. Each :math:`ndf \times 1` block :math:`T_{nj}` corresponds to the node :math:`n` and it is defined as (for the 3D/6DOFs case): + .. math:: T_{nj} = \begin{pmatrix} @@ -92,11 +102,14 @@ Theory e_5 \\ e_6 \\ \end{Bmatrix} + | where :math:`e_j` is 1, and all other :math:`e_p\:(\text{with}\:p \neq j)` are 0. :math:`d_x`, :math:`d_y` and :math:`d_z` are the distances of the node :math:`n` coordinates :math:`X_n=\left(x, y, z\right)` from the center of mass :math:`CoM=\left(x_0, y_0, z_0\right)`. Therefore, the modal participation factors accounts for the masses directly input at translational and rotational DOFs, and also the rotational masses given by the translational masses gyrating about the center of mass. Note, in fact, that even if the user does not input any rotational mass, or even if the user uses 3D solid elements with no rotational DOF, the modal participation factors associated to the rotational DOFs may be :math:`\neq 0`. | | The modal participation mass matrix :math:`MPM` is a :math:`n_m \times ndf` matrix (where ndf = 3 in 2D and 6 in 3D), where each row contains the modal participation masses for each DOF. The modal participation mass for a certain mode :math:`i` and DOF :math:`j` is defined as + .. math:: MPM_{ij} = \frac{\left(\Phi_{i}^T M T_j\right)^2}{gm_{ii}} + | If the modal participation masses for each mode in a particular DOF are summed, it should give the total mass of the structure for that DOF, exlcluding the masses at fixed DOFs. .. [HintonEtAl1976] Hinton, E., Rock, T. & Zienkiewicz, O. (1976). “A note on mass lumping and related processes in the Finite element method.” Earthquake Engineering and Structural Dynamics, 13, 9, p. A112. @@ -122,7 +135,7 @@ Theory modalProperties('-print', '-file', 'ModalReport.txt', '-unorm') - For a complete example that runs an **eigenvalue analysis**, extracts the **modal properties** and runs a **response spectrum analysis**, see the documentation of the :ref:`responseSpectrum` + For a complete example that runs an **eigenvalue analysis**, extracts the **modal properties** and runs a **response spectrum analysis**, see the documentation of the :ref:`responseSpectrumAnalysis` .. admonition:: ReportFile diff --git a/docs/_sources/user/manual/analysis/responseSpectrum.rst.txt b/docs/_sources/user/manual/analysis/responseSpectrumAnalysis.rst.txt similarity index 58% rename from docs/_sources/user/manual/analysis/responseSpectrum.rst.txt rename to docs/_sources/user/manual/analysis/responseSpectrumAnalysis.rst.txt index f159dd35..0b973a7d 100644 --- a/docs/_sources/user/manual/analysis/responseSpectrum.rst.txt +++ b/docs/_sources/user/manual/analysis/responseSpectrumAnalysis.rst.txt @@ -1,20 +1,31 @@ -.. _responseSpectrum: +.. _responseSpectrumAnalysis: -responseSpectrum Command -************************ +responseSpectrumAnalysis Command +******************************** | This command is used to perform a response spectrum analysis. | The response spectrum analysis performs N linear analysis steps, where N is the number of eigenvalues requested in a previous call to :ref:`eigen`. | For each analysis step, it computes the modal displacements. When the i-th analysis step is complete, all previously defined recorders will be called, so they will record all the results requested by the user, pertaining to the current modal displacements. | The modal combination of these modal displacements (and derived results such as beam forces) is up to the user, and can be easily done via TCL or Python scripting. -.. function:: responseSpectrum $tsTag $direction <-scale $scale> <-mode $mode> +| The command can be called in two different ways, depending on how you store the Tn/Sa (response spectrum function) values. +| They can be either stored in a timeSeries ... + +.. function:: responseSpectrumAnalysis $tsTag $direction <-scale $scale> <-mode $mode> + +| ... or in two lists + +.. function:: responseSpectrumAnalysis $direction -Tn $Tn -Sa $Sa <-scale $scale> <-mode $mode> .. csv-table:: :header: "Argument", "Type", "Description" :widths: 10, 10, 40 - $tsTag, |integer|, "The tag of a previously defined :ref:`timeSeries`." + $tsTag, |integer|, "The tag of a previously defined :ref:`timeSeries`. This list stores the Tn and Sa values. If you want to use the timeSeries, you cannot specify the -Tn and -Sa options" + -Tn, |string|, "Tells the command to use the $Tn list, instead of the timeSeries, to get the periods of the response spectrum function" + $Tn, |floatList|, "The list of periods of the response spectrum function" + -Sa, |string|, "Tells the command to use the $Sa list, instead of the timeSeries, to get the accelerations of the response spectrum function" + $Sa, |floatList|, "The list of accelerations of the response spectrum function" $direction, |integer|, "The 1-based index of the excited DOF (1 to 3 for 2D problems, or 1 to 6 for 3D problems)." -scale, |string|, "Tells the command to use a user-defined scale factor for the computed modal displacements. Not used, placeholder for future implementation." $scale, |float|, "User-defined scale factor for the computed modal displacements. Not used, placeholder for future implementation." @@ -43,27 +54,53 @@ Theory .. admonition:: Example 1: Simple call - The following example shows how to call the responseSpectrum command for all modes, using the time series 1 along the DOF 1 (Ux) + The following example shows how to call the responseSpectrumAnalysis command for all modes, using the time series 1 (or lists Tn and Sa) along the DOF 1 (Ux) - 1. **Tcl Code** + 1. **Tcl Code using timeSeries** .. code:: tcl set tsTag 1; # use the timeSeries 1 as response spectrum function set direction 1; # excited DOF = Ux - responseSpectrum $tsTag $direction + responseSpectrumAnalysis $tsTag $direction - 2. **Python Code** + 2. **Tcl Code using lists** + + .. code:: tcl + + set Tn {0.0 0.1 0.4 .... }; # the periods + set Sa {1.9 3.7 4.9 .... }; # the accelerations + set direction 1; # excited DOF = Ux + responseSpectrumAnalysis $direction -Tn $Tn -Sa $Sa + + 3. **Tcl Code using expanded lists** + + .. code:: tcl + + set Tn {0.0 0.1 0.4 .... }; # the periods + set Sa {1.9 3.7 4.9 .... }; # the accelerations + set direction 1; # excited DOF = Ux + responseSpectrumAnalysis $direction -Tn {*}$Tn -Sa {*}$Sa + + 4. **Python Code using timeSeries** .. code:: python tsTag = 1 # use the timeSeries 1 as response spectrum function direction = 1 # excited DOF = Ux - responseSpectrum(tsTag, direction) + responseSpectrumAnalysis(tsTag, direction) + + 5. **Python Code using lists** + + .. code:: python + + Tn = [0.0 0.1 0.4 .... ] # the periods + Sa = [1.9 3.7 4.9 .... ] # the accelerations + responseSpectrumAnalysis(direction, '-Tn', *Tn, '-Sa', *Sa) .. admonition:: Example 2: Iterative call - The following example shows how to call the responseSpectrum command for 1 mode at a time, using the time series 1 along the DOF 1 (Ux) + The following example shows how to call the responseSpectrumAnalysis command for 1 mode at a time, using the time series 1 along the DOF 1 (Ux) 1. **Tcl Code** @@ -72,7 +109,7 @@ Theory set tsTag 1; # use the timeSeries 1 as response spectrum function set direction 1; # excited DOF = Ux for {set i 0} {$i < $num_modes} {incr i} { - responseSpectrum $tsTag $direction -mode [expr $i+1] + responseSpectrumAnalysis $tsTag $direction -mode [expr $i+1] # grab your results here for the i-th modal displacements } @@ -83,12 +120,12 @@ Theory tsTag = 1 # use the timeSeries 1 as response spectrum function direction = 1 # excited DOF = Ux for i in range(num_modes): - responseSpectrum(tsTag, direction, '-mode', i+1) + responseSpectrumAnalysis(tsTag, direction, '-mode', i+1) # grab your results here for the i-th modal displacements .. admonition:: Example 3: Complete Structural Example - .. figure:: responseSpectrum.png + .. figure:: figures/responseSpectrumAnalysis.png :align: center :figclass: align-center @@ -97,13 +134,13 @@ Theory * call the :ref:`eigen` to extract 7 modes of vibration * call the :ref:`modalProperties` to generate the report with modal properties - * call the :ref:`responseSpectrum` to compute the modal displacements and section forces - * in a first example the :ref:`responseSpectrum` is called for all modes. Results are obtained from a recorder after the analysis. - * in a second example the :ref:`responseSpectrum` is called in a for-loop mode-by-mode. Results are obtained within the for-loop usin the :ref:`eleResponse` + * call the :ref:`responseSpectrumAnalysis` to compute the modal displacements and section forces + * in a first example the :ref:`responseSpectrumAnalysis` is called for all modes. Results are obtained from a recorder after the analysis. + * in a second example the :ref:`responseSpectrumAnalysis` is called in a for-loop mode-by-mode. Results are obtained within the for-loop usin the :ref:`eleResponse` * do a CQC modal combination - | :download:`responseSpectrumExample.tcl ` **(TCL)**. - | :download:`responseSpectrumExample.py ` **(Python)**. + | :download:`responseSpectrumAnalysisExample.tcl ` **(TCL)**. + | :download:`responseSpectrumAnalysisExample.py ` **(Python)**. Code Developed by: **Massimo Petracca** at ASDEA Software, Italy diff --git a/docs/_sources/user/manual/analysis/system/Cusp.rst.txt b/docs/_sources/user/manual/analysis/system/Cusp.rst.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/_sources/user/manual/analysis/test/FixedNumberIterations.rst.txt b/docs/_sources/user/manual/analysis/test/FixedNumberIterations.rst.txt new file mode 100644 index 00000000..5615319d --- /dev/null +++ b/docs/_sources/user/manual/analysis/test/FixedNumberIterations.rst.txt @@ -0,0 +1,7 @@ +.. _FixedNumberIterations: + +Fixed Number Iterations Test +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +This page is under construction. This is dummy page to enable the construction of ToC Link \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/test/RelativeEnergyIncr.rst.txt b/docs/_sources/user/manual/analysis/test/RelativeEnergyIncr.rst.txt new file mode 100644 index 00000000..cda4cb28 --- /dev/null +++ b/docs/_sources/user/manual/analysis/test/RelativeEnergyIncr.rst.txt @@ -0,0 +1,7 @@ +.. _RelativeEnergyIncr: + +Relative Energy Increment Test +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +This page is under construction. This is dummy page to enable the construction of ToC Link \ No newline at end of file diff --git a/docs/_sources/user/manual/analysis/test/RelativeNormDispIncr.rst.txt b/docs/_sources/user/manual/analysis/test/RelativeNormDispIncr.rst.txt new file mode 100644 index 00000000..e69de29b diff --git a/docs/_sources/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.rst.txt b/docs/_sources/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.rst.txt new file mode 100644 index 00000000..53ef17a9 --- /dev/null +++ b/docs/_sources/user/manual/analysis/test/TotalRelativeNormDisplacementIncrement.rst.txt @@ -0,0 +1,6 @@ +.. _TotalRelativeNormDisplacementIncrement: + +Total Relative Norm Displacement Increment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This page is under construction. This is dummy page to enable the construction of ToC Link \ No newline at end of file diff --git a/docs/_sources/user/manual/analysisCommands.rst.txt b/docs/_sources/user/manual/analysisCommands.rst.txt index 326079cb..ef692117 100644 --- a/docs/_sources/user/manual/analysisCommands.rst.txt +++ b/docs/_sources/user/manual/analysisCommands.rst.txt @@ -31,6 +31,6 @@ In OpenSees, an analysis is an object which is composed by the aggregation of co analysis/analyze analysis/eigen analysis/modalProperties - analysis/responseSpectrum + analysis/responseSpectrumAnalysis diff --git a/docs/_sources/user/manual/material/section.rst.txt b/docs/_sources/user/manual/material/section.rst.txt index 09060f31..90f2c9fc 100644 --- a/docs/_sources/user/manual/material/section.rst.txt +++ b/docs/_sources/user/manual/material/section.rst.txt @@ -24,17 +24,19 @@ The type of section created and the additional arguments required depends on the The following contain information about secType? and the args required for each of the available section types: -Elastic Section -Fiber Section -NDFiber Section -Wide Flange Section -RC Section -Parallel Section -Section Aggregator -Uniaxial Section -Elastic Membrane Plate Section -Plate Fiber Section -Bidirectional Section -Isolator2spring Section +.. toctree:: + :maxdepth: 1 + + section/ElasticSection + section/NDFiberSection + section/WideFlangeSection + section/RCSection + section/ParallelSection + section/SectionAggregator + section/UniaxialSection + section/ElasticMembranePlateSection + section/PlateFiberSection + section/BidirectionalSection + section/Isolator2springSection diff --git a/docs/_sources/user/manual/material/section/ElasticSection.rst.txt b/docs/_sources/user/manual/material/section/ElasticSection.rst.txt new file mode 100644 index 00000000..43532bc3 --- /dev/null +++ b/docs/_sources/user/manual/material/section/ElasticSection.rst.txt @@ -0,0 +1,6 @@ +.. _ElasticSection: + +ElasticSection +^^^^^^^^^^^^^^^^ + +This page is under construction. This dummy page is created to enable the generation of ToC Link. \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterial.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterial.rst.txt index d910d500..f1bcf335 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterial.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterial.rst.txt @@ -24,17 +24,17 @@ The following subsections contain information about **$matType** .. toctree:: :maxdepth: 1 - uniaxialMaterials/Steel01 - uniaxialMaterials/Steel02 - uniaxialMaterials/Steel4 - uniaxialMaterials/Hysteretic - uniaxialMaterials/ReinforcingSteel - uniaxialMaterials/DoddRestrepo - uniaxialMaterials/RambergOsgoodSteel - uniaxialMaterials/SteelMPF - uniaxialMaterials/UVCuniaxial - uniaxialMaterials/SteelFractureDI - uniaxialMaterials/DuctileFracture + uniaxialMaterials/Steel/Steel01 + uniaxialMaterials/Steel/Steel02 + uniaxialMaterials/Steel/Steel4 + uniaxialMaterials/Steel/Hysteretic + uniaxialMaterials/Steel/ReinforcingSteel + uniaxialMaterials/Steel/DoddRestrepo + uniaxialMaterials/Steel/RambergOsgoodSteel + uniaxialMaterials/Steel/SteelMPF + uniaxialMaterials/Steel/UVCuniaxial + uniaxialMaterials/Steel/SteelFractureDI + uniaxialMaterials/Steel/DuctileFracture #. Concrete Materials @@ -42,15 +42,15 @@ The following subsections contain information about **$matType** .. toctree:: :maxdepth: 1 - uniaxialMaterials/Concrete01 - uniaxialMaterials/Concrete02 - uniaxialMaterials/Concrete04 - uniaxialMaterials/Concrete06 - uniaxialMaterials/Concrete07 - uniaxialMaterials/ConfinedConcrete01 - uniaxialMaterials/ConcreteD - uniaxialMaterials/FRPConfinedConcrete - uniaxialMaterials/ConcreteCM + uniaxialMaterials/Concrete/Concrete01 + uniaxialMaterials/Concrete/Concrete02 + uniaxialMaterials/Concrete/Concrete04 + uniaxialMaterials/Concrete/Concrete06 + uniaxialMaterials/Concrete/Concrete07 + uniaxialMaterials/Concrete/ConfinedConcrete01 + uniaxialMaterials/Concrete/ConcreteD + uniaxialMaterials/Concrete/FRPConfinedConcrete + uniaxialMaterials/Concrete/ConcreteCM #. Some Standard Uniaxial Materials @@ -75,36 +75,36 @@ The following subsections contain information about **$matType** .. toctree:: :maxdepth: 1 - uniaxialMaterials/CastFuse - uniaxialMaterials/ViscousDamper - uniaxialMaterials/BilinearOilDamper - uniaxialMaterials/IMKBilin - uniaxialMaterials/IMKPeakOriented - uniaxialMaterials/IMKPinching - uniaxialMaterials/SAWS - uniaxialMaterials/BARSLIP - uniaxialMaterials/Bond_SP01 - - Strain Penetration Model for Fully Anchored Steel Reinforcing Bars - uniaxialMaterials/Fatigue - uniaxialMaterials/Hardening - uniaxialMaterials/Impact - uniaxialMaterials/Hyperbolic Gap - uniaxialMaterials/LimitState - uniaxialMaterials/PathIndependent - uniaxialMaterials/Pinching4 - uniaxialMaterials/Engineered Cementitious Composites - uniaxialMaterials/SelfCentering - uniaxialMaterials/Viscous - uniaxialMaterials/BoucWen - uniaxialMaterials/BWBN (Pinching Hysteretic Bouc-Wen) - uniaxialMaterials/HystereticPoly - uniaxialMaterials/HystereticAsym (Smooth asymmetric hysteresis) - uniaxialMaterials/HystereticPoly - uniaxialMaterials/HystereticSmooth (Smooth hysteretic material) - uniaxialMaterials/DowelType - uniaxialMaterials/BoucWenInfill - uniaxialMaterials/ViscoelasticGap - uniaxialMaterials/HertzDamp - uniaxialMaterials/JankowskiImpact + uniaxialMaterials/Other/CastFuse + uniaxialMaterials/Other/ViscousDamper + uniaxialMaterials/Other/BilinearOilDamper + uniaxialMaterials/Other/IMKBilin + uniaxialMaterials/Other/IMKPeakOriented + uniaxialMaterials/Other/IMKPinching + uniaxialMaterials/Other/SAWS + uniaxialMaterials/Other/BARSLIP + uniaxialMaterials/Other/Bond_SP01 - - Strain Penetration Model for Fully Anchored Steel Reinforcing Bars + uniaxialMaterials/Other/Fatigue + uniaxialMaterials/Other/Hardening + uniaxialMaterials/Other/Impact + uniaxialMaterials/Other/Hyperbolic Gap + uniaxialMaterials/Other/LimitState + uniaxialMaterials/Other/PathIndependent + uniaxialMaterials/Other/Pinching4 + uniaxialMaterials/Other/Engineered Cementitious Composites + uniaxialMaterials/Other/SelfCentering + uniaxialMaterials/Other/Viscous + uniaxialMaterials/Other/BoucWen + uniaxialMaterials/Other/BWBN (Pinching Hysteretic Bouc-Wen) + uniaxialMaterials/Other/HystereticPoly + uniaxialMaterials/Other/HystereticAsym (Smooth asymmetric hysteresis) + uniaxialMaterials/Other/HystereticPoly + uniaxialMaterials/Other/HystereticSmooth (Smooth hysteretic material) + uniaxialMaterials/Other/DowelType + uniaxialMaterials/Other/BoucWenInfill + uniaxialMaterials/Other/ViscoelasticGap + uniaxialMaterials/Other/HertzDamp + uniaxialMaterials/Other/JankowskiImpact #. PyTzQz uniaxial materials for p-y, t-z and q-z elements @@ -112,14 +112,14 @@ The following subsections contain information about **$matType** .. toctree:: :maxdepth: 1 - uniaxialMaterials/PySimple1 - uniaxialMaterials/TzSimple1 - uniaxialMaterials/QzSimple1 - uniaxialMaterials/PyLiq1 - uniaxialMaterials/TzLiq1 - uniaxialMaterials/QzLiq1 - uniaxialMaterials/PySimple1Gen - uniaxialMaterials/TzSimple1Gen + uniaxialMaterials/PyTzQZ/PySimple1 + uniaxialMaterials/PyTzQZ/TzSimple1 + uniaxialMaterials/PyTzQZ/QzSimple1 + uniaxialMaterials/PyTzQZ/PyLiq1 + uniaxialMaterials/PyTzQZ/TzLiq1 + uniaxialMaterials/PyTzQZ/QzLiq1 + uniaxialMaterials/PyTzQZ/PySimple1Gen + uniaxialMaterials/PyTzQZ/TzSimple1Gen uniaxialMaterials/KikuchiAikenHDR diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete01.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete01.rst.txt similarity index 96% rename from docs/_sources/user/manual/material/uniaxialMaterials/Concrete01.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete01.rst.txt index 11232df9..4d2bacec 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete01.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete01.rst.txt @@ -23,7 +23,7 @@ This command is used to construct a uniaxial Kent-Scott-Park concrete material o Typical Hysteretic Stress-Strain Relation for material -.. figure:: figures/Concrete01.gif +.. figure:: figures/Concrete01/Concrete01.gif :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete02.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete02.rst.txt similarity index 93% rename from docs/_sources/user/manual/material/uniaxialMaterials/Concrete02.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete02.rst.txt index 96c13eeb..94228624 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete02.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete02.rst.txt @@ -25,13 +25,13 @@ This command is used to construct a uniaxial concrete material as described in [ Typical Hysteretic Stress-Strain Relation for material -.. figure:: figures/Concrete02.jpg +.. figure:: figures/Concrete02/Concrete02.jpg :align: center :figclass: align-center Comparison with Concrete01 -.. figure:: figures/Concrete02Hysteretic.jpg +.. figure:: figures/Concrete02/Concrete02Hysteretic.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete04.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete04.rst.txt similarity index 94% rename from docs/_sources/user/manual/material/uniaxialMaterials/Concrete04.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete04.rst.txt index c134fff7..ecd7276f 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/Concrete04.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Concrete/Concrete04.rst.txt @@ -1,7 +1,7 @@ .. _Concrete04 : Concrete04 Material -- Popovics Concrete Material -^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This command is used to construct a uniaxial Popovics concrete material object with degraded linear unloading/reloading stiffness according to the work of Karsan-Jirsa and tensile strength with exponential decay. .. function:: uniaxialMaterial Concrete04 $matTag $fc $ec $ecu $Ec <$fct $et> <$beta> @@ -25,12 +25,12 @@ This command is used to construct a uniaxial Popovics concrete material object w * Model Characteristic: For loading in compression, the envelope to the stress-strain curve follows the model proposed by Popovics (1973) until the concrete crushing strength is achieved and also for strains beyond that corresponding to the crushing strength. For unloading and reloading in compression, the [Karsan1969]_ is used to determine the slope of the curve. For tensile loading, an exponential curve is used to define the envelope to the stress-strain curve. For unloading and reloading in tensile, the secant stiffness is used to define the path. -.. figure:: figures/Concrete04a.jpg +.. figure:: figures/Concrete04/Concrete04A.png :align: center :figclass: align-center -.. figure:: figures/Concrete0B.png +.. figure:: figures/Concrete04/Concrete04B.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/BoucWenInfill.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.rst.txt similarity index 96% rename from docs/_sources/user/manual/material/uniaxialMaterials/BoucWenInfill.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.rst.txt index a4efb1b6..797e534a 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/BoucWenInfill.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.rst.txt @@ -37,17 +37,17 @@ The model may reproduce either force-displacement or stress-strain relationships Parameters $deltak, $deltaf and $psi regulate respectively stiffness, strength degradation and the rate of stiffness degradation. -.. figure:: figures/BoucWenInfill1.png +.. figure:: figures/BoucWenInfill/BoucWenInfill1.png :align: center :figclass: align-center Parameters $Zs, $As and $epsp control the amount and activation of the pinching effect: -.. figure:: figures/BoucWenInfill2.png +.. figure:: figures/BoucWenInfill/BoucWenInfill2.png :align: center :figclass: align-center -.. figure:: figures/BoucWenInfill3.png +.. figure:: figures/BoucWenInfill/BoucWenInfill3.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/DowelType.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/DowelType.rst.txt similarity index 97% rename from docs/_sources/user/manual/material/uniaxialMaterials/DowelType.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/DowelType.rst.txt index 0150c6ba..2b2d78f8 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/DowelType.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/DowelType.rst.txt @@ -104,7 +104,7 @@ The command to create a DowelType joint model has three variations, correspondin The envelope curves are illustrated in the following figure. Only the positive part is illustrated. -.. figure:: figures/DowelTypeEnvelope.png +.. figure:: figures/DowelType/DowelTypeEnvelope.png :align: center :figclass: align-center @@ -138,7 +138,7 @@ The piecewise envelope connects all the definition points with straight lines. T The hysteretic law is illustrated in the following figure. The hysteresis is independent from the envelope curve. Basically, the hysteretic curves are defined by three guiding lines: unloading line, pinching line, and reloading line. The lines define Bezier curves as shown in the figure. -.. figure:: figures/DowelTypeHyst.png +.. figure:: figures/DowelType/DowelTypeHyst.png :align: center :figclass: align-center @@ -160,7 +160,7 @@ where :math:`E_{p,i}` is the energy dissipated in a primary half-cycle, :math:`E .. note:: The following figure is used to describe the same side and the opposite side: - .. figure:: figures/DowelTypeSide.jpg + .. figure:: figures/DowelType/DowelTypeSide.jpg :align: center :figclass: align-center @@ -179,7 +179,7 @@ where :math:`K_{0,s}` and :math:`K_{0,o}` are the stiffness on the same and oppo There are also a few special scenarios, illustrated in the following figure: -.. figure:: figures/DowelTypeSpecial.png +.. figure:: figures/DowelType/DowelTypeSpecial.png :align: center :figclass: align-center @@ -207,7 +207,7 @@ Special scenario 3 is the case when large damage occurs. The hysteretic curve no The results of Example 1 is shown in the following figure: -.. figure:: figures/DowelTypeExample1.png +.. figure:: figures/DowelType/DowelTypeExample1.png :align: center :figclass: align-center @@ -231,7 +231,7 @@ The results of Example 1 is shown in the following figure: The results of Example 2 is shown in the following figure: -.. figure:: figures/DowelTypeExample2.png +.. figure:: figures/DowelType/DowelTypeExample2.png :align: center :figclass: align-center @@ -255,7 +255,7 @@ The results of Example 2 is shown in the following figure: The results of Example 3 is shown in the following figure: -.. figure:: figures/DowelTypeExample3.png +.. figure:: figures/DowelType/DowelTypeExample3.png :align: center :figclass: align-center @@ -279,7 +279,7 @@ The results of Example 3 is shown in the following figure: The results of Example 4 is shown in the following figure: -.. figure:: figures/DowelTypeExample4.png +.. figure:: figures/DowelType/DowelTypeExample4.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticAsym.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticAsym.rst.txt similarity index 96% rename from docs/_sources/user/manual/material/uniaxialMaterials/HystereticAsym.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticAsym.rst.txt index 57007603..c6eec89f 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticAsym.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticAsym.rst.txt @@ -28,7 +28,7 @@ The equations describing HystereticAsym behavior are described in [VaianaEtAl202 The model works as a sort of smooth, bilinear model whose response is modulated by nonlinear functions in order to obtain hardening, softening and asymmetry. Specifically, if :math:`\beta_1 = \beta_2 = \gamma = 0` then the loop is symmetric and bilinear: -.. figure:: figures/HystereticAsym01.gif +.. figure:: figures/HystereticAsym/HystereticAsym01.gif :align: center :figclass: align-center @@ -52,13 +52,13 @@ Parameters $beta1 and $beta2 rule the hardening-softening behavior as well as as d, :math:`\beta_2 > \beta_1 > 0` -.. figure:: figures/HystereticAsym02.gif +.. figure:: figures/HystereticAsym/HystereticAsym02.gif :align: center :figclass: align-center Parameter $gamma introduces a further asymmetric behavior by a modulating function: -.. figure:: figures/HystereticAsym03.gif +.. figure:: figures/HystereticAsym/HystereticAsym03.gif :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticPoly.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticPoly.rst.txt similarity index 95% rename from docs/_sources/user/manual/material/uniaxialMaterials/HystereticPoly.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticPoly.rst.txt index 9ec658d6..44c9ffe7 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticPoly.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticPoly.rst.txt @@ -28,7 +28,7 @@ The equations describing HystereticPoly behavior are described in [VaianaEtAl201 The model may reproduce either force-displacement or stress-strain relationships. It is formulated by means of two asymptotic lines (blue) linked by transition curves (red): -.. figure:: figures/HystereticPoly01.gif +.. figure:: figures/HystereticPoly/HystereticPoly01.gif :align: center :figclass: align-center @@ -42,13 +42,13 @@ Where :math:`\bar{f}` is the value at which the asymptotic line crosses the vert In general, $alpha= :math:`\alpha` influences the amplitude of the loop: -.. figure:: figures/HystereticPoly02.gif +.. figure:: figures/HystereticPoly/HystereticPoly02.gif :align: center :figclass: align-center while parameters $beta1 and $beta2 modify the shape of the loop: -.. figure:: figures/HystereticPoly03.gif +.. figure:: figures/HystereticPoly/HystereticPoly03.gif :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticSmooth.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.rst.txt similarity index 95% rename from docs/_sources/user/manual/material/uniaxialMaterials/HystereticSmooth.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.rst.txt index 189c9cc8..0ec670de 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/HystereticSmooth.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/HystereticSmooth.rst.txt @@ -28,7 +28,7 @@ The equations describing HystereticSmooth behavior are described in [VaianaEtAl2 The model may reproduce either force-displacement or stress-strain relationships and behaves as a sort of smoothed bilinear model: -.. figure:: figures/HystereticSmooth01.gif +.. figure:: figures/HystereticSmooth/HystereticSmooth01.gif :align: center :figclass: align-center @@ -41,13 +41,13 @@ that is represented in figure. Because of the biunivocal relationship between :m Parameter $beta rules the hardening-softening behavior: -.. figure:: figures/HystereticSmooth02.gif +.. figure:: figures/HystereticSmooth/HystereticSmooth02.gif :align: center :figclass: align-center so that different loop shapes can be obtained: -.. figure:: figures/HystereticSmooth03.gif +.. figure:: figures/HystereticSmooth/HystereticSmooth03.gif :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/IMKBilin.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKBilin.rst.txt similarity index 97% rename from docs/_sources/user/manual/material/uniaxialMaterials/IMKBilin.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKBilin.rst.txt index 8dbc0fe2..182876fa 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/IMKBilin.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKBilin.rst.txt @@ -46,13 +46,13 @@ This command is used to construct a material with a hysteretic bilinear response IMKBilin backbone curve -.. figure:: figures/IMKBilin.jpg +.. figure:: figures/IMK/IMKBilin.jpg :align: center :figclass: align-center IMKBilin sample response -.. figure:: figures/IMKBilin-sample response.jpg +.. figure:: figures/IMK/IMKBilin_sample_response.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/IMKPeakOriented.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.rst.txt similarity index 97% rename from docs/_sources/user/manual/material/uniaxialMaterials/IMKPeakOriented.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.rst.txt index 9f029de7..56897c6d 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/IMKPeakOriented.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPeakOriented.rst.txt @@ -48,13 +48,13 @@ This command is used to construct a material with a peak-oriented hysteretic res IMKPeakOriented backbone curve -.. figure:: figures/IMKPeakOriented.jpg +.. figure:: figures/IMK/IMKPeakOriented.jpg :align: center :figclass: align-center IMKPeakOriented sample responses and validations -.. figure:: figures/IMKPeakOriented-sample responses & validations.jpg +.. figure:: figures/IMK/IMKPeakOriented_sample_responses_validations.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/IMKPinching.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPinching.rst.txt similarity index 97% rename from docs/_sources/user/manual/material/uniaxialMaterials/IMKPinching.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPinching.rst.txt index edd08ab3..c700a0de 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/IMKPinching.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Other/IMKPinching.rst.txt @@ -50,13 +50,13 @@ This command is used to construct a material with a pinched hysteretic response IMKPinching backbone curve -.. figure:: figures/IMKPinching.jpg +.. figure:: figures/IMK/IMKPinching.jpg :align: center :figclass: align-center IMKPinching sample responses and validations -.. figure:: figures/IMKPinching-sample responses & validations.jpg +.. figure:: figures/IMK/IMKPinching_sample_responses_validations.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/PyLiq1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.rst.txt similarity index 100% rename from docs/_sources/user/manual/material/uniaxialMaterials/PyLiq1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.rst.txt diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/PySimple1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.rst.txt similarity index 96% rename from docs/_sources/user/manual/material/uniaxialMaterials/PySimple1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.rst.txt index 7ab3255c..5aa9f3e2 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/PySimple1.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/PySimple1.rst.txt @@ -28,7 +28,7 @@ This command is used to construct a PySimple1 uniaxial material object: The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero $c values are used to represent radiation damping effects. See theory below. - In general the :ref:`hht` algorithm is preferred over a :ref:`newmark` algorithm when using this material. This is due to the numerical oscillations that can develop with viscous damping forces under transient loading with certain solution algorithms and damping ratios. + In general the :ref:`HilberHughesTaylorMethod` algorithm is preferred over a :ref:`newmark` algorithm when using this material. This is due to the numerical oscillations that can develop with viscous damping forces under transient loading with certain solution algorithms and damping ratios. The equations describing PySimple1 behavior are described in [BoulangerEtAl1999]_. Only minor changes have been made in its implementation for OpenSees. diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/QzLiq1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/QzLiq1.rst.txt similarity index 100% rename from docs/_sources/user/manual/material/uniaxialMaterials/QzLiq1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/QzLiq1.rst.txt diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/QzSimple1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/QzSimple1.rst.txt similarity index 100% rename from docs/_sources/user/manual/material/uniaxialMaterials/QzSimple1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/QzSimple1.rst.txt diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/TzLiq1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/TzLiq1.rst.txt similarity index 100% rename from docs/_sources/user/manual/material/uniaxialMaterials/TzLiq1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/TzLiq1.rst.txt diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/TzSimple1.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/TzSimple1.rst.txt similarity index 100% rename from docs/_sources/user/manual/material/uniaxialMaterials/TzSimple1.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/PyTzQZ/TzSimple1.rst.txt diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.rst.txt new file mode 100644 index 00000000..d12300b0 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/DoddRestrepo.rst.txt @@ -0,0 +1,51 @@ +.. _DoddRestrepo: + +DoddRestrepo Material +^^^^^^^^^^^^^^^^ + +This command is used to construct a Dodd-Restrepo steel material + +.. function:: uniaxialMaterial Dodd_Restrepo $tag $Fy $Fsu $ESH $ESU $Youngs $ESHI $FSHI <$OmegaFac> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $mattTag + - |integer| + - Integer tag identifying material + * - $Fy + - |float| + - Yield Strength. + * - $Fsu + - |float| + - Ultimate tensile strength (UTS) + * - $ESH + - |float| + - Tensile strain at initiation of strain hardening + * - $ESU + - |float| + - Tensile strain at the UTS + * - $Youngs + - |float| + - Modulus of elasticity + * - $ESHI + - |float| + - Tensile strain for a point on strain hardening curve, recommended range of values for ESHI: [ (ESU + 5*ESH)/6, (ESU + 3*ESH)/4] + * - $FSHI + - |float| + - Tensile stress at point on strain hardening curve corresponding to ESHI + * - $OmegaFac + - |float| + - Roundedness factor for Bauschinger curve in cycle reversals from the strain hardening curve. Range: [0.75, 1.15]. Largest value tends to near a bilinear Bauschinger curve. Default = 1.0. + + +.. note:: + Stresses and strains are defined in engineering terms, as they are reported in a tensile test. + +References: + +Code Developed by : L.L. Dodd & J.I. Restrepo \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/DuctileFracture.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.rst.txt similarity index 98% rename from docs/_sources/user/manual/material/uniaxialMaterials/DuctileFracture.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.rst.txt index fc958145..b7ea9330 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/DuctileFracture.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/DuctileFracture.rst.txt @@ -83,7 +83,7 @@ The material is based on a newly developed Reinforcement Ductile Fracture Model .. _fig-ductilefracture_mp_infl: -.. figure:: figures/DuctileFracture_mp_infl.png +.. figure:: figures/DuctileFracture/DuctileFracture_mp_infl.png :align: center :width: 700 @@ -91,7 +91,7 @@ The material is based on a newly developed Reinforcement Ductile Fracture Model .. _fig-ductilefracture_workflow: -.. figure:: figures/DuctileFracture_Workflow.png +.. figure:: figures/DuctileFracture/DuctileFracture_Workflow.png :align: center :width: 400 diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Hysteretic.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Hysteretic.rst.txt new file mode 100644 index 00000000..42489e51 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Hysteretic.rst.txt @@ -0,0 +1,54 @@ +.. _SteelHysteretic: + +Steel Hysteretic Material +^^^^^^^^^^^^^^^^ + +This command is used to construct a uniaxial bilinear hysteretic material object with pinching of force and deformation, damage due to ductility and energy, and degraded unloading stiffness based on ductility. + +.. function:: uniaxialMaterial Hysteretic $matTag $s1p $e1p $s2p $e2p <$s3p $e3p> $s1n $e1n $s2n $e2n <$s3n $e3n> $pinchX $pinchY $damage1 $damage2 <$beta> + +.. list-table:: + :widths: 10 10 40 + :header-rows: 1 + + * - Argument + - Type + - Description + * - $matTag + - |integer| + - Integer tag identifying material + * - $s1p $e1p + - |float| + - stress and strain (or force & deformation) at first point of the envelope in the positive direction + * - $s2p $e2p + - |float| + - stress and strain (or force & deformation) at second point of the envelope in the positive direction + * - $s3p $e3p + - |float| + - stress and strain (or force & deformation) at third point of the envelope in the positive direction (optional) + * - $s1n $e1n + - |float| + - stress and strain (or force & deformation) at first point of the envelope in the negative direction + * - $s2n $e2n + - |float| + - stress and strain (or force & deformation) at second point of the envelope in the negative direction + * - $$s3n $e3n + - |float| + - stress and strain (or force & deformation) at third point of the envelope in the negative direction (optional) + * - $pinchx + - |float| + - pinching factor for strain (or deformation) during reloading + * - $pinchy + - |float| + - pinching factor for stress (or force) during reloading + * - $damage1 + - |float| + - damage due to ductility: D1(mu-1) + * - $damage2 + - |float| + - damage due to energy: D2(Eii/Eult) + * - $beta + - |float| + - power used to determine the degraded unloading stiffness based on ductility, mu-beta (optional, default=0.0) + +Code Developed by: |Michael Scott (Oregon State University) & Filip Filippou (UC Berkeley)| diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.rst.txt new file mode 100644 index 00000000..ea597e14 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/RambergOsgoodSteel.rst.txt @@ -0,0 +1,6 @@ +.. _RambergOsgoodSteel: + +Ramberg Osgood Steel Material +^^^^^^^^^^^^^^^^ + +This page is under construction. This is dummy page to enable the construction of ToC Link \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.rst.txt new file mode 100644 index 00000000..605c7957 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/ReinforcingSteel.rst.txt @@ -0,0 +1,4 @@ +.. _ReinforcingSteel: + +Reinforcing Steel Material +^^^^^^^^^^^^^^^^ \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel01.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel01.rst.txt similarity index 91% rename from docs/_sources/user/manual/material/uniaxialMaterials/Steel01.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel01.rst.txt index e5b7e492..ca64d7c4 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/Steel01.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel01.rst.txt @@ -1,4 +1,3 @@ - .. _steel01: Steel01 Material @@ -28,25 +27,25 @@ This command is used to construct a uniaxial bilinear steel material object with .. _fig-mdof: -.. figure:: figures/Steel01.gif +.. figure:: figures/Steel01/Steel01.gif :align: center :figclass: align-center Steel01 -.. figure:: figures/Steel01HystereticA.jpg +.. figure:: figures/Steel01/Steel01HystereticA.jpg :align: center :figclass: align-center Steel01 Material -- Default Hysteretic Behavior (NO isotropic hardening) -.. figure:: figures/Steel01HystereticB.jpg +.. figure:: figures/Steel01/Steel01HystereticB.jpg :align: center :figclass: align-center Steel01 Material -- Hysteretic Behavior of Model with Isotropic Hardening in Compression -.. figure:: figures/Steel01HystereticC.jpg +.. figure:: figures/Steel01/Steel01HystereticC.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel02.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel02.rst.txt similarity index 96% rename from docs/_sources/user/manual/material/uniaxialMaterials/Steel02.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel02.rst.txt index ad023313..fe8d81d7 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/Steel02.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel02.rst.txt @@ -50,13 +50,13 @@ This command is used to construct a uniaxial Giuffre-Menegotto-Pinto steel mater .. _fig-steel02: -.. figure:: figures/Steel02.gif +.. figure:: figures/Steel02/Steel02.gif :align: center :figclass: align-center Steel02 -.. figure:: figures/Steel02HystereticA.jpg +.. figure:: figures/Steel02/Steel02HystereticA.jpg :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel4.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel4.rst.txt new file mode 100644 index 00000000..2c949293 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/Steel4.rst.txt @@ -0,0 +1,6 @@ +.. _Steel4: + +Steel4 Material +^^^^^^^^^^^^^^^^ + +This page is under construction. This dummy page is created to enable the generation of ToC Link. \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/SteelFractureDI.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.rst.txt similarity index 98% rename from docs/_sources/user/manual/material/uniaxialMaterials/SteelFractureDI.rst.txt rename to docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.rst.txt index 897f7532..40125df9 100644 --- a/docs/_sources/user/manual/material/uniaxialMaterials/SteelFractureDI.rst.txt +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelFractureDI.rst.txt @@ -46,7 +46,7 @@ POST-FRACTURE CONSTITUTIVE LAW SteelFractureDI model uses the post-fracture constitutive law schematically described in Figure 1. Figure 1a depicts the instant of fracture when the stress drops to zero and remains there as long as the strain is increasing to simulate the opening of the crack. To model the potential crack closing that could occur after reversing the strain, the post-fracture constitutive law assumes a smooth curvilinear transition towards compressive stresses. This transition is controlled by four transient variables: :math:`ϵ_r`, :math:`ϵ_0`, :math:`ϵ_1`, and :math:`σ_1`. :math:`ϵ_r` is the maximum strain value to develop compressive stresses, :math:`ϵ_0` is the strain value at full contact of the fracture surface, :math:`ϵ_1` is the theoretical yielding strain in compression, and :math:`σ_1` is the compressive stress associated with :math:`ϵ_1` in the yield surface. Figure 1b shows the transient variables immediately after fracture. The trajectory of the compressive stress is depicted with a curvilinear arrow pointing downward. Figure 1c shows that a small reversal of strain causes an elastic reduction of compressive stress. This elastic response is simulated by keeping the same value of the transient variables. When the compressive excursion is large enough to cause yielding in compression (Figure 1d), the reference points are updated as soon as the strain reverses towards unloading as depicted in Figure 1e. This update of the transient variables simulates the plastic deformations on the surface of the fractured flange; therefore, contact occurs at a different location. Figure 1f shows a subsequent cycle of the crack closing at the new location of the fracture surface using the updated transient variables. -.. figure:: ./figures/SteelFractureDI_postFrac.gif +.. figure:: figures/SteelFractureDI/SteelFractureDI_postFrac.gif :align: center :figclass: align-center @@ -54,7 +54,7 @@ FRACTURE CRITERION SteelFractureDI is equipped with a stress-based fracture criterion that explicitly captures the fatigue damage that is accumulated with repeated cycles and that ultimately causes fracture. This is done using a real-time fracture index (FI) that compares the effective cummulative stress demand and the cummulative stress capacity. The capacity is a fixed value calles $sigcr that can be calculated based on experimental data ([GalvisEtAl12022]_ presents equations for modeling welded flanges in steel beam-to-column connections). The demand correspond to the difference of the tensile and compressive excursions. The fracture criterion only considers large excursions, exceding $sigmin, to accumulate damage. Figure 2a shows an example stress history and a red bad to denote the portion of the excursions that are not considered in the FI calculation. Figure 2b shows the evolution of the FI for the stress history shown in Figure 2a. The FI function shows a monotonic increasing trend representing the damage caused by tensile excursions that is not healed by the subsequent compressive excursion. The higher-frequency spikes correspond to the recoverable damage when the stress reverses. -.. figure:: ./figures/steelFractureDI_FI_evol.gif +.. figure:: figures/SteelFractureDI/steelFractureDI_FI_evol.gif :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelMPF.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelMPF.rst.txt new file mode 100644 index 00000000..a1f0da29 --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/SteelMPF.rst.txt @@ -0,0 +1,4 @@ +.. _SteelMPF: + +SteelMPF Material +^^^^^^^^^^^^^^^^ \ No newline at end of file diff --git a/docs/_sources/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.rst.txt b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.rst.txt new file mode 100644 index 00000000..72c9b6de --- /dev/null +++ b/docs/_sources/user/manual/material/uniaxialMaterials/Steel/UVCuniaxial.rst.txt @@ -0,0 +1,4 @@ +.. _UVCUniaxial: + +UVCUniaxial Material +^^^^^^^^^^^^^^^^ \ No newline at end of file diff --git a/docs/_sources/user/manual/model/damping.rst.txt b/docs/_sources/user/manual/model/damping.rst.txt new file mode 100644 index 00000000..4ccdd2be --- /dev/null +++ b/docs/_sources/user/manual/model/damping.rst.txt @@ -0,0 +1,18 @@ +.. _damping: + +Damping Commands +********************** + +OpenSees provides the user several method to construct damping in their model. List of the available method are: + +.. toctree:: + :maxdepth: 1 + + damping/rayleigh + damping/modalDamping + +References +-------------- + +.. [ChopraMcKenna2015] Chopra, A. K., & McKenna, F. (2016). Modeling viscous damping in nonlinear response history analysis of buildings for earthquake excitation. Earthquake Engineering & Structural Dynamics, 45(2), 193-211. https://onlinelibrary.wiley.com/doi/full/10.1002/eqe.2622 +.. [MHScott2019] Scott, M. H. (2019, September 12). Be careful with modal damping. Portwood Digital. Retrieved August 27, 2022, from https://portwooddigital.com/2019/09/12/be-careful-with-modal-damping/ diff --git a/docs/_sources/user/manual/model/damping/modalDamping.rst.txt b/docs/_sources/user/manual/model/damping/modalDamping.rst.txt new file mode 100644 index 00000000..4c5d554f --- /dev/null +++ b/docs/_sources/user/manual/model/damping/modalDamping.rst.txt @@ -0,0 +1,28 @@ +.. _modalDamping: + +Modal Damping Command +******************* + +.. function:: modalDamping $factor + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $factor, |float|, damping factor. + +.. admonition:: Example: + + + 1. **Tcl Code** + + .. code-block:: tcl + + set N 2 ;# Number of modes for modal damping + eigen $N + + modalDamping 0.05 0.02 ;# 5% in mode 1, 2% in mode 2 + +Further reading about Modal Damping can be seen in [ChopraMcKenna2015]_ + + diff --git a/docs/_sources/user/manual/model/damping/rayleigh.rst.txt b/docs/_sources/user/manual/model/damping/rayleigh.rst.txt new file mode 100644 index 00000000..45f7f10a --- /dev/null +++ b/docs/_sources/user/manual/model/damping/rayleigh.rst.txt @@ -0,0 +1,28 @@ +.. _rayleigh: + +Rayleigh Damping Command +******************* + +.. function:: rayleigh $alphaM $betaK $betaKInit $betaKcomm + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $alphaM, |float|, factor applied to elements or nodes mass matrix + $betaK, |float|, factor applied to elements current stiffness matrix. + $betaKInit, |float|, factor applied to elements initial stiffness matrix + $betaKcomm, |float|, factor applied to elements committed stiffness matrix + + +This command is used to assign damping to all previously-defined elements and nodes. When using rayleigh damping in OpenSees, the damping matrix for an element or node, D is specified as a combination of stiffness and mass-proportional damping matrices: + +:math:`D = \alpha_m M + \beta_k K_{current} + \beta_{k_{init}} K_{init} + \beta_{K_{comm}} K_{last commit}` + + +.. note:: + * The command overwrites any existing damping coeeficients at the Elements and Nodes. + * The usage of Rayleigh damping may provide incorrect result when used with Non-Linear Time History Analysis using Concentrated Plasticity Model. [ChopraMcKenna2015]_ + + + diff --git a/docs/_sources/user/manual/model/elements/ASDAbsorbingBoundary.rst.txt b/docs/_sources/user/manual/model/elements/ASDAbsorbingBoundary.rst.txt index e5a2aa10..475bd07b 100644 --- a/docs/_sources/user/manual/model/elements/ASDAbsorbingBoundary.rst.txt +++ b/docs/_sources/user/manual/model/elements/ASDAbsorbingBoundary.rst.txt @@ -3,7 +3,7 @@ ASDAbsorbingBoundary Element (2D and 3D) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. figure:: ASDAbsorbingBoundary_Video.gif +.. figure:: ASD/ASDAbsorbingBoundary_Video.gif :align: center :figclass: align-center @@ -47,7 +47,7 @@ Theory * **D**: The Lysmer-Kuhlemeyer dashpots, required to absorb outgoing waves. * **T**: The boundary tractions transferred from the Free-Field to the Soil domain, required to impose the free-field solution to the boundaries of the main model. -.. figure:: ASDAbsorbingBoundary_Theory.png +.. figure:: ASD_Absorbing/ASDAbsorbingBoundary_Theory.png :align: center :figclass: align-center @@ -60,7 +60,7 @@ Usage Notes The element should have the standard node-numbering to ensure a proper positive jacobian. - .. figure:: ASDAbsorbingBoundary_Mesh.png + .. figure:: ASD_Absorbing/ASDAbsorbingBoundary_Mesh.png :align: center :figclass: align-center @@ -80,7 +80,7 @@ Usage Notes | For a 2D problem you can have the following valid combinations: **B**, **L**, **R**, **BL**, **BR** | For a 3D problem you can have the following valid combinations: **B**, **L**, **R**, **F**, **K**, **BL**, **BR**, **BF**, **BK**, **LF**, **LK**, **RF**, **RK**, **BLF**, **BLK**, **BRF**, **BRK** - .. figure:: ASDAbsorbingBoundary_btype.png + .. figure:: ASD_Absorbing/ASDAbsorbingBoundary_btype.png :align: center :figclass: align-center @@ -100,7 +100,7 @@ Usage Notes * The bottom side of the main model should have an outward normal vector that points in the negative global Z direction. * In 3D models the sides L (left),R (right),F (front) and K (back) may have some natural distortion due to the topography. This is supported by the boundary element, but when the distortion along the Z direction is too large, the results can slightly deteriorate. - .. figure:: ASDAbsorbingBoundary_distortion.png + .. figure:: ASD_Absorbing/ASDAbsorbingBoundary_distortion.png :align: center :figclass: align-center @@ -115,7 +115,7 @@ Usage Notes | This is the expected output: The blue line is the acceleration recorded at the base of the model. Point **A** and **B** represent respectively the wave entering the domain and the same wave exiting the domain after being reflected by the free surface. Their peak value should be exactly 1g. The purple line is the acceleration recorded at the top of the model (on the free surface). Point **C** represents the wave hitting the free-surface. Its peak value should be exactly 2g. - .. figure:: ASDAbsorbingBoundary_result.png + .. figure:: ASD_Absorbing/ASDAbsorbingBoundary_result.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/model/elements/FourNodeTetrahedron.rst.txt b/docs/_sources/user/manual/model/elements/FourNodeTetrahedron.rst.txt index 80e0d067..2d970f6d 100644 --- a/docs/_sources/user/manual/model/elements/FourNodeTetrahedron.rst.txt +++ b/docs/_sources/user/manual/model/elements/FourNodeTetrahedron.rst.txt @@ -21,7 +21,7 @@ This command is used to construct an four-node tetrahedron element object, which This is the simplest possible continuum finite element for 3-D analysis. It's based on linear interpolation of nodal quantities, this means that the strain and stress field inside the element are constant. The single Gauss point results can be interpreted as constant within the element. Because of this, the element has a tendency to lock up when used for simulating bending. In the incompressible limit (caution for materials with :math:`\nu \rightarrow 0.5` or metal plasticity) this element will also lock up. Therefore, caution is warranted when using this element as un-careful mesh refinement might not guarantee a convergence to the mathematical solution or a fast-enough convergence rate. If possible, use a higher-order element like the :ref:`TenNodeTetrahedron`. -.. figure:: FourNodeTetrahedron.png +.. figure:: FourNodeTetrahedron/FourNodeTetrahedron.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/model/elements/MVLEM_3D.rst.txt b/docs/_sources/user/manual/model/elements/MVLEM_3D.rst.txt index fa9ab64d..79034b79 100644 --- a/docs/_sources/user/manual/model/elements/MVLEM_3D.rst.txt +++ b/docs/_sources/user/manual/model/elements/MVLEM_3D.rst.txt @@ -16,7 +16,7 @@ The MVLEM_3D model (Figure 1a) is a three-dimensional four-node element with 24 This element shall be used in Domain defined with **-ndm 3 -ndf 6**. -.. figure:: MVLEM_3D_formulation.jpg +.. figure:: figures/MVLEM/MVLEM_3D_formulation.jpg :align: center :figclass: align-center @@ -73,13 +73,13 @@ Example Specimen TUB (Beyer et al. 2008) is analyzed using the MVLEM_3D. Figure 2a shows the photo of the test specimen and the multidirectional displacement pattern applied at the top of the wall, while Figure 2b-c show the MVLEM_3D model of specimen TUB. Tcl Input files can be downloaded from `MVLEM-3D GitHub Page `_. -.. figure:: MVLEM_3D_TUB_model.jpg +.. figure:: figures/MVLEM/MVLEM_3D_TUB_model.jpg :align: center :figclass: align-center **Figure 2: MVLEM_3D Model of Specimen TUB** -.. figure:: MVLEM_3D_TUB_animation.gif +.. figure:: figures/MVLEM/MVLEM_3D_TUB_animation.gif :align: center :figclass: align-center @@ -87,7 +87,7 @@ Specimen TUB (Beyer et al. 2008) is analyzed using the MVLEM_3D. Figure 2a shows Figure 4 compares experimentally measured and analytically predicted load deformation behavior of the specimen TUB in E-W, N-S, and diagonal loading directions. The model provides accurate predictions of the lateral load capacity and the stiffness under cyclic loading in loading directions parallel to the principal axes of the cross-section (E-W, N-S direction). Analysis results overestimate the lateral load capacity in diagonal loading directions due to plane-sections-remain-plane assumption implemented in the model formulation that cannot capture pronounced shear lag effect observed in the test specimen. -.. figure:: MVLEM_3D_TUB_results.JPG +.. figure:: figures/MVLEM/MVLEM_3D_TUB_results.JPG :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/model/elements/SFI_MVLEM_3D.rst.txt b/docs/_sources/user/manual/model/elements/SFI_MVLEM_3D.rst.txt index 7c92e660..4b4bd63b 100644 --- a/docs/_sources/user/manual/model/elements/SFI_MVLEM_3D.rst.txt +++ b/docs/_sources/user/manual/model/elements/SFI_MVLEM_3D.rst.txt @@ -18,7 +18,7 @@ For additional information please visit `SFI-MVLEM-3D GitHub Page <-integration integrType> - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $numIntgrPts, |integer|, total number of integration points - $secTag, |integer|, section tag - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -shearCenter, "", "", used to define coordinates of the shear center - "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) (default y0=z0=0.0) - -integration, "", "", used to select integration type - "", integrType, |string|, "numerical integration type, options are Lobatto, Legendre, Radau, NewtonCotes, Trapzoidal (default = Lobatto)" - -.. figure:: dispBeamColumnAsym_Fig1.jpg - :align: center - :figclass: align-center - :scale: 25 - - Fig. 1: Coordinate systems for members with asymmetric sections (CC': centroidal axis, SS': shear center axis) - -**PYTHON ELEMENT COMMAND** - -For 3D problems: - -.. function:: element ('dispBeamColumnAsym', $eleTag, $iNode, $jNode, $transfTag, $integrTag, '-shearCenter', $y0, $z0) - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - $integrTag, |integer|, identifier for previously-defined beam integration object - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -shearCenter, "", "", used to define coordinates of the shear center - "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) - -NOTES: - #. For asymmetric sections, y0 and z0 should be passed to the fiber section object using the FiberAsym command. In Tcl, it is like: section FiberAsym $secTag $y0 $z0 -GJ $GJ {...}. - -.. admonition:: Example - - The following codes construct Example 4.6 in Du and Hajjar (2021). The libraries can be found from the OpenSeesWiki. The definition of the angle section (L3x2x0_25.tcl) is not provided here, but the mesh information is shown in the following Python code. Note that in order for clarity the mesh here is coarser than that used in Du and Hajjar (2021). - - 1. **Tcl Code** - - .. code-block:: tcl - - # -------------------------------------------------------------------------------------------------- - # 3D Steel L-section beam subjected to compressive load on shear center - # Xinlong Du, 9/25/2019 - # Displacement-based beam-column element for asymmetric sections - # -------------------------------------------------------------------------------------------------- - set systemTime [clock seconds] - puts "Starting Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" - set startTime [clock clicks -milliseconds]; - # SET UP ---------------------------------------------------------------------------- - wipe; # clear memory of all past model definitions - model BasicBuilder -ndm 3 -ndf 6; # Define the model builder, ndm=#dimension, ndf=#dofs - set dataDir Data; # set up name of data directory - file mkdir $dataDir; # create data directory - source LibUnits.tcl; # define units - source DisplayPlane.tcl; # procedure for displaying a plane in model - source DisplayModel3D.tcl; # procedure for displaying 3D perspectives of model - # define GEOMETRY ------------------------------------------------------------------ - #Nodes, NodeNumber, xCoord, yCoord, zCoord - for {set i 1} {$i<8} {incr i 1} { - node $i [expr -9.2+9.2*$i] 0 0; - } - # ------ define boundary conditions - # NodeID,dispX,dispY,dispZ,rotX,RotY,RotZ - fix 1 1 1 1 1 1 1; - set StartNode 1; - set EndNode 7; - # Define SECTIONS ------------------------------------------------------------- - set ColSecTag 1 - # define MATERIAL properties - set Es [expr 27910.0*$ksi]; # Steel Young's Modulus - set nu 0.3; - set Gs [expr $Es/2./[expr 1+$nu]]; # Torsional stiffness Modulus - set matID 1 - uniaxialMaterial Elastic $matID $Es; - set J [expr 0.02473958*$in4] - set GJ [expr $Gs*$J] - set z0 [expr 0.64625474*$in]; - set y0 [expr -0.68720012*$in]; - source L3x2x0_25.tcl; - # define ELEMENTS----------------------------------------------------------------------------------------------- - set IDColTransf 1; # all members - set ColTransfType Corotational; # options for columns: Linear PDelta Corotational - geomTransf $ColTransfType $IDColTransf 0 0 1; #define geometric transformation: performs a corotational geometric transformation - set numIntgrPts 2; # number of Gauss integration points - for {set i 1} {$i<$EndNode} {incr i 1} { - set elemID $i - set nodeI $i - set nodeJ [expr $i+1] - element dispBeamColumnAsym $elemID $nodeI $nodeJ $numIntgrPts $ColSecTag $IDColTransf -shearCenter $y0 $z0; - } - - # Define RECORDERS ------------------------------------------------------------- - recorder Node -file $dataDir/DispDB6.out -time -node $EndNode -dof 1 2 3 4 5 6 disp; # displacements of middle node - recorder Node -file $dataDir/ReacDB6.out -time -node $StartNode -dof 1 2 3 4 5 6 reaction; # support reaction - - # Define DISPLAY ------------------------------------------------------------- - DisplayModel3D DeformedShape; # options: DeformedShape NodeNumbers ModeShape - - # define Load------------------------------------------------------------- - set N 15.0; - pattern Plain 2 Linear { - # NodeID, Fx, Fy, Fz, Mx, My, Mz - load $EndNode -$N 0 0 0 0 0; - } - - # define ANALYSIS PARAMETERS------------------------------------------------------------------------------------ - constraints Plain; # how it handles boundary conditions - numberer Plain; # renumber dof's to minimize band-width - system BandGeneral;# how to store and solve the system of equations in the analysis - test NormDispIncr 1.0e-08 1000; # determine if convergence has been achieved at the end of an iteration step - #algorithm NewtonLineSearch;# use Newton's solution algorithm: updates tangent stiffness at every iteration - algorithm Newton; - set Dincr -0.01; - #Node, dof, 1st incr, Jd, min, max - integrator DisplacementControl $EndNode 1 $Dincr 1 $Dincr -0.01; - analysis Static ;# define type of analysis static or transient - analyze 7000; - puts "Finished" - #-------------------------------------------------------------------------------- - set finishTime [clock clicks -milliseconds]; - puts "Time taken: [expr ($finishTime-$startTime)/1000] sec" - set systemTime [clock seconds] - puts "Finished Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" - - 2. **Python Code** - - .. code-block:: python - - # -------------------------------------------------------------------------------------------------- - # 3D Steel L-section beam subjected to compressive load on shear center - # Xinlong Du, 5/31/2021 - # Displacement-based beam-column element for asymmetric sections - # -------------------------------------------------------------------------------------------------- - #from openseespy.opensees import * - from opensees import * - import numpy as np - import matplotlib.pyplot as plt - import os - # SET UP ---------------------------------------------------------------------------- - wipe() - model('basic', '-ndm', 3, '-ndf', 6) - # units - inch = 1.0; - kip = 1.0; - sec = 1.0; - # Dependent units - sq_in = inch*inch; - ksi = kip/sq_in; - ft = 12.0*inch; - in4 = inch**4; - dataDir = 'Data'; - #os.mkdir(dataDir); - # define GEOMETRY ------------------------------------------------------------------ - for i in range(1,8): - node(i,-9.2+9.2*i,0.0,0.0) - # define boundary conditions - fix(1, 1, 1, 1, 1, 1, 1); - StartNode = 1; - EndNode = 7; - # Define SECTIONS ------------------------------------------------------------- - ColSecTag = 1; - # define MATERIAL properties - Es = 27910.0*ksi; # Steel Young's Modulus - nu = 0.3; - Gs = Es/2./(1+nu); # Torsional stiffness Modulus - matID = 1; - uniaxialMaterial('Elastic', matID, Es); - # SECTION properties - J = 0.02473958*in4; - Gj = Gs*J; - z0 = 0.64625474*inch; - y0 = -0.68720012*inch; - section('FiberAsym', ColSecTag, y0, z0, '-GJ', Gj); - fiber(-0.6872, 0.6463, 0.0625, matID); - fiber(-0.5864, 0.4175, 0.0625, matID); - fiber(-0.4857, 0.1887, 0.0625, matID); - fiber(-0.3849, -0.0401, 0.0625, matID); - fiber(-0.2841, -0.2689, 0.0625, matID); - fiber(-0.1834, -0.4977, 0.0625, matID); - fiber(-0.0826, -0.7265, 0.0625, matID); - fiber( 0.0182, -0.9553, 0.0625, matID); - fiber( 0.1189, -1.1841, 0.0625, matID); - fiber( 0.2197, -1.4129, 0.0625, matID); - fiber( 0.3205, -1.6417, 0.0625, matID); - fiber( 0.4212, -1.8705, 0.0625, matID); - fiber( -0.4584, 0.7470, 0.0625, matID); - fiber( -0.2296, 0.8478, 0.0625, matID); - fiber( -0.0008, 0.9486, 0.0625, matID); - fiber( 0.2280, 1.0493, 0.0625, matID); - fiber( 0.4568, 1.1501, 0.0625, matID); - fiber( 0.6856, 1.2509, 0.0625, matID); - fiber( 0.9143, 1.3516, 0.0625, matID); - # define ELEMENTS----------------------------------------------------------------------------------------------- - # set up geometric transformations of element - ColTransfTag = 1; # all members - vecxz=[0.0, 0.0, 1.0]; - geomTransf('Corotational', ColTransfTag, *vecxz); #define geometric transformation: performs a corotational geometric transformation - # Define Beam-Column Elements - numIntgrPts = 2; # number of Gauss integration points - beamIntTag = 1; - beamIntegration("Legendre", beamIntTag, ColSecTag, numIntgrPts) - for i in range (1,EndNode): - elemID = i; - nodeI = i; - nodeJ = i+1; - element('dispBeamColumnAsym', elemID, *[nodeI, nodeJ], ColTransfTag, beamIntTag,'-shearCenter', *[y0, z0]); - # Define RECORDERS ------------------------------------------------------------- - recorder('Node', '-file', f'{dataDir}/DispDB6.out', '-time', '-node', *[EndNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'disp'); - recorder('Node', '-file', f'{dataDir}/ReacDB6.out', '-time', '-node', *[StartNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'reaction'); - #------------------------------------------------------------- - N = 15.0; - timeSeries('Linear',1); - pattern('Plain', 2, 1); - load(EndNode, *[-N, 0.0, 0.0, 0.0, 0.0, 0.0]); - # define ANALYSIS PARAMETERS - #------------------------------------------------------------------------------------ - constraints('Plain'); # how it handles boundary conditions - numberer('Plain'); # renumber dof's to minimize band-width - system('BandGeneral');# how to store and solve the system of equations in the analysis - test('NormDispIncr', 1.0e-08, 1000); # determine if convergence has been achieved at the end of an iteration step - algorithm('Newton'); - Dincr = -0.01; - #Node, dof, 1st incr, Jd, min, max - integrator('DisplacementControl', EndNode, 1, Dincr, 1, Dincr, -0.01); - analysis('Static'); # define type of analysis static or transient - analyze(7000); - print('Finished') - -**REFERENCES:** - -#. Du, X., & Hajjar, J. (2021). Three-dimensional nonlinear displacement-based beam element for members with angle and tee sections. Engineering Structures, 239, 112239. - -Code developed by: `Xinlong Du `_ |dxl| (Northeastern University). +.. _dispBeamColumnAsym: + +Displacement-Based Beam Element (Asymmetric Sections) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This command is used to construct a **DispBeamColumnAsym3d** element object, which is suitable for modeling flexural, flexural-torsionl and torsional buckling of members with asymmetric section such as angles and tees. It can also be used to model members with doublely-symmetric sections. The corotational total Lagrangian method is used to capture the axial-flexural-torsional interaction behavior, while the fiber section method is used for modeling material nonlinearity. The fibers and coordinates of the shear center should be defined with respect to the principal axes of the section. Note that warping is not considered in this element. + +For more information about the element formulation, please refer to the references at the end of this page. + +**TCL ELEMENT COMMAND** + +For 3D problems: + +.. function:: element dispBeamColumnAsym $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag <-shearCenter $y0 $z0> <-integration integrType> + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $numIntgrPts, |integer|, total number of integration points + $secTag, |integer|, section tag + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -shearCenter, "", "", used to define coordinates of the shear center + "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) (default y0=z0=0.0) + -integration, "", "", used to select integration type + "", integrType, |string|, "numerical integration type, options are Lobatto, Legendre, Radau, NewtonCotes, Trapzoidal (default = Lobatto)" + +.. figure:: dispBeamColumnAsym_Fig1.jpg + :align: center + :figclass: align-center + :scale: 25 + + Fig. 1: Coordinate systems for members with asymmetric sections (CC': centroidal axis, SS': shear center axis) + +**PYTHON ELEMENT COMMAND** + +For 3D problems: + +.. function:: element ('dispBeamColumnAsym', $eleTag, $iNode, $jNode, $transfTag, $integrTag, '-shearCenter', $y0, $z0) + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + $integrTag, |integer|, identifier for previously-defined beam integration object + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -shearCenter, "", "", used to define coordinates of the shear center + "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) + +NOTES: + #. For asymmetric sections, y0 and z0 should be passed to the fiber section object using the FiberAsym command. In Tcl, it is like: section FiberAsym $secTag $y0 $z0 -GJ $GJ {...}. + +.. admonition:: Example + + The following codes construct Example 4.6 in Du and Hajjar (2021). The libraries can be found from the OpenSeesWiki. The definition of the angle section (L3x2x0_25.tcl) is not provided here, but the mesh information is shown in the following Python code. Note that in order for clarity the mesh here is coarser than that used in Du and Hajjar (2021). + + 1. **Tcl Code** + + .. code-block:: tcl + + # -------------------------------------------------------------------------------------------------- + # 3D Steel L-section beam subjected to compressive load on shear center + # Xinlong Du, 9/25/2019 + # Displacement-based beam-column element for asymmetric sections + # -------------------------------------------------------------------------------------------------- + set systemTime [clock seconds] + puts "Starting Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" + set startTime [clock clicks -milliseconds]; + # SET UP ---------------------------------------------------------------------------- + wipe; # clear memory of all past model definitions + model BasicBuilder -ndm 3 -ndf 6; # Define the model builder, ndm=#dimension, ndf=#dofs + set dataDir Data; # set up name of data directory + file mkdir $dataDir; # create data directory + source LibUnits.tcl; # define units + source DisplayPlane.tcl; # procedure for displaying a plane in model + source DisplayModel3D.tcl; # procedure for displaying 3D perspectives of model + # define GEOMETRY ------------------------------------------------------------------ + #Nodes, NodeNumber, xCoord, yCoord, zCoord + for {set i 1} {$i<8} {incr i 1} { + node $i [expr -9.2+9.2*$i] 0 0; + } + # ------ define boundary conditions + # NodeID,dispX,dispY,dispZ,rotX,RotY,RotZ + fix 1 1 1 1 1 1 1; + set StartNode 1; + set EndNode 7; + # Define SECTIONS ------------------------------------------------------------- + set ColSecTag 1 + # define MATERIAL properties + set Es [expr 27910.0*$ksi]; # Steel Young's Modulus + set nu 0.3; + set Gs [expr $Es/2./[expr 1+$nu]]; # Torsional stiffness Modulus + set matID 1 + uniaxialMaterial Elastic $matID $Es; + set J [expr 0.02473958*$in4] + set GJ [expr $Gs*$J] + set z0 [expr 0.64625474*$in]; + set y0 [expr -0.68720012*$in]; + source L3x2x0_25.tcl; + # define ELEMENTS----------------------------------------------------------------------------------------------- + set IDColTransf 1; # all members + set ColTransfType Corotational; # options for columns: Linear PDelta Corotational + geomTransf $ColTransfType $IDColTransf 0 0 1; #define geometric transformation: performs a corotational geometric transformation + set numIntgrPts 2; # number of Gauss integration points + for {set i 1} {$i<$EndNode} {incr i 1} { + set elemID $i + set nodeI $i + set nodeJ [expr $i+1] + element dispBeamColumnAsym $elemID $nodeI $nodeJ $numIntgrPts $ColSecTag $IDColTransf -shearCenter $y0 $z0; + } + + # Define RECORDERS ------------------------------------------------------------- + recorder Node -file $dataDir/DispDB6.out -time -node $EndNode -dof 1 2 3 4 5 6 disp; # displacements of middle node + recorder Node -file $dataDir/ReacDB6.out -time -node $StartNode -dof 1 2 3 4 5 6 reaction; # support reaction + + # Define DISPLAY ------------------------------------------------------------- + DisplayModel3D DeformedShape; # options: DeformedShape NodeNumbers ModeShape + + # define Load------------------------------------------------------------- + set N 15.0; + pattern Plain 2 Linear { + # NodeID, Fx, Fy, Fz, Mx, My, Mz + load $EndNode -$N 0 0 0 0 0; + } + + # define ANALYSIS PARAMETERS------------------------------------------------------------------------------------ + constraints Plain; # how it handles boundary conditions + numberer Plain; # renumber dof's to minimize band-width + system BandGeneral;# how to store and solve the system of equations in the analysis + test NormDispIncr 1.0e-08 1000; # determine if convergence has been achieved at the end of an iteration step + #algorithm NewtonLineSearch;# use Newton's solution algorithm: updates tangent stiffness at every iteration + algorithm Newton; + set Dincr -0.01; + #Node, dof, 1st incr, Jd, min, max + integrator DisplacementControl $EndNode 1 $Dincr 1 $Dincr -0.01; + analysis Static ;# define type of analysis static or transient + analyze 7000; + puts "Finished" + #-------------------------------------------------------------------------------- + set finishTime [clock clicks -milliseconds]; + puts "Time taken: [expr ($finishTime-$startTime)/1000] sec" + set systemTime [clock seconds] + puts "Finished Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" + + 2. **Python Code** + + .. code-block:: python + + # -------------------------------------------------------------------------------------------------- + # 3D Steel L-section beam subjected to compressive load on shear center + # Xinlong Du, 5/31/2021 + # Displacement-based beam-column element for asymmetric sections + # -------------------------------------------------------------------------------------------------- + #from openseespy.opensees import * + from opensees import * + import numpy as np + import matplotlib.pyplot as plt + import os + # SET UP ---------------------------------------------------------------------------- + wipe() + model('basic', '-ndm', 3, '-ndf', 6) + # units + inch = 1.0; + kip = 1.0; + sec = 1.0; + # Dependent units + sq_in = inch*inch; + ksi = kip/sq_in; + ft = 12.0*inch; + in4 = inch**4; + dataDir = 'Data'; + #os.mkdir(dataDir); + # define GEOMETRY ------------------------------------------------------------------ + for i in range(1,8): + node(i,-9.2+9.2*i,0.0,0.0) + # define boundary conditions + fix(1, 1, 1, 1, 1, 1, 1); + StartNode = 1; + EndNode = 7; + # Define SECTIONS ------------------------------------------------------------- + ColSecTag = 1; + # define MATERIAL properties + Es = 27910.0*ksi; # Steel Young's Modulus + nu = 0.3; + Gs = Es/2./(1+nu); # Torsional stiffness Modulus + matID = 1; + uniaxialMaterial('Elastic', matID, Es); + # SECTION properties + J = 0.02473958*in4; + Gj = Gs*J; + z0 = 0.64625474*inch; + y0 = -0.68720012*inch; + section('FiberAsym', ColSecTag, y0, z0, '-GJ', Gj); + fiber(-0.6872, 0.6463, 0.0625, matID); + fiber(-0.5864, 0.4175, 0.0625, matID); + fiber(-0.4857, 0.1887, 0.0625, matID); + fiber(-0.3849, -0.0401, 0.0625, matID); + fiber(-0.2841, -0.2689, 0.0625, matID); + fiber(-0.1834, -0.4977, 0.0625, matID); + fiber(-0.0826, -0.7265, 0.0625, matID); + fiber( 0.0182, -0.9553, 0.0625, matID); + fiber( 0.1189, -1.1841, 0.0625, matID); + fiber( 0.2197, -1.4129, 0.0625, matID); + fiber( 0.3205, -1.6417, 0.0625, matID); + fiber( 0.4212, -1.8705, 0.0625, matID); + fiber( -0.4584, 0.7470, 0.0625, matID); + fiber( -0.2296, 0.8478, 0.0625, matID); + fiber( -0.0008, 0.9486, 0.0625, matID); + fiber( 0.2280, 1.0493, 0.0625, matID); + fiber( 0.4568, 1.1501, 0.0625, matID); + fiber( 0.6856, 1.2509, 0.0625, matID); + fiber( 0.9143, 1.3516, 0.0625, matID); + # define ELEMENTS----------------------------------------------------------------------------------------------- + # set up geometric transformations of element + ColTransfTag = 1; # all members + vecxz=[0.0, 0.0, 1.0]; + geomTransf('Corotational', ColTransfTag, *vecxz); #define geometric transformation: performs a corotational geometric transformation + # Define Beam-Column Elements + numIntgrPts = 2; # number of Gauss integration points + beamIntTag = 1; + beamIntegration("Legendre", beamIntTag, ColSecTag, numIntgrPts) + for i in range (1,EndNode): + elemID = i; + nodeI = i; + nodeJ = i+1; + element('dispBeamColumnAsym', elemID, *[nodeI, nodeJ], ColTransfTag, beamIntTag,'-shearCenter', *[y0, z0]); + # Define RECORDERS ------------------------------------------------------------- + recorder('Node', '-file', f'{dataDir}/DispDB6.out', '-time', '-node', *[EndNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'disp'); + recorder('Node', '-file', f'{dataDir}/ReacDB6.out', '-time', '-node', *[StartNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'reaction'); + #------------------------------------------------------------- + N = 15.0; + timeSeries('Linear',1); + pattern('Plain', 2, 1); + load(EndNode, *[-N, 0.0, 0.0, 0.0, 0.0, 0.0]); + # define ANALYSIS PARAMETERS + #------------------------------------------------------------------------------------ + constraints('Plain'); # how it handles boundary conditions + numberer('Plain'); # renumber dof's to minimize band-width + system('BandGeneral');# how to store and solve the system of equations in the analysis + test('NormDispIncr', 1.0e-08, 1000); # determine if convergence has been achieved at the end of an iteration step + algorithm('Newton'); + Dincr = -0.01; + #Node, dof, 1st incr, Jd, min, max + integrator('DisplacementControl', EndNode, 1, Dincr, 1, Dincr, -0.01); + analysis('Static'); # define type of analysis static or transient + analyze(7000); + print('Finished') + +**REFERENCES:** + +#. Du, X., & Hajjar, J. (2021). Three-dimensional nonlinear displacement-based beam element for members with angle and tee sections. Engineering Structures, 239, 112239. + +Code developed by: `Xinlong Du `_ |dxl| (Northeastern University). diff --git a/docs/_sources/user/manual/model/elements/gradientInelasticBeamColumn.rst.txt b/docs/_sources/user/manual/model/elements/gradientInelasticBeamColumn.rst.txt index 6b3ecccc..faf2abb9 100644 --- a/docs/_sources/user/manual/model/elements/gradientInelasticBeamColumn.rst.txt +++ b/docs/_sources/user/manual/model/elements/gradientInelasticBeamColumn.rst.txt @@ -1,148 +1,148 @@ -.. _gradientInelasticBeamColumn: - -Gradient Inelastic (GI) Beam-Column Element -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This command is used to construct a **gradientInelasticBeamColumn** element object, which is based on a **force/flexibility-based (FB) gradient inelastic (GI) element formulation** with an iterative solution algorithm. The GI element formulation is based on the GI beam theory, which eliminates the strain localization and response objectivity problems by utilizing a set of gradient-based nonlocality relations that ensure the continuity of section strains (e.g., curvature) over the element length, upon the occurrence of softening at any section. The GI element does not necessitate any certain form of constitutive relations and permits users to use the same constitutive relations used in conventional FB element formulations. Moreover, the number of integration points in the GI element is not fixed and it could produce section strain (e.g., curvature) distributions with high resolutions. - -From the user’s perspective, the gradientInelasticBeamColumn element has similar input to other force-based fiber elements’ and the only additional parameter that this element requires is a characteristic length, *lc*, which controls the spread of plasticity/damage in the vicinity of a softening location. In the simulation of RC beams/columns, this parameter can be taken equal to the plastic hinge length. If *lc* equals zero, the GI beam element formulation turns into a conventional FB element formulation (i.e., as if the classical beam theory is used). - -For more information about the GI element formulation, please refer to this `post `_ and the references at the end of this page. - -**TCL ELEMENT COMMAND** - -For both 2D and 3D problems: - -.. function:: element gradientInelasticBeamColumn $eleTag $iNode $jNode $numIntgrPts $endSecTag1 $intSecTag $endSecTag2 $lambda1 $lambda2 $lc $transfTag <-integration integrType> <-iter $maxIter $minTol $maxTol> - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $numIntgrPts, |integer|, total number of integration points - recommended to exceed (1.5L ⁄ lc + 1) when default integration method is used (L = beam length and lc = characteristic length) - $endSecTag1, |integer|, near-end part’s section tag (Fig. 1) - $intSecTag, |integer|, intermediate part’s sections tag (Fig. 1) - $endSecTag2, |integer|, far-end part’s section tag (Fig. 1) - $lambda1, |float|, fraction of beam length (L) at near end represented by $endSecTag1 (Fig. 1) - $lambda2, |float|, "fraction of beam length (L) at far end represented by $endSecTag2 (Fig. 1). Note that $lambda1 + $lambda2 should be **smaller** than unity" - $lc, |float|, characteristic length - it can be taken as plastic hinge length - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -integration, "", "", used to select integration type - "", integrType, |string|, "Options: 'NewtonCotes', 'Simpson', or 'Trapezoidal' (default: 'Simpson') – if Simpson’s rule is used, **$numIntgrPts** should be an odd number" - -iter, "", "", "used to set iterative solution algorithm parameters" - "", $maxIter, |integer|, maximum number of iterations (default: 50) - "", $minTol, |float|, minimum tolerance (default: 1E-10) - "", $maxTol, |float|, maximum tolerance (default: 1E-8) - - -.. figure:: GI_Fig1.png - :align: center - :figclass: align-center - :scale: 50 - - Fig. 1: Assignment of pre-defined sections to integration points at different parts of element - -**PYTHON ELEMENT COMMAND** - -For both 2D and 3D problems: - -.. function:: element ('gradientInelasticBeamColumn', $eleTag, $iNode, $jNode, $transfTag, $integrTag, $lc, '-iter', $maxIter, $minTol, $maxTol) - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - $integrTag, |integer|, identifier for previously-defined beam integration object - $lc, |float|, characteristic length - it can be taken as plastic hinge length - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -iter, "", "", "used to set iterative solution algorithm parameters" - "", $maxIter, |integer|, maximum number of iterations (default: 50) - "", $minTol, |float|, minimum tolerance (default: 1E-10) - "", $maxTol, |float|, maximum tolerance (default: 1E-8) - -NOTES: - - #. The beam integration method shall be trapezoidal, Simpson's, or Newton-Cotes. - #. The total number of integration points is recommended to exceed (1.5L ⁄ lc + 1) when Simpson's and Newton-Cotes integration methods are used, and (3L ⁄ lc + 1) when trapezoidal integration method is used (L = beam length and lc = characteristic length). - -**ELEMENT RECORDERS** - -Valid queries to the **gradientInelasticBeamColumn** element when creating an ElementRecorder object are: - - #. force or globalForce - #. localForce - #. basicForce - #. section $sectionNumber $arg1 $arg2 ... (note: $sectionNumer is integer 1 through $numIntegrPts) - #. dampingForce - #. nonlocalStrain (note: this would provide the **macroscopic** section strains at all integration points). - -NOTE: Section responses shall be expressed in terms of section forces/moments vs. **macroscopic** section strains/curvatures and the section strains/curvature distributions shall be obtained from macroscopic section strains/curvatures. The section strains/curvatures obtained via “section $sectionNumber deformations” are **material** section strains (i.e. internal parameters) and shall **not** be used in place of macroscopic section strains. - - -.. admonition:: **TCL EXAMPLE** - - The element command for the GI element simulating the RC beam in Fig. 2, assuming L = **5**, λ1 = **0.2**, λ2 = **0.3**, and lc = **0.5**, while the tag for the predefined coordinate-transformation object is **20**, may take the form below: - - .. code-block:: tcl - - element gradientInelasticBeamColumn 10 1 2 21 1 2 1 0.2 0.3 0.5 20 -integration Simpson -iter 20 1E-8 1E-6; - - -Observations/recommendations: - -* The number of integration points, N, was selected to be equal to 21 to achieve lc ⁄ Δx ≥ 1.5 – or more simply, N ≥ 1.5L ⁄ lc + 1. This condition has been found to result in discretization convergence from most common applications. Yet, users are recommended to perform their own discretization convergence study, as dictated by their applications, and as they would do for conventional force-based elements. -* As illustrated in Fig. 2, section tags 1 and 2 refer to fiber sections representing the RC beam’s cross-sections A-A and B-B. These fiber sections are defined with two different longitudinal reinforcement layouts and two different confined concrete material models because of their transverse reinforcement differences. -* Each member shall be modeled by a single gradientInelasticBeamColumn element. If two or more elements are used, they are recommended to be larger than 4lc. - - -.. figure:: GI_Fig2.png - :align: center - :figclass: align-center - :scale: 80 % - - Fig. 2: GI element application example - - -.. admonition:: **PYTHON EXAMPLE** - - The element command for the GI element simulating the RC beam in Fig. 2, assuming lc = **0.5**, while the tag for the predefined coordinate-transformation and beam integration objects are **20** and **10**, respectively, may take the form below: - - .. code-block:: python - - element('gradientInelasticBeamColumn', 10, 1, 2, 20, 10, 0.5, '-iter', 20, 1E-8, 1E-6) - - -**REFERENCES:** - -#. Sideris, P., Salehi, M. (2016). "A Gradient-Inelastic Flexibility-based Frame Element Formulation." Journal of Engineering Mechanics, 142(7): 04016039. -#. Salehi, M., Sideris, P. (2017). "Refined Gradient Inelastic Flexibility-Based Formulation for Members Subjected to Arbitrary Loading." Journal of Engineering Mechanics, 143(9): 04017090. -#. Salehi, M., Sideris, P., Liel, A.B. (2017). "Seismic Collapse Analysis of RC Framed Structures using the Gradient Inelastic Force-Based Element Formulation." 16th World Conference on Earthquake Engineering (16WCEE), Santiago Chile, January 9-13. -#. Salehi, M., Sideris, P., Liel, A.B. (2020). "Assessing Damage and Collapse Capacity of Reinforced Concrete Structures Using the Gradient Inelastic Beam Element Formulation." Engineering Structures, 225: 111290. - -*When citing the GI element, please use the first two articles* - -Code developed by: `Mohammad Salehi `_ |msalehi2004| (Rice University) and `Petros Sideris `_ |psideris| (Texas A&M University) - - - +.. _gradientInelasticBeamColumn: + +Gradient Inelastic (GI) Beam-Column Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This command is used to construct a **gradientInelasticBeamColumn** element object, which is based on a **force/flexibility-based (FB) gradient inelastic (GI) element formulation** with an iterative solution algorithm. The GI element formulation is based on the GI beam theory, which eliminates the strain localization and response objectivity problems by utilizing a set of gradient-based nonlocality relations that ensure the continuity of section strains (e.g., curvature) over the element length, upon the occurrence of softening at any section. The GI element does not necessitate any certain form of constitutive relations and permits users to use the same constitutive relations used in conventional FB element formulations. Moreover, the number of integration points in the GI element is not fixed and it could produce section strain (e.g., curvature) distributions with high resolutions. + +From the user’s perspective, the gradientInelasticBeamColumn element has similar input to other force-based fiber elements’ and the only additional parameter that this element requires is a characteristic length, *lc*, which controls the spread of plasticity/damage in the vicinity of a softening location. In the simulation of RC beams/columns, this parameter can be taken equal to the plastic hinge length. If *lc* equals zero, the GI beam element formulation turns into a conventional FB element formulation (i.e., as if the classical beam theory is used). + +For more information about the GI element formulation, please refer to this `post `_ and the references at the end of this page. + +**TCL ELEMENT COMMAND** + +For both 2D and 3D problems: + +.. function:: element gradientInelasticBeamColumn $eleTag $iNode $jNode $numIntgrPts $endSecTag1 $intSecTag $endSecTag2 $lambda1 $lambda2 $lc $transfTag <-integration integrType> <-iter $maxIter $minTol $maxTol> + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $numIntgrPts, |integer|, total number of integration points - recommended to exceed (1.5L ⁄ lc + 1) when default integration method is used (L = beam length and lc = characteristic length) + $endSecTag1, |integer|, near-end part’s section tag (Fig. 1) + $intSecTag, |integer|, intermediate part’s sections tag (Fig. 1) + $endSecTag2, |integer|, far-end part’s section tag (Fig. 1) + $lambda1, |float|, fraction of beam length (L) at near end represented by $endSecTag1 (Fig. 1) + $lambda2, |float|, "fraction of beam length (L) at far end represented by $endSecTag2 (Fig. 1). Note that $lambda1 + $lambda2 should be **smaller** than unity" + $lc, |float|, characteristic length - it can be taken as plastic hinge length + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -integration, "", "", used to select integration type + "", integrType, |string|, "Options: 'NewtonCotes', 'Simpson', or 'Trapezoidal' (default: 'Simpson') – if Simpson’s rule is used, **$numIntgrPts** should be an odd number" + -iter, "", "", "used to set iterative solution algorithm parameters" + "", $maxIter, |integer|, maximum number of iterations (default: 50) + "", $minTol, |float|, minimum tolerance (default: 1E-10) + "", $maxTol, |float|, maximum tolerance (default: 1E-8) + + +.. figure:: GI_Fig1.png + :align: center + :figclass: align-center + :scale: 50 + + Fig. 1: Assignment of pre-defined sections to integration points at different parts of element + +**PYTHON ELEMENT COMMAND** + +For both 2D and 3D problems: + +.. function:: element ('gradientInelasticBeamColumn', $eleTag, $iNode, $jNode, $transfTag, $integrTag, $lc, '-iter', $maxIter, $minTol, $maxTol) + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + $integrTag, |integer|, identifier for previously-defined beam integration object + $lc, |float|, characteristic length - it can be taken as plastic hinge length + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -iter, "", "", "used to set iterative solution algorithm parameters" + "", $maxIter, |integer|, maximum number of iterations (default: 50) + "", $minTol, |float|, minimum tolerance (default: 1E-10) + "", $maxTol, |float|, maximum tolerance (default: 1E-8) + +NOTES: + + #. The beam integration method shall be trapezoidal, Simpson's, or Newton-Cotes. + #. The total number of integration points is recommended to exceed (1.5L ⁄ lc + 1) when Simpson's and Newton-Cotes integration methods are used, and (3L ⁄ lc + 1) when trapezoidal integration method is used (L = beam length and lc = characteristic length). + +**ELEMENT RECORDERS** + +Valid queries to the **gradientInelasticBeamColumn** element when creating an ElementRecorder object are: + + #. force or globalForce + #. localForce + #. basicForce + #. section $sectionNumber $arg1 $arg2 ... (note: $sectionNumer is integer 1 through $numIntegrPts) + #. dampingForce + #. nonlocalStrain (note: this would provide the **macroscopic** section strains at all integration points). + +NOTE: Section responses shall be expressed in terms of section forces/moments vs. **macroscopic** section strains/curvatures and the section strains/curvature distributions shall be obtained from macroscopic section strains/curvatures. The section strains/curvatures obtained via “section $sectionNumber deformations” are **material** section strains (i.e. internal parameters) and shall **not** be used in place of macroscopic section strains. + + +.. admonition:: **TCL EXAMPLE** + + The element command for the GI element simulating the RC beam in Fig. 2, assuming L = **5**, λ1 = **0.2**, λ2 = **0.3**, and lc = **0.5**, while the tag for the predefined coordinate-transformation object is **20**, may take the form below: + + .. code-block:: tcl + + element gradientInelasticBeamColumn 10 1 2 21 1 2 1 0.2 0.3 0.5 20 -integration Simpson -iter 20 1E-8 1E-6; + + +Observations/recommendations: + +* The number of integration points, N, was selected to be equal to 21 to achieve lc ⁄ Δx ≥ 1.5 – or more simply, N ≥ 1.5L ⁄ lc + 1. This condition has been found to result in discretization convergence from most common applications. Yet, users are recommended to perform their own discretization convergence study, as dictated by their applications, and as they would do for conventional force-based elements. +* As illustrated in Fig. 2, section tags 1 and 2 refer to fiber sections representing the RC beam’s cross-sections A-A and B-B. These fiber sections are defined with two different longitudinal reinforcement layouts and two different confined concrete material models because of their transverse reinforcement differences. +* Each member shall be modeled by a single gradientInelasticBeamColumn element. If two or more elements are used, they are recommended to be larger than 4lc. + + +.. figure:: GI_Fig2.png + :align: center + :figclass: align-center + :scale: 80 % + + Fig. 2: GI element application example + + +.. admonition:: **PYTHON EXAMPLE** + + The element command for the GI element simulating the RC beam in Fig. 2, assuming lc = **0.5**, while the tag for the predefined coordinate-transformation and beam integration objects are **20** and **10**, respectively, may take the form below: + + .. code-block:: python + + element('gradientInelasticBeamColumn', 10, 1, 2, 20, 10, 0.5, '-iter', 20, 1E-8, 1E-6) + + +**REFERENCES:** + +#. Sideris, P., Salehi, M. (2016). "A Gradient-Inelastic Flexibility-based Frame Element Formulation." Journal of Engineering Mechanics, 142(7): 04016039. +#. Salehi, M., Sideris, P. (2017). "Refined Gradient Inelastic Flexibility-Based Formulation for Members Subjected to Arbitrary Loading." Journal of Engineering Mechanics, 143(9): 04017090. +#. Salehi, M., Sideris, P., Liel, A.B. (2017). "Seismic Collapse Analysis of RC Framed Structures using the Gradient Inelastic Force-Based Element Formulation." 16th World Conference on Earthquake Engineering (16WCEE), Santiago Chile, January 9-13. +#. Salehi, M., Sideris, P., Liel, A.B. (2020). "Assessing Damage and Collapse Capacity of Reinforced Concrete Structures Using the Gradient Inelastic Beam Element Formulation." Engineering Structures, 225: 111290. + +*When citing the GI element, please use the first two articles* + +Code developed by: `Mohammad Salehi `_ |msalehi2004| (Rice University) and `Petros Sideris `_ |psideris| (Texas A&M University) + + + diff --git a/docs/_sources/user/manual/model/elements/mixedBeamColumnAsym.rst.txt b/docs/_sources/user/manual/model/elements/mixedBeamColumnAsym.rst.txt index 266efbd8..cf92af5b 100644 --- a/docs/_sources/user/manual/model/elements/mixedBeamColumnAsym.rst.txt +++ b/docs/_sources/user/manual/model/elements/mixedBeamColumnAsym.rst.txt @@ -1,274 +1,274 @@ -.. _mixedBeamColumnAsym: - -Mixed Beam Element (Asymmetric Sections) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This command is used to construct a **MixedBeamColumnAsym3d** element object, which is suitable for modeling flexural, flexural-torsionl and torsional buckling of members with asymmetric section such as angles and tees. It can also be used to model members with doublely-symmetric sections. The corotational total Lagrangian method is used to capture the axial-flexural-torsional interaction behavior, while the fiber section method is used for modeling material nonlinearity. The fibers and coordinates of the shear center should be defined with respect to the principal axes of the section. This element can represent a nonlinear curvature field within the element. Note that warping is not considered in this element. - -For more information about the element formulation, please refer to the references at the end of this page. - -**TCL ELEMENT COMMAND** - -For 3D problems: - -.. function:: element mixedBeamColumnAsym $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag <-shearCenter $y0 $z0> <-integration integrType> - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $numIntgrPts, |integer|, total number of integration points - $secTag, |integer|, section tag - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -shearCenter, "", "", used to define coordinates of the shear center - "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) (default y0=z0=0.0) - -integration, "", "", used to select integration type - "", integrType, |string|, "numerical integration type, options are Lobatto, Legendre, Radau, NewtonCotes, Trapzoidal (default = Lobatto)" - -.. figure:: dispBeamColumnAsym_Fig1.jpg - :align: center - :figclass: align-center - :scale: 25 - - Fig. 1: Coordinate systems for members with asymmetric sections (CC': centroidal axis, SS': shear center axis) - -**PYTHON ELEMENT COMMAND** - -For 3D problems: - -.. function:: element ('mixedBeamColumnAsym', $eleTag, $iNode, $jNode, $transfTag, $integrTag, '-shearCenter', $y0, $z0) - -The required arguments are: - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $iNode $jNode, |integer|, end nodes - $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object - $integrTag, |integer|, identifier for previously-defined beam integration object - -The optional arguments are: - -.. csv-table:: - :header: "Argument", "Sub-argument", "Type", "Description" - :widths: 10, 10, 10, 40 - - -shearCenter, "", "", used to define coordinates of the shear center - "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) - -NOTES: - #. For asymmetric sections, y0 and z0 should be passed to the fiber section object using the FiberAsym command. In Tcl, it is like: section FiberAsym $secTag $y0 $z0 -GJ $GJ {...}. - -.. admonition:: Example - - The following codes construct Example 4.2 in Du and Hajjar (2021). The libraries can be found from the OpenSeesWiki. The definition of the angle section (L3x2x0_25.tcl) is not provided here, but the mesh information is shown in the following Python code. Note that in order for clarity the mesh here is coarser than that used in Du and Hajjar (2021). - - 1. **Tcl Code** - - .. code-block:: tcl - - # -------------------------------------------------------------------------------------------------- - # 3D Steel L-section beam subjected to compressive load on shear center - # Xinlong Du, 9/25/2019 - # Mixed beam-column element for asymmetric sections - # -------------------------------------------------------------------------------------------------- - set systemTime [clock seconds] - puts "Starting Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" - set startTime [clock clicks -milliseconds]; - # SET UP ---------------------------------------------------------------------------- - wipe; # clear memory of all past model definitions - model BasicBuilder -ndm 3 -ndf 6; # Define the model builder, ndm=#dimension, ndf=#dofs - set dataDir Data; # set up name of data directory - file mkdir $dataDir; # create data directory - source LibUnits.tcl; # define units - source DisplayPlane.tcl; # procedure for displaying a plane in model - source DisplayModel3D.tcl; # procedure for displaying 3D perspectives of model - # define GEOMETRY ------------------------------------------------------------------ - #Nodes, NodeNumber, xCoord, yCoord, zCoord - for {set i 1} {$i<8} {incr i 1} { - node $i [expr -9.2+9.2*$i] 0 0; - } - # ------ define boundary conditions - # NodeID,dispX,dispY,dispZ,rotX,RotY,RotZ - fix 1 1 1 1 1 1 1; - set StartNode 1; - set EndNode 7; - # Define SECTIONS ------------------------------------------------------------- - set ColSecTag 1 - # define MATERIAL properties - set Es [expr 27910.0*$ksi]; # Steel Young's Modulus - set nu 0.3; - set Gs [expr $Es/2./[expr 1+$nu]]; # Torsional stiffness Modulus - set matID 1 - uniaxialMaterial Elastic $matID $Es; - set J [expr 0.02473958*$in4] - set GJ [expr $Gs*$J] - set z0 [expr 0.64625474*$in]; - set y0 [expr -0.68720012*$in]; - source L3x2x0_25.tcl; - # define ELEMENTS----------------------------------------------------------------------------------------------- - set IDColTransf 1; # all members - set ColTransfType Corotational; # options for columns: Linear PDelta Corotational - geomTransf $ColTransfType $IDColTransf 0 0 1; #define geometric transformation: performs a corotational geometric transformation - set numIntgrPts 2; # number of Gauss integration points - for {set i 1} {$i<$EndNode} {incr i 1} { - set elemID $i - set nodeI $i - set nodeJ [expr $i+1] - element mixedBeamColumnAsym $elemID $nodeI $nodeJ $numIntgrPts $ColSecTag $IDColTransf -shearCenter $y0 $z0; - } - - # Define RECORDERS ------------------------------------------------------------- - recorder Node -file $dataDir/DispMB6.out -time -node $EndNode -dof 1 2 3 4 5 6 disp; # displacements of middle node - recorder Node -file $dataDir/ReacMB6.out -time -node $StartNode -dof 1 2 3 4 5 6 reaction; # support reaction - - # Define DISPLAY ------------------------------------------------------------- - DisplayModel3D DeformedShape; # options: DeformedShape NodeNumbers ModeShape - - # define Load------------------------------------------------------------- - set N 15.0; - pattern Plain 2 Linear { - # NodeID, Fx, Fy, Fz, Mx, My, Mz - load $EndNode -$N 0 0 0 0 0; - } - - # define ANALYSIS PARAMETERS------------------------------------------------------------------------------------ - constraints Plain; # how it handles boundary conditions - numberer Plain; # renumber dof's to minimize band-width - system BandGeneral;# how to store and solve the system of equations in the analysis - test NormDispIncr 1.0e-08 1000; # determine if convergence has been achieved at the end of an iteration step - #algorithm NewtonLineSearch;# use Newton's solution algorithm: updates tangent stiffness at every iteration - algorithm Newton; - set Dincr -0.01; - #Node, dof, 1st incr, Jd, min, max - integrator DisplacementControl $EndNode 1 $Dincr 1 $Dincr -0.01; - analysis Static ;# define type of analysis static or transient - analyze 7000; - puts "Finished" - #-------------------------------------------------------------------------------- - set finishTime [clock clicks -milliseconds]; - puts "Time taken: [expr ($finishTime-$startTime)/1000] sec" - set systemTime [clock seconds] - puts "Finished Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" - - 2. **Python Code** - - .. code-block:: python - - # -------------------------------------------------------------------------------------------------- - # 3D Steel L-section beam subjected to compressive load on shear center - # Xinlong Du, 5/31/2021 - # Mixed beam-column element for asymmetric sections - # -------------------------------------------------------------------------------------------------- - #from openseespy.opensees import * - from opensees import * - import numpy as np - import matplotlib.pyplot as plt - import os - # SET UP ---------------------------------------------------------------------------- - wipe() - model('basic', '-ndm', 3, '-ndf', 6) - # units - inch = 1.0; - kip = 1.0; - sec = 1.0; - # Dependent units - sq_in = inch*inch; - ksi = kip/sq_in; - ft = 12.0*inch; - in4 = inch**4; - dataDir = 'Data'; - #os.mkdir(dataDir); - # define GEOMETRY ------------------------------------------------------------------ - for i in range(1,8): - node(i,-9.2+9.2*i,0.0,0.0) - # define boundary conditions - fix(1, 1, 1, 1, 1, 1, 1); - StartNode = 1; - EndNode = 7; - # Define SECTIONS ------------------------------------------------------------- - ColSecTag = 1; - # define MATERIAL properties - Es = 27910.0*ksi; # Steel Young's Modulus - nu = 0.3; - Gs = Es/2./(1+nu); # Torsional stiffness Modulus - matID = 1; - uniaxialMaterial('Elastic', matID, Es); - # SECTION properties - J = 0.02473958*in4; - Gj = Gs*J; - z0 = 0.64625474*inch; - y0 = -0.68720012*inch; - section('FiberAsym', ColSecTag, y0, z0, '-GJ', Gj); - fiber(-0.6872, 0.6463, 0.0625, matID); - fiber(-0.5864, 0.4175, 0.0625, matID); - fiber(-0.4857, 0.1887, 0.0625, matID); - fiber(-0.3849, -0.0401, 0.0625, matID); - fiber(-0.2841, -0.2689, 0.0625, matID); - fiber(-0.1834, -0.4977, 0.0625, matID); - fiber(-0.0826, -0.7265, 0.0625, matID); - fiber( 0.0182, -0.9553, 0.0625, matID); - fiber( 0.1189, -1.1841, 0.0625, matID); - fiber( 0.2197, -1.4129, 0.0625, matID); - fiber( 0.3205, -1.6417, 0.0625, matID); - fiber( 0.4212, -1.8705, 0.0625, matID); - fiber( -0.4584, 0.7470, 0.0625, matID); - fiber( -0.2296, 0.8478, 0.0625, matID); - fiber( -0.0008, 0.9486, 0.0625, matID); - fiber( 0.2280, 1.0493, 0.0625, matID); - fiber( 0.4568, 1.1501, 0.0625, matID); - fiber( 0.6856, 1.2509, 0.0625, matID); - fiber( 0.9143, 1.3516, 0.0625, matID); - # define ELEMENTS----------------------------------------------------------------------------------------------- - # set up geometric transformations of element - ColTransfTag = 1; # all members - vecxz=[0.0, 0.0, 1.0]; - geomTransf('Corotational', ColTransfTag, *vecxz); #define geometric transformation: performs a corotational geometric transformation - # Define Beam-Column Elements - numIntgrPts = 5; # number of Gauss integration points - beamIntTag = 1; - beamIntegration("Legendre", beamIntTag, ColSecTag, numIntgrPts) - for i in range (1,EndNode): - elemID = i; - nodeI = i; - nodeJ = i+1; - element('mixedBeamColumnAsym', elemID, *[nodeI, nodeJ], ColTransfTag, beamIntTag,'-shearCenter', *[y0, z0]); - # Define RECORDERS ------------------------------------------------------------- - recorder('Node', '-file', f'{dataDir}/DispMB6.out', '-time', '-node', *[EndNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'disp'); - recorder('Node', '-file', f'{dataDir}/ReacMB6.out', '-time', '-node', *[StartNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'reaction'); - #------------------------------------------------------------- - N = 15.0; - timeSeries('Linear',1); - pattern('Plain', 2, 1); - load(EndNode, *[-N, 0.0, 0.0, 0.0, 0.0, 0.0]); - # define ANALYSIS PARAMETERS - #------------------------------------------------------------------------------------ - constraints('Plain'); # how it handles boundary conditions - numberer('Plain'); # renumber dof's to minimize band-width - system('BandGeneral');# how to store and solve the system of equations in the analysis - test('NormDispIncr', 1.0e-08, 1000); # determine if convergence has been achieved at the end of an iteration step - algorithm('Newton'); - Dincr = -0.01; - #Node, dof, 1st incr, Jd, min, max - integrator('DisplacementControl', EndNode, 1, Dincr, 1, Dincr, -0.01); - analysis('Static'); # define type of analysis static or transient - analyze(7000); - print('Finished') - -**REFERENCES:** - -#. Du, X., & Hajjar, J. F. (2021). Three-dimensional nonlinear mixed 6-DOF beam element for thin-walled members. Thin-Walled Structures, 164, 107817. - -Code developed by: `Xinlong Du `_ |dxl| (Northeastern University). +.. _mixedBeamColumnAsym: + +Mixed Beam Element (Asymmetric Sections) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This command is used to construct a **MixedBeamColumnAsym3d** element object, which is suitable for modeling flexural, flexural-torsionl and torsional buckling of members with asymmetric section such as angles and tees. It can also be used to model members with doublely-symmetric sections. The corotational total Lagrangian method is used to capture the axial-flexural-torsional interaction behavior, while the fiber section method is used for modeling material nonlinearity. The fibers and coordinates of the shear center should be defined with respect to the principal axes of the section. This element can represent a nonlinear curvature field within the element. Note that warping is not considered in this element. + +For more information about the element formulation, please refer to the references at the end of this page. + +**TCL ELEMENT COMMAND** + +For 3D problems: + +.. function:: element mixedBeamColumnAsym $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag <-shearCenter $y0 $z0> <-integration integrType> + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $numIntgrPts, |integer|, total number of integration points + $secTag, |integer|, section tag + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -shearCenter, "", "", used to define coordinates of the shear center + "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) (default y0=z0=0.0) + -integration, "", "", used to select integration type + "", integrType, |string|, "numerical integration type, options are Lobatto, Legendre, Radau, NewtonCotes, Trapzoidal (default = Lobatto)" + +.. figure:: dispBeamColumnAsym_Fig1.jpg + :align: center + :figclass: align-center + :scale: 25 + + Fig. 1: Coordinate systems for members with asymmetric sections (CC': centroidal axis, SS': shear center axis) + +**PYTHON ELEMENT COMMAND** + +For 3D problems: + +.. function:: element ('mixedBeamColumnAsym', $eleTag, $iNode, $jNode, $transfTag, $integrTag, '-shearCenter', $y0, $z0) + +The required arguments are: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element object tag + $iNode $jNode, |integer|, end nodes + $transfTag, |integer|, identifier for previously-defined coordinate-transformation (CrdTransf) object + $integrTag, |integer|, identifier for previously-defined beam integration object + +The optional arguments are: + +.. csv-table:: + :header: "Argument", "Sub-argument", "Type", "Description" + :widths: 10, 10, 10, 40 + + -shearCenter, "", "", used to define coordinates of the shear center + "", $y0 $z0, |float|, coordinates of the shear center S w.r.t. the centroid C and the principal axes (Fig. 1) + +NOTES: + #. For asymmetric sections, y0 and z0 should be passed to the fiber section object using the FiberAsym command. In Tcl, it is like: section FiberAsym $secTag $y0 $z0 -GJ $GJ {...}. + +.. admonition:: Example + + The following codes construct Example 4.2 in Du and Hajjar (2021). The libraries can be found from the OpenSeesWiki. The definition of the angle section (L3x2x0_25.tcl) is not provided here, but the mesh information is shown in the following Python code. Note that in order for clarity the mesh here is coarser than that used in Du and Hajjar (2021). + + 1. **Tcl Code** + + .. code-block:: tcl + + # -------------------------------------------------------------------------------------------------- + # 3D Steel L-section beam subjected to compressive load on shear center + # Xinlong Du, 9/25/2019 + # Mixed beam-column element for asymmetric sections + # -------------------------------------------------------------------------------------------------- + set systemTime [clock seconds] + puts "Starting Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" + set startTime [clock clicks -milliseconds]; + # SET UP ---------------------------------------------------------------------------- + wipe; # clear memory of all past model definitions + model BasicBuilder -ndm 3 -ndf 6; # Define the model builder, ndm=#dimension, ndf=#dofs + set dataDir Data; # set up name of data directory + file mkdir $dataDir; # create data directory + source LibUnits.tcl; # define units + source DisplayPlane.tcl; # procedure for displaying a plane in model + source DisplayModel3D.tcl; # procedure for displaying 3D perspectives of model + # define GEOMETRY ------------------------------------------------------------------ + #Nodes, NodeNumber, xCoord, yCoord, zCoord + for {set i 1} {$i<8} {incr i 1} { + node $i [expr -9.2+9.2*$i] 0 0; + } + # ------ define boundary conditions + # NodeID,dispX,dispY,dispZ,rotX,RotY,RotZ + fix 1 1 1 1 1 1 1; + set StartNode 1; + set EndNode 7; + # Define SECTIONS ------------------------------------------------------------- + set ColSecTag 1 + # define MATERIAL properties + set Es [expr 27910.0*$ksi]; # Steel Young's Modulus + set nu 0.3; + set Gs [expr $Es/2./[expr 1+$nu]]; # Torsional stiffness Modulus + set matID 1 + uniaxialMaterial Elastic $matID $Es; + set J [expr 0.02473958*$in4] + set GJ [expr $Gs*$J] + set z0 [expr 0.64625474*$in]; + set y0 [expr -0.68720012*$in]; + source L3x2x0_25.tcl; + # define ELEMENTS----------------------------------------------------------------------------------------------- + set IDColTransf 1; # all members + set ColTransfType Corotational; # options for columns: Linear PDelta Corotational + geomTransf $ColTransfType $IDColTransf 0 0 1; #define geometric transformation: performs a corotational geometric transformation + set numIntgrPts 2; # number of Gauss integration points + for {set i 1} {$i<$EndNode} {incr i 1} { + set elemID $i + set nodeI $i + set nodeJ [expr $i+1] + element mixedBeamColumnAsym $elemID $nodeI $nodeJ $numIntgrPts $ColSecTag $IDColTransf -shearCenter $y0 $z0; + } + + # Define RECORDERS ------------------------------------------------------------- + recorder Node -file $dataDir/DispMB6.out -time -node $EndNode -dof 1 2 3 4 5 6 disp; # displacements of middle node + recorder Node -file $dataDir/ReacMB6.out -time -node $StartNode -dof 1 2 3 4 5 6 reaction; # support reaction + + # Define DISPLAY ------------------------------------------------------------- + DisplayModel3D DeformedShape; # options: DeformedShape NodeNumbers ModeShape + + # define Load------------------------------------------------------------- + set N 15.0; + pattern Plain 2 Linear { + # NodeID, Fx, Fy, Fz, Mx, My, Mz + load $EndNode -$N 0 0 0 0 0; + } + + # define ANALYSIS PARAMETERS------------------------------------------------------------------------------------ + constraints Plain; # how it handles boundary conditions + numberer Plain; # renumber dof's to minimize band-width + system BandGeneral;# how to store and solve the system of equations in the analysis + test NormDispIncr 1.0e-08 1000; # determine if convergence has been achieved at the end of an iteration step + #algorithm NewtonLineSearch;# use Newton's solution algorithm: updates tangent stiffness at every iteration + algorithm Newton; + set Dincr -0.01; + #Node, dof, 1st incr, Jd, min, max + integrator DisplacementControl $EndNode 1 $Dincr 1 $Dincr -0.01; + analysis Static ;# define type of analysis static or transient + analyze 7000; + puts "Finished" + #-------------------------------------------------------------------------------- + set finishTime [clock clicks -milliseconds]; + puts "Time taken: [expr ($finishTime-$startTime)/1000] sec" + set systemTime [clock seconds] + puts "Finished Analysis: [clock format $systemTime -format "%d-%b-%Y %H:%M:%S"]" + + 2. **Python Code** + + .. code-block:: python + + # -------------------------------------------------------------------------------------------------- + # 3D Steel L-section beam subjected to compressive load on shear center + # Xinlong Du, 5/31/2021 + # Mixed beam-column element for asymmetric sections + # -------------------------------------------------------------------------------------------------- + #from openseespy.opensees import * + from opensees import * + import numpy as np + import matplotlib.pyplot as plt + import os + # SET UP ---------------------------------------------------------------------------- + wipe() + model('basic', '-ndm', 3, '-ndf', 6) + # units + inch = 1.0; + kip = 1.0; + sec = 1.0; + # Dependent units + sq_in = inch*inch; + ksi = kip/sq_in; + ft = 12.0*inch; + in4 = inch**4; + dataDir = 'Data'; + #os.mkdir(dataDir); + # define GEOMETRY ------------------------------------------------------------------ + for i in range(1,8): + node(i,-9.2+9.2*i,0.0,0.0) + # define boundary conditions + fix(1, 1, 1, 1, 1, 1, 1); + StartNode = 1; + EndNode = 7; + # Define SECTIONS ------------------------------------------------------------- + ColSecTag = 1; + # define MATERIAL properties + Es = 27910.0*ksi; # Steel Young's Modulus + nu = 0.3; + Gs = Es/2./(1+nu); # Torsional stiffness Modulus + matID = 1; + uniaxialMaterial('Elastic', matID, Es); + # SECTION properties + J = 0.02473958*in4; + Gj = Gs*J; + z0 = 0.64625474*inch; + y0 = -0.68720012*inch; + section('FiberAsym', ColSecTag, y0, z0, '-GJ', Gj); + fiber(-0.6872, 0.6463, 0.0625, matID); + fiber(-0.5864, 0.4175, 0.0625, matID); + fiber(-0.4857, 0.1887, 0.0625, matID); + fiber(-0.3849, -0.0401, 0.0625, matID); + fiber(-0.2841, -0.2689, 0.0625, matID); + fiber(-0.1834, -0.4977, 0.0625, matID); + fiber(-0.0826, -0.7265, 0.0625, matID); + fiber( 0.0182, -0.9553, 0.0625, matID); + fiber( 0.1189, -1.1841, 0.0625, matID); + fiber( 0.2197, -1.4129, 0.0625, matID); + fiber( 0.3205, -1.6417, 0.0625, matID); + fiber( 0.4212, -1.8705, 0.0625, matID); + fiber( -0.4584, 0.7470, 0.0625, matID); + fiber( -0.2296, 0.8478, 0.0625, matID); + fiber( -0.0008, 0.9486, 0.0625, matID); + fiber( 0.2280, 1.0493, 0.0625, matID); + fiber( 0.4568, 1.1501, 0.0625, matID); + fiber( 0.6856, 1.2509, 0.0625, matID); + fiber( 0.9143, 1.3516, 0.0625, matID); + # define ELEMENTS----------------------------------------------------------------------------------------------- + # set up geometric transformations of element + ColTransfTag = 1; # all members + vecxz=[0.0, 0.0, 1.0]; + geomTransf('Corotational', ColTransfTag, *vecxz); #define geometric transformation: performs a corotational geometric transformation + # Define Beam-Column Elements + numIntgrPts = 5; # number of Gauss integration points + beamIntTag = 1; + beamIntegration("Legendre", beamIntTag, ColSecTag, numIntgrPts) + for i in range (1,EndNode): + elemID = i; + nodeI = i; + nodeJ = i+1; + element('mixedBeamColumnAsym', elemID, *[nodeI, nodeJ], ColTransfTag, beamIntTag,'-shearCenter', *[y0, z0]); + # Define RECORDERS ------------------------------------------------------------- + recorder('Node', '-file', f'{dataDir}/DispMB6.out', '-time', '-node', *[EndNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'disp'); + recorder('Node', '-file', f'{dataDir}/ReacMB6.out', '-time', '-node', *[StartNode], '-dof', *[1, 2, 3, 4, 5, 6,], 'reaction'); + #------------------------------------------------------------- + N = 15.0; + timeSeries('Linear',1); + pattern('Plain', 2, 1); + load(EndNode, *[-N, 0.0, 0.0, 0.0, 0.0, 0.0]); + # define ANALYSIS PARAMETERS + #------------------------------------------------------------------------------------ + constraints('Plain'); # how it handles boundary conditions + numberer('Plain'); # renumber dof's to minimize band-width + system('BandGeneral');# how to store and solve the system of equations in the analysis + test('NormDispIncr', 1.0e-08, 1000); # determine if convergence has been achieved at the end of an iteration step + algorithm('Newton'); + Dincr = -0.01; + #Node, dof, 1st incr, Jd, min, max + integrator('DisplacementControl', EndNode, 1, Dincr, 1, Dincr, -0.01); + analysis('Static'); # define type of analysis static or transient + analyze(7000); + print('Finished') + +**REFERENCES:** + +#. Du, X., & Hajjar, J. F. (2021). Three-dimensional nonlinear mixed 6-DOF beam element for thin-walled members. Thin-Walled Structures, 164, 107817. + +Code developed by: `Xinlong Du `_ |dxl| (Northeastern University). diff --git a/docs/_sources/user/manual/model/interpolatedGroundMotion.rst.txt b/docs/_sources/user/manual/model/interpolatedGroundMotion.rst.txt deleted file mode 100644 index 4dbe6f80..00000000 --- a/docs/_sources/user/manual/model/interpolatedGroundMotion.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -.. _interpolatedGroundMotion: - -Interpolated Ground Motion -"""""""""""""""""""""""""" - -This command is used to construct an interpolated GroundMotion object, where the motion is determined by combining several previously defined ground motions in the load pattern. The command is as follows: - - -.. function:: groundMotion $tag Interpolated $gmTag1 $gmTag2 ... -fact $fact1 $fact2 ... - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $tag, |integer|, unique tag among ground motions in load pattern - $gmTags, |integerList|, the tags of existing ground motions in pattern to be used for interpolation. - $factors, |floatList|, the interpolation factors. diff --git a/docs/_sources/user/manual/model/loadPattern.rst.txt b/docs/_sources/user/manual/model/loadPattern.rst.txt deleted file mode 100644 index 00b5a9fe..00000000 --- a/docs/_sources/user/manual/model/loadPattern.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -Load Pattern Command -******************** \ No newline at end of file diff --git a/docs/_sources/user/manual/model/mpConstraint.rst.txt b/docs/_sources/user/manual/model/mpConstraint.rst.txt deleted file mode 100644 index 6458c475..00000000 --- a/docs/_sources/user/manual/model/mpConstraint.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -mp -** diff --git a/docs/_sources/user/manual/model/mpConstraints.rst.txt b/docs/_sources/user/manual/model/mpConstraints.rst.txt index cbd1412b..5680ffb3 100644 --- a/docs/_sources/user/manual/model/mpConstraints.rst.txt +++ b/docs/_sources/user/manual/model/mpConstraints.rst.txt @@ -7,8 +7,8 @@ Multi point constraints (MP_Constraints) are constraints that allow the user to .. toctree:: :maxdepth: 1 - equalDOF - rigidDiaphragm - rigidLink + mp_constraint/equalDOF + mp_constraint/rigidDiaphragm + mp_constraint/rigidLink diff --git a/docs/_sources/user/manual/model/equalDOF.rst.txt b/docs/_sources/user/manual/model/mp_constraint/equalDOF.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/equalDOF.rst.txt rename to docs/_sources/user/manual/model/mp_constraint/equalDOF.rst.txt diff --git a/docs/_sources/user/manual/model/rigidDiaphragm.rst.txt b/docs/_sources/user/manual/model/mp_constraint/rigidDiaphragm.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/rigidDiaphragm.rst.txt rename to docs/_sources/user/manual/model/mp_constraint/rigidDiaphragm.rst.txt diff --git a/docs/_sources/user/manual/model/rigidLink.rst.txt b/docs/_sources/user/manual/model/mp_constraint/rigidLink.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/rigidLink.rst.txt rename to docs/_sources/user/manual/model/mp_constraint/rigidLink.rst.txt diff --git a/docs/_sources/user/manual/model/pattern.rst.txt b/docs/_sources/user/manual/model/pattern.rst.txt index e408cfa5..7359848f 100644 --- a/docs/_sources/user/manual/model/pattern.rst.txt +++ b/docs/_sources/user/manual/model/pattern.rst.txt @@ -32,8 +32,8 @@ The type of pattern created and the additional arguments required depends on the .. toctree:: :maxdepth: 4 - plainPattern - uniformExcitationPattern - multiSupportPattern - DRM - H5DRM \ No newline at end of file + pattern/plainPattern + pattern/uniformExcitationPattern + pattern/multiSupportPattern + pattern/DRM + pattern/H5DRM \ No newline at end of file diff --git a/docs/_sources/user/manual/model/H5DRM.rst.txt b/docs/_sources/user/manual/model/pattern/H5DRM.rst.txt similarity index 98% rename from docs/_sources/user/manual/model/H5DRM.rst.txt rename to docs/_sources/user/manual/model/pattern/H5DRM.rst.txt index d72b24fd..afbc61ba 100644 --- a/docs/_sources/user/manual/model/H5DRM.rst.txt +++ b/docs/_sources/user/manual/model/pattern/H5DRM.rst.txt @@ -41,7 +41,7 @@ This load pattern takes input from DRM datasets formatted using the H5DRM data-f Because the H5DRM dataset format is designed to facilitate the sharing of datasets for DRM analysis, the coordinate systems with which the DRM boundary points are represented are generally unrelated to those of the local-scale (OpenSees FEM) model. Thus, we provide a means for transforming between coordinates systems in the implementation of the H5DRM load pattern, which is applied to the DRM boundary point coordinates *before the node matching*. This transformation is described in the following image. - .. figure:: drm-doc-01-transformation.png + .. figure:: figures/drm-doc-01-transformation.png :align: center :figclass: align-center @@ -64,7 +64,7 @@ This load pattern takes input from DRM datasets formatted using the H5DRM data-f | | **Model conditions**: - .. figure:: drm-example-01-mesh.png + .. figure:: figures/drm-example-01-mesh.png :align: center :figclass: align-center @@ -73,7 +73,7 @@ This load pattern takes input from DRM datasets formatted using the H5DRM data-f * H5DRM dataset can be downloaded from here: `santiago1.zip? `_ * DRM motions come from a point source 10km away in the X direction (of the FEM model) and 3 km deep. The point source dips at an angle of 30°, which means that only motions in the X-Z planes occur due to the location of the site. The following is the expected surface response at the site where DRM motions are recorded (in the FEM model X is east, Y is north and Z is up): - .. figure:: drm-example-02-site-motions.png + .. figure:: figures/drm-example-02-site-motions.png :align: center :figclass: align-center diff --git a/docs/_sources/user/manual/model/groundMotion.rst.txt b/docs/_sources/user/manual/model/pattern/groundmotion/groundMotion.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/groundMotion.rst.txt rename to docs/_sources/user/manual/model/pattern/groundmotion/groundMotion.rst.txt diff --git a/docs/_sources/user/manual/model/imposedMotion.rst.txt b/docs/_sources/user/manual/model/pattern/groundmotion/imposedMotion.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/imposedMotion.rst.txt rename to docs/_sources/user/manual/model/pattern/groundmotion/imposedMotion.rst.txt diff --git a/docs/_sources/user/manual/model/multiSupportPattern.rst.txt b/docs/_sources/user/manual/model/pattern/multiSupportPattern.rst.txt similarity index 98% rename from docs/_sources/user/manual/model/multiSupportPattern.rst.txt rename to docs/_sources/user/manual/model/pattern/multiSupportPattern.rst.txt index 62047748..f4f0180d 100644 --- a/docs/_sources/user/manual/model/multiSupportPattern.rst.txt +++ b/docs/_sources/user/manual/model/pattern/multiSupportPattern.rst.txt @@ -23,8 +23,8 @@ As will be demonstrated in the example, the actual support conditions that are a .. toctree:: :maxdepth: 1 - groundMotion - imposedMotion + groundmotion/groundMotion + groundmotion/imposedMotion .. warning:: diff --git a/docs/_sources/user/manual/model/plainPattern.rst.txt b/docs/_sources/user/manual/model/pattern/plainPattern.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/plainPattern.rst.txt rename to docs/_sources/user/manual/model/pattern/plainPattern.rst.txt diff --git a/docs/_sources/user/manual/model/uniformExcitationPattern.rst.txt b/docs/_sources/user/manual/model/pattern/uniformExcitationPattern.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/uniformExcitationPattern.rst.txt rename to docs/_sources/user/manual/model/pattern/uniformExcitationPattern.rst.txt diff --git a/docs/_sources/user/manual/model/uniformPattern.rst.txt b/docs/_sources/user/manual/model/pattern/uniformPattern.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/uniformPattern.rst.txt rename to docs/_sources/user/manual/model/pattern/uniformPattern.rst.txt diff --git a/docs/_sources/user/manual/model/plainGroundMotion.rst.txt b/docs/_sources/user/manual/model/plainGroundMotion.rst.txt deleted file mode 100644 index a7bc0eaa..00000000 --- a/docs/_sources/user/manual/model/plainGroundMotion.rst.txt +++ /dev/null @@ -1,43 +0,0 @@ -.. _plainGroundMotion: - -Plain Ground Motion -""""""""""""""""""" - -This command is used to construct a plain GroundMotion object. Each GroundMotion object is associated with a number of TimeSeries objects, which define the acceleration, velocity and displacement records for that ground motion. The command is as follows: - - -.. function:: groundMotion($gmTag Plain <-accel $tsTag> <-vel $tsTag> <-disp $tsTag> <-int (IntegratorType intArgs)> <-fact $cFactor>) -where - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $gmTag, |integer|, unique tag among ground motions in load pattern - $tsTag, |integer|, tag of TimeSeries object created using timeSeries command. - integratorType, |string|, string inteagting type of integration (optional, default=Trapezoidal). See NOTES below. - $cFactor, |float|, factor to be applied to motions (optional: default=1.0) - -.. note:: - - The displacements are the ones used in the ImposedMotions to set nodal response. - - Any combination of the acceleration, velocity and displacement time-series can be specified. - - If only the acceleration TimeSeries is provided, numerical integration will be used to determine the velocities and displacements. - - For earthquake excitations it is important that the user provide the displacement time history, as the one generated using the trapezoidal method will not provide good results. - - -.. code:: tcl - - timeSeries Sine 1 0 20.0 $period -factor $mag - pattern MultipleSupport 1 { - groundMotion 1 Series -disp 1 - - imposedSupportMotion 1 1 1 - imposedSupportMotion 4 1 1 - imposedSupportMotion 7 1 1 - } - -Code Developed by: |fmk| \ No newline at end of file diff --git a/docs/_sources/user/manual/model/spConstraint.rst.txt b/docs/_sources/user/manual/model/spConstraint.rst.txt deleted file mode 100644 index fef93a2f..00000000 --- a/docs/_sources/user/manual/model/spConstraint.rst.txt +++ /dev/null @@ -1,2 +0,0 @@ -sp -** diff --git a/docs/_sources/user/manual/model/spConstraints.rst.txt b/docs/_sources/user/manual/model/spConstraints.rst.txt index 2989f4b9..83082fba 100644 --- a/docs/_sources/user/manual/model/spConstraints.rst.txt +++ b/docs/_sources/user/manual/model/spConstraints.rst.txt @@ -6,10 +6,10 @@ Single point constraints (SP_Constraints) are constraints that define the respon .. toctree:: :maxdepth: 1 - fix - fixX - fixY - fixZ + sp_constraint/fix + sp_constraint/fixX + sp_constraint/fixY + sp_constraint/fixZ -Non-homogeneous constraints are added with wither :ref:`sp` or :ref:`imposedMotion commands inside the :ref:`plainPattern` or :ref:`multisupportExcitation` commands. +Non-homogeneous constraints are added with wither :ref:`sp_constraint/sp` or :ref:`imposedMotion commands inside the :ref:`plainPattern` or :ref:`multisupportExcitation` commands. diff --git a/docs/_sources/user/manual/model/fix.rst.txt b/docs/_sources/user/manual/model/sp_constraint/fix.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/fix.rst.txt rename to docs/_sources/user/manual/model/sp_constraint/fix.rst.txt diff --git a/docs/_sources/user/manual/model/fixX.rst.txt b/docs/_sources/user/manual/model/sp_constraint/fixX.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/fixX.rst.txt rename to docs/_sources/user/manual/model/sp_constraint/fixX.rst.txt diff --git a/docs/_sources/user/manual/model/fixY.rst.txt b/docs/_sources/user/manual/model/sp_constraint/fixY.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/fixY.rst.txt rename to docs/_sources/user/manual/model/sp_constraint/fixY.rst.txt diff --git a/docs/_sources/user/manual/model/fixZ.rst.txt b/docs/_sources/user/manual/model/sp_constraint/fixZ.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/fixZ.rst.txt rename to docs/_sources/user/manual/model/sp_constraint/fixZ.rst.txt diff --git a/docs/_sources/user/manual/model/sp.rst.txt b/docs/_sources/user/manual/model/sp_constraint/sp.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/sp.rst.txt rename to docs/_sources/user/manual/model/sp_constraint/sp.rst.txt diff --git a/docs/_sources/user/manual/model/timeSeries.rst.txt b/docs/_sources/user/manual/model/timeSeries.rst.txt index 440aa453..b6954df6 100644 --- a/docs/_sources/user/manual/model/timeSeries.rst.txt +++ b/docs/_sources/user/manual/model/timeSeries.rst.txt @@ -21,12 +21,12 @@ The following subsections contain information about **$type** and the number of .. toctree:: :maxdepth: 4 - constantTimeSeries - linearTimeSeries - trigTimeSeries - triangleTimeSeries - rectangularTimeSeries - pulseTimeSeries - pathTimeSeries - peerTimeSeries - PeerNGA + timeseries/constantTimeSeries + timeseries/linearTimeSeries + timeseries/trigTimeSeries + timeseries/triangleTimeSeries + timeseries/rectangularTimeSeries + timeseries/pulseTimeSeries + timeseries/pathTimeSeries + timeseries/peerTimeSeries + timeseries/PeerNGA diff --git a/docs/_sources/user/manual/model/constantTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/constantTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/constantTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/constantTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/linearTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/linearTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/linearTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/linearTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/pathTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/pathTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/pathTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/pathTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/pulseTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/pulseTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/pulseTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/pulseTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/rectangularTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/rectangularTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/rectangularTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/rectangularTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/triangleTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/triangleTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/triangleTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/triangleTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/trigTimeSeries.rst.txt b/docs/_sources/user/manual/model/timeseries/trigTimeSeries.rst.txt similarity index 100% rename from docs/_sources/user/manual/model/trigTimeSeries.rst.txt rename to docs/_sources/user/manual/model/timeseries/trigTimeSeries.rst.txt diff --git a/docs/_sources/user/manual/model/uniaxialMaterial.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterial.rst.txt deleted file mode 100644 index ca2b5105..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterial.rst.txt +++ /dev/null @@ -1,109 +0,0 @@ -.. _uniaxialMaterial: - -uniaxialMaterial Command -************************ - -This command is used to construct a uniaxial material, which provides a uniaxial stress-strain (or force-deformation) relationships. -. - -.. function:: uniaxialMaterial $matType $matTag $matArgs - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $matType, |string|, material type - $matTag, |integer|, unique material tag. - $matArgs, |list|, a list of material arguments with number dependent on material type - - -The following subsections contain information about **$matType** - -#. Steel & Reinforcing-Steel Materials - -.. toctree:: - :maxdepth: 1 - - uniaxialMaterials/Steel01 - uniaxialMaterials/Steel02 - uniaxialMaterials/Steel4 - uniaxialMaterials/Hysteretic - uniaxialMaterials/ReinforcingSteel - uniaxialMaterials/DoddRestrepo - uniaxialMaterials/RambergOsgoodSteel - uniaxialMaterials/SteelMPF - uniaxialMaterials/UVCuniaxial - - -#. Concrete Materials -uniaxialMaterials/Concrete01 -uniaxialMaterials/Concrete02 -uniaxialMaterials/Concrete04 -uniaxialMaterials/Concrete06 -uniaxialMaterials/Concrete07 -uniaxialMaterials/Concrete01 -uniaxialMaterials/ConfinedConcrete01 -uniaxialMaterials/ConcreteD -uniaxialMaterials/FRPConfinedConcrete -uniaxialMaterials/ConcreteCM - -#. Some Standard Uniaxial Materials -uniaxialMaterials/Elastic -uniaxialMaterials/ElasticPP -uniaxialMaterials/ElasticPP_Gap -uniaxialMaterials/ElasticNoTension -uniaxialMaterials/ElasticBilin -uniaxialMaterials/ElasticMultiLinear -uniaxialMaterials/MultiLinear -uniaxialMaterials/Parallel -uniaxialMaterials/Series -uniaxialMaterials/InitialStrain -uniaxialMaterials/InitialStress -uniaxialMaterials/MinMax - -#. Other Uniaxial Materials -uniaxialMaterials/CastFuse -uniaxialMaterials/ViscousDamper -uniaxialMaterials/BilinearOilDamper -uniaxialMaterials/Modified Ibarra-Medina-Krawinkler Deterioration Model with Bilinear Hysteretic Response (Bilin Material) -uniaxialMaterials/Modified Ibarra-Medina-Krawinkler Deterioration Model with Peak-Oriented Hysteretic Response (ModIMKPeakOriented Material) -uniaxialMaterials/Modified Ibarra-Medina-Krawinkler Deterioration Model with Pinched Hysteretic Response (ModIMKPinching Material) -uniaxialMaterials/SAWS -uniaxialMaterials/BARSLIP -uniaxialMaterials/Bond_SP01 - - Strain Penetration Model for Fully Anchored Steel Reinforcing Bars -uniaxialMaterials/Fatigue -uniaxialMaterials/Hardening -uniaxialMaterials/Impact -uniaxialMaterials/Hyperbolic Gap -uniaxialMaterials/LimitState -uniaxialMaterials/PathIndependent -uniaxialMaterials/Pinching4 -uniaxialMaterials/Engineered Cementitious Composites -uniaxialMaterials/SelfCentering -uniaxialMaterials/Viscous -uniaxialMaterials/BoucWen -uniaxialMaterials/BWBN (Pinching Hysteretic Bouc-Wen) - -#. PyTzQz uniaxial materials for p-y, t-z and q-z elements - -.. toctree:: - :maxdepth: 1 - - uniaxialMaterials/PySimple1 - uniaxialMaterials/TzSimple1 - uniaxialMaterials/QzSimple1 - uniaxialMaterials/PyLiq1 - uniaxialMaterials/TzLiq1 - uniaxialMaterials/PySimple1Gen - uniaxialMaterials/TzSimple1Gen - - - uniaxialMaterials/KikuchiAikenHDR - uniaxialMaterials/KikuchiAikenLRB - uniaxialMaterials/AxialSp - uniaxialMaterials/AxialSpHD - uniaxialMaterials/PinchingLimitState - uniaxialMaterials/CFSWSWP - uniaxialMaterials/CFSSSWP - - diff --git a/docs/_sources/user/manual/model/uniaxialMaterials/PySimple1.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterials/PySimple1.rst.txt deleted file mode 100644 index e7170b81..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterials/PySimple1.rst.txt +++ /dev/null @@ -1,97 +0,0 @@ -.. _PySimple1: - -PySimple1 Material -^^^^^^^^^^^^^^^^^^ - -This command is used to construct a PySimple1 uniaxial material object: - -.. function:: uniaxialMaterial PySimple1 $matTag $soilType $pult $Y50 $Cd <$c> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $matTag, |integer|, integer tag identifying material - $soilType, |integer|, = 1 for clay; = 2 for sand. see note below. - $pult, |float|, Ultimate capacity of the p-y material. - $Y50, |float|, Displacement at which 50% of pult is mobilized in monotonic loading. - $Cd, |float|, To set the drag resistance within a fully-mobilized gap as Cd*pult. - $c, |float|, The viscous damping term (dashpot). (optional Default = 0.0). - -.. note:: - - $soilType = 1 Backbone of p-y curve approximates Matlock (1970) soft clay relation. - - soilType = 2 Backbone of p-y curve approximates API (1993) sand relation. - - The "p" or "pult" are distributed loads [force per length of pile] in common design equations, but are both loads for this uniaxialMaterial [i.e., distributed load times the tributary length of the pile]. - - The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero $c values are used to represent radiation damping effects. See theory below. - - In general the :ref:`hht` algorithm is preferred over a :ref:`newmark` algorithm when using this material. This is due to the numerical oscillations that can develop with viscous damping forces under transient loading with certain solution algorithms and damping ratios. - - -The equations describing PySimple1 behavior are described in [BoulangerEtAl1999]_. Only minor changes have been made in its implementation for OpenSees. - -The nonlinear :math:`p-y` behavior is conceptualized as consisting of elastic (:math:`p-y^e`), plastic (:math:`p-y^p`), and gap :math:`(p-y^g)` components in series. Radiation damping is modeled by a dashpot on the “far-field” elastic component :math:`(p-y^e)` of the displacement rate. The gap component consists of a nonlinear closure spring (:math:`p^c-y^g`) in parallel with a nonlinear drag spring :math:`(p^d-y^g)`. Note that :math:`y = y^e + y^p + y^g`, and that :math:`p = p^d + p^c`. - -The plastic component has an initial range of rigid behavior between :math:`-C_r p_{ult} < p < C_r p_{ult}` with :math:`C_r` = the ratio of :math:`p/p_{ult} ` when plastic yielding first occurs in virgin loading. The rigid range of :math:`p`, which is initially :math:`2 C_r p_{ult}`, translates with plastic yielding (kinematic hardening). The rigid range of :math:`p` can be constrained to maintain a minimum size on both the positive and negative loading sides (e.g., 25% of :math:`p{ult}`), and this is accomplished by allowing the rigid range to expand or contract as necessary. Beyond the rigid range, loading of the plastic :math:`(p-y^p)` component is described by: - -.. math:: - p = p_{{ult}} - (p_{{ult}} - p_o) \left [\frac{c y_{50}}{c y_{50} + | z_p - z^p_0|} \right ]^n - -where :math:`p_{ult}` = the ultimate resistance of the :math:`p-y` material in the current loading direction, :math:`p_o = p` at the start of the current plastic loading cycle, :math:`y^p_o = y_p` at the start of the current plastic loading cycle, :math:`c` = constant to control the tangent modulus at the start of plastic yielding, and n = an exponent to control sharpness of the :math:`p-y^p` curve. - -The closure :math:`(p^c-y^g)` spring is described by: - -:math:`p^c = 1.8 p_{{ult}} \left [\frac{y_{50}}{y_{50} + 50(y_o^{+} - y^g)} - \frac{y_{50}}{y_{50} + 50(y_o^{-} - y^g)} \right ] ` -where :math:`y_o^+` = memory term for the positive side of the gap, :math:`y_o^-`= memory term for the negative side of the gap. The initial values of :math:`y_o^+` and :math:`y_o^-` were set as :math:`y_{50}/100` and :math:`- y_{50}/100`, respectively. The factor of 1.8 brings :math:`p^c` up to :math:`p_{ult}` during virgin loading to :math:`y_o^+` (or :math:`y_o^-`). Gap enlargement follows logic similar to that of Matlock et al. (1978). The gap grows on the positive side when the plastic deformation occurs on the negative loading side. Consequently, the :math:`y_o^+` value equals the opposite value of the largest past negative value of, :math:`y^p + y^g + 1.5 y_{50}` where the :math:`1.5y_{50}` represents some rebounding of the gap. Similarly, the :math:`y_o^-` value equals the opposite value of the largest past positive value of :math:`y^p+y^g-1.5y_{50}`. This closure spring allows for a smooth transition in the load displacement behavior as the gap opens or closes. - - -The nonlinear drag :math:`(p^d-y^g)` spring is described by: - -.. math:: - - p^d = C_d p_{{ult}} - (C_d p_{{ult}} - p^d_o) \left [\frac{y_{50}}{y_{50} + 2| y^g - y^g_o|} \right ]^n - -where :math:`C_d =` ratio of the maximum drag force to the ultimate resistance of the p-y material, :math:`d^p_o =p^d` at the start of the current loading cycle, and :math:`y^g_o = y^g` at the start of the current loading cycle. - -The flexibility of the above equations can be used to approximate different p-y backbone relations. Matlock’s (1970) recommended backbone for soft clay is closely approximated using :math:`c = 10`, :math:`n = 5`, and :math:`C_r = 0.35`. API’s (1993) recommended backbone for drained sand is closely approximated using :math:`c = 0.5`, :math:`n = 2`, and :math:`C_r = 0.2`. PySimple1 is currently implemented to allow use of these two default sets of values. Values of :math:`p_{ult}`, :math:`y_{50}`, and :math:`C_d` must then be specified to define the :math:`p-y` material behavior. - -Viscous damping on the far-field (elastic) component of the p-y material is included for approximating radiation damping. For implementation in OpenSees the viscous damper is placed across the entire material, but the viscous force is calculated as proportional to the component of velocity (or displacement) that developed in the far-field elastic component of the material. For example, this correctly causes the damper force to become zero during load increments across a fully formed gap. In addition, the total force across the p-y material is restricted to pult in magnitude so that the viscous damper cannot cause the total force to exceed the near-field soil capacity. Users should also be familiar with numerical oscillations that can develop in viscous damper forces under transient loading with certain solution algorithms and damping ratios. In general, an HHT algorithm is preferred over a Newmark algorithm for reducing such oscillations in materials like PySimple1. - -.. figure:: PySimple1A.gif - :align: center - :figclass: align-center - - -.. figure:: PySimple1B.gif - :align: center - :figclass: align-center - -.. admonition:: Example - - The following constructs a PySimple material with tag **1**, soil type **2** (sand), :math:`p_{ult}` of **4577.81** and a :math:`Y_{50}` of **0.0066**. Cd is set to **0.0** for zero damping. - - 1. **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial PySimple1 1 2 4577.81 0.0066 0.0 - - 2. **Python Code** - - .. code-block:: python - - uniaxialMaterial('PySimple1', 1, 2, 4577.81, 0.0066, 0.0) - - -Code Developed by: `Ross Boulanger `_, UC Davis - - -.. [BoulangerEtAl1999] Boulanger, R. W., Curras, C. J., Kutter, B. L., Wilson, D. W., and Abghari, A. (1999). "Seismic soil-pile-structure interaction experiments and analyses." Journal of Geotechnical and Geoenvironmental Engineering, ASCE, 125(9): 750-759. Only minor changes have been made in its implementation for OpenSees. - -.. [BoulangerEtAl1990] Boulanger, R.W., Curras, C.J., Kutter, B.L., Wilson, D.W., and Abghari, A. (1990). "Seismic Soil-pile-strcture interaction experiments and analysis", Jornal of Geotechnical and Geoenvironmental Engineering, ASCS, 125(9):750-759. - - - diff --git a/docs/_sources/user/manual/model/uniaxialMaterials/QzSimple1.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterials/QzSimple1.rst.txt deleted file mode 100644 index 87037cc5..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterials/QzSimple1.rst.txt +++ /dev/null @@ -1,102 +0,0 @@ -.. _QzSimple1: - -QzSimple1 Material -^^^^^^^^^^^^^^^^^^ - -This command is used to construct a QzSimple1 uniaxial material object: - -.. function:: uniaxialMaterial QzSimple1 $matTag $qzType $qult $Z50 <$suction $c> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $matTag, |integer|, integer tag identifying material - $qzType, |integer|, 1 or 2 see note. - $qult, |float|, Ultimate capacity of the q-z material. SEE NOTE 1. - $Z50, |float|, Displacement at which 50% of qult is mobilized in monotonic loading. - $suction, |float|, Uplift resistance is equal to suction*qult. Default = 0.0. - $c, |float|, Viscous damping term (default = 0.0). see note - -.. note:: - - qzType = 1 Backbone of q-z curve approximates Reese and O'Neill's (1987) relation for drilled shafts in clay. - - qzType = 2 Backbone of q-z curve approximates Vijayvergiya's (1977) relation for piles in sand. - - $qult: Ultimate capacity of the q-z material. Note that "q" or "qult" are stresses [force per unit area of pile tip] in common design equations, but are both loads for this uniaxialMaterial [i.e., stress times tip area]. - - $Y50: Displacement at which 50% of pult is mobilized in monotonic loading. Note that Vijayvergiya's relation (qzType=2) refers to a "critical" displacement (zcrit) at which qult is fully mobilized, and that the corresponding z50 would be 0. 125zcrit. - - $suction: The value of suction must be 0.0 to 0.1.* - - $c: The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero c values are used to represent radiation damping effects.* - - optional args $suction and $c must either both be omitted or both provided. - - -EQUATIONS and EXAMPLE RESPONSES: - -The equations describing QzSimple1 behavior are similar to those for p-y materials by [BoulangerEtAl1999]_. Modifications were required for representing the different responses of a q-z` material in compression versus uplift. - - -The nonlinear q-z behavior is conceptualized as consisting of elastic (q-:math:`z^e`), plastic (q-:math:`z^p`), and gap (:math:`q-z^g`) components in series. Radiation damping is modeled by a dashpot on the “far-field” elastic component (:math:`q-z^e`) of the displacement rate. The gap component consists of a bilinear closure spring (:math:`q^c-z^g`) in parallel with a nonlinear drag spring (:math:`q^d-z^g`). Note that :math:`z = z^e + z^p + z^g`, and that :math:`q = q^d + q^c`. - -The plastic component has an initial range of rigid behavior between :math:`-C_r q_{ult} < q < C_r q_{ult}` with :math:`C_r` = the ratio of :math:`\frac{q}{q_{{ult}}}` when plastic yielding first occurs in virgin loading. The rigid range of q, which is initially :math:`2 C_r q_{ult}`, translates and grows with plastic yielding. The rigid range of q is constrained to a maximum size of :math:`0.7q_{{ult}}`. Beyond the rigid range, loading of the plastic (:math:`q-z^p`) component is described by: - -.. math:: - - q = q_{{ult}} - (q_{{ult}} - q_0) \left [\frac{c * z_{50}}{c * z_{50} + | z_p - z^p_0|} \right ] - -where :math:`q_ult` = the ultimate resistance of the :math:`q-z` material in the current loading direction, :math:`q_o = q` at the start of the current plastic loading cycle, p :math:`z^p_o = z^p` at the start of the current plastic loading cycle, and c and n are constants that control the shape of :math:`q-z^p` curve. - -The closure (:math:`q^c-z^g`) component is simply a bilinear elastic spring, which is relatively rigid in compression and extremely flexible in tension (uplift). - -The nonlinear drag (:math:`q^d-z^g`) component is used to allow thethe specification of some minimum “suction” on the pile tip during uplift. It is described by: - - -.. math:: - - q^d = C_d q_{ult} - (C_d q_{{ult}} - q^d_0) \left [\frac{z_{50}}{z_{50} + 2| z^g - z^g_0|} \right ] - -where :math:`C_d` = ratio of the maximum drag (suction) force to the ultimate resistance of the :math:`q-z` material, :math:`q^d_o = q^d` at the start of the current loading cycle, and :math:`z^g_o = z^g` at the start of the current loading cycle. - -The flexibility of the above equations can be used to approximate different q-z backbone relations. Reese and O’Neill’s (1987) recommended backbone for drilled shafts in clay is closely approximated using :math:`c = 0.35`, :math:`n = 1.2`, and :math:`C_r = 0.2`. Vijayvergiya’s (1977) recommended backbone for piles in sand is closely approximated using :math:`c = 12.3`, :math:`n = 5.5`, and :math:`C_r = 0.3`. - -QzSimple1 is currently implemented to allow use of these two default sets of values. Values of :math:`q_{ult}`, :math:`z_50`, and suction (i.e., :math:`C_d`) must then be specified to define the :math:`q-z` material behavior. - -Viscous damping on the far-field (elastic) component of the :math:`q-z` material is included for approximating radiation damping. For implementation in OpenSees the viscous damper is placed across the entire material, but the viscous force is calculated as proportional to the component of velocity (or displacement) that developed in the far-field elastic component of the material. For example, this correctly causes the damper force to become zero during load increments across a fully formed gap in uplift. In addition, the total force across the :math:`q-z` material is restricted to :math:`q_{ult}` in magnitude so that the viscous damper cannot cause the total force to exceed the near-field soil capacity. Users should also be familiar with numerical oscillations that can develop in viscous damper forces under transient loading with certain solution algorithms and damping ratios. In general, an HHT algorithm is preferred over a Newmark algorithm for reducing such oscillations in materials like QzSimple1. - -Examples of the monotonic backbones and cyclic loading response of QzSimple1 are given in the following plots. - - -.. figure:: QzSimple1A.gif - :align: center - :figclass: align-center - - -.. figure:: QzSimple1B.gif - :align: center - :figclass: align-center - -.. admonition:: Example - - The following constructs a PySimple material with tag **101**, soil type **2** (sand), :math:`q_{ult}` of **47216.4** and a :math:`Z_{50}` of **0.00625**. suction and c are set to **0.0**. - - 1. **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial QzSimple1 101 2 47216.4 0.00625 0.0 0.0 - - 2. **Python Code** - - .. code-block:: python - - uniaxialMaterial('QzSimple1', 101, 2, 47216.4, 0.00625, 0.0, 0.0) - -Code Developed by: `Ross Boulanger `_, UC Davis - -.. [BoulangerEtAl1999] Boulanger, R. W., Curras, C. J., Kutter, B. L., Wilson, D. W., and Abghari, A. (1999). "Seismic soil-pile-structure interaction experiments and analyses." Journal of Geotechnical and Geoenvironmental Engineering, ASCE, 125(9): 750-759. Only minor changes have been made in its implementation for OpenSees. - - diff --git a/docs/_sources/user/manual/model/uniaxialMaterials/Steel01.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterials/Steel01.rst.txt deleted file mode 100644 index bbad88f5..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterials/Steel01.rst.txt +++ /dev/null @@ -1,71 +0,0 @@ - -.. _steel01: - -Steel01 Material -^^^^^^^^^^^^^^^^ - -This command is used to construct a uniaxial bilinear steel material object with kinematic hardening and optional isotropic hardening described by a non-linear evolution equation (REF: Fedeas). - -.. function:: uniaxialMaterial Steel01 $matTag $Fy $E0 $b <$a1 $a2 $a3 $a4> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $matTag, |integer|, integer tag identifying material - $Fy, |float|, yield strength - $E0, |float|, initial elastic tangent - $b, |float|, strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent) - $a1, |float|, optional: isotropic hardening parameter: increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0). - $a2, |float|, optional:isotropic hardening parameter (see explanation under $a1) - $a3, |float|, optional: isotropic hardening parameter: increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0) - $a4, |float|, optional: isotropic hardening parameter (see explanation under $a3) - - -.. note:: - By default there is no isotropic hardening. - - -.. _fig-mdof: - -.. figure:: figures/Steel01.gif - :align: center - :figclass: align-center - - Steel01 - -.. figure:: figures/Steel01HystereticA.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Default Hysteretic Behavior (NO isotropic hardening) - -.. figure:: figures/Steel01HystereticB.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Hysteretic Behavior of Model with Isotropic Hardening in Compression - -.. figure:: figures/Steel01HystereticC.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Hysteretic Behavior of Model with Isotropic Hardening in Tension - -.. admonition:: Example - - The following is used to construct a Steel01 mataerial with a tag of **1**, a yield strength of $60.0** and an initial tangent stiffness of **30000,0**. - - 1. **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial Steel01 60.0 30000.0 - - 2. **Python Code** - - .. code-block:: python - - uniaxialMaterial('Steel01',60.0,30000.0) - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/model/uniaxialMaterials/Steel02.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterials/Steel02.rst.txt deleted file mode 100644 index 403eefe7..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterials/Steel02.rst.txt +++ /dev/null @@ -1,92 +0,0 @@ - -.. _steel02: - -Steel02 Material -^^^^^^^^^^^^^^^^ - -This command is used to construct a uniaxial Giuffre-Menegotto-Pinto steel material object with isotropic strain hardening. - - -.. function:: uniaxialMaterial Steel02 $matTag $Fy $E $b $R0 $cR1 $cR2 <$a1 $a2 $a3 $a4 $sigInit> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - -$matTag integer tag identifying material -$Fy yield strength -$E0 initial elastic tangent -$b strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent) -Recommended values: $R0=between 10 and 20, $cR1=0.925, $cR2=0.15 - -$a1 isotropic hardening parameter, increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0). (optional) -$a2 isotropic hardening parameter (see explanation under $a1). (optional default = 1.0). -$a3 isotropic hardening parameter, increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0). (optional default = 0.0) -$a4 isotropic hardening parameter (see explanation under $a3). (optional default = 1.0) -$sigInit Initial Stress Value (optional, default: 0.0) the strain is calculated from epsP=$sigInit/$E -if (sigInit!= 0.0) { double epsInit = sigInit/E; eps = trialStrain+epsInit; } else eps = trialStrain; - - - $matTag, |integer|, integer tag identifying material - $Fy, |float|, yield strength - $E0, |float|, initial elastic tangent - $b, |float|, strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent) - $R0 $CR1 $CR2, |float|, parameters to control the transition from elastic to plastic branches. - $a1, |float|, optional: isotropic hardening parameter: increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0). - $a2, |float|, optional:isotropic hardening parameter (see explanation under $a1) - $a3, |float|, optional: isotropic hardening parameter: increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0) - $a4, |float|, optional: isotropic hardening parameter (see explanation under $a3) - - -.. note:: - Recommended values: $R0=between 10 and 20, $cR1=0.925, $cR2=0.15 - -..REFERENCE: - -Filippou, F. C., Popov, E. P., Bertero, V. V. (1983). "Effects of Bond Deterioration on Hysteretic Behavior of Reinforced Concrete Joints". Report EERC 83-19, Earthquake Engineering Research Center, University of California, Berkeley. - - - -.. _fig-mdof: - -.. figure:: figures/Steel02.gif - :align: center - :figclass: align-center - - Steel01 - -.. figure:: figures/Steel01HystereticA.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Default Hysteretic Behavior (NO isotropic hardening) - -.. figure:: figures/Steel01HystereticB.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Hysteretic Behavior of Model with Isotropic Hardening in Compression - -.. figure:: figures/Steel01HystereticC.jpg - :align: center - :figclass: align-center - - Steel01 Material -- Hysteretic Behavior of Model with Isotropic Hardening in Tension - -.. admonition:: Example - - The following is used to construct a Steel01 mataerial with a tag of **1**, a yield strength of $60.0** and an initial tangent stiffness of **30000,0**. - - 1. **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial Steel01 60.0 30000.0 - - 2. **Python Code** - - .. code-block:: python - - uniaxialMaterial('Steel01',60.0,30000.0) - -Code Developed by: |fmk| diff --git a/docs/_sources/user/manual/model/uniaxialMaterials/TzSimple1.rst.txt b/docs/_sources/user/manual/model/uniaxialMaterials/TzSimple1.rst.txt deleted file mode 100644 index 3f749c99..00000000 --- a/docs/_sources/user/manual/model/uniaxialMaterials/TzSimple1.rst.txt +++ /dev/null @@ -1,85 +0,0 @@ -.. _TzSimple1: - -TzSimple1 Material -^^^^^^^^^^^^^^^^^^ - -This command is used to construct a TzSimple1 uniaxial material object: - -.. function:: uniaxialMaterial TzSimple1 $matTag $tzType $tult $z50 <$c> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $matTag, |integer|, integer tag identifying material - $soilType, |integer|, 1 or 2. see note. - $tult, |float|, Ultimate capacity of the t-z material. see notes - $Z50, |float|, Displacement at which 50% of tult is mobilized in monotonic loading. - $c, |float|, The viscous damping term (optional: default = 0.0). see note. - -.. note:: - - soilType = 1 Backbone of t-z curve approximates Reese and O'Neill (1987) - - soilType = 2 Backbone of t-z curve approximates Mosher (1984) relation. - - The argument tult is the ultimate capacity of the t-z material. Note that “t” or “tult” are shear stresses [force per unit area of pile surface] in common design equations, but are both loads for this uniaxialMaterial [i.e., shear stress times the tributary area of the pile]. - - The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero c values are used to represent radiation damping effects - -EQUATIONS and EXAMPLERESPONSES: - -The equations describing PySimple1 behavior are described in [BoulangerEtAl1990]_. Only minor changes have been made in its implementation for OpenSees. - - -The nonlinear t-z behavior is conceptualized as consisting of elastic (:math:`t-z^e`) and plastic (:math:`t-z^p`) components in series. Radiation damping is modeled by a dashpot on the “far-field” elastic component (:math:`t-z^e`) of the displacement rate. Note that :math:`z = z^e + z^p`, and that :math:`t = t^e = t^p`. - - -The plastic component is described by: - -.. math:: - - t^p = t_{ult} - (t_{ult} - t^p_0) \left [\frac{c z_{50}}{c z_{50} + | z_p - z^p_0|} \right ] - -where :math:`t_{ult} = ` the ultimate resistance of the t-z material in the current loading direction, :math:`t^p_o = t^p` at the start of the current plastic loading cycle, :math:`z^p_0 = z^P` at the start of the current plastic loading cycle, and c = a constant and n = an exponent that define the shape of the :math:`t-z^p` curve. - -The elastic component can be conveniently expressed as: - -.. math:: - - t^e = C_e \frac{t_{ult}}{z_{50}} z^e - -where :math:`C_e` = a constant that defines the normalized elastic stiffness. The value of :math:`C_e` is not an independent parameter, but rather depends on the constants c & n (along with the fact that :math:`t = 0.5 t_{ult}` at :math:`z = z_{50}`). - -The flexibility of the above equations can be used to approximate different t-z backbone relations. Reese and O’Neill’s (1987) recommended backbone for drilled shafts is closely approximated using c = 0.5, n = 1.5, and Ce = 0.708. Mosher’s (1984) recommended backbone for axially loaded piles in sand is closely approximated using c = 0.6, n = 0.85, and Ce = 2.05. TzSimple1 is currently implemented to allow use of these two default sets of values. Values of tult and z50 must then be specified to define the t-z material behavior. - -Viscous damping on the far-field (elastic) component of the t-z material is included for approximating radiation damping. For implementation in OpenSees the viscous damper is placed across the entire material, but the viscous force is calculated as proportional to the component of velocity (displacement rate) that developed in the far-field elastic component of the material. In addition, the total force across the t-z material is restricted to tult in magnitude so that the viscous damper cannot cause the total force to exceed the near-field soil capacity. Users should also be familiar with numerical oscillations that can develop in viscous damper forces under transient loading with certain solution algorithms and damping ratios. In general, an HHT algorithm is preferred over a Newmark algorithm for reducing such oscillations in materials like TzSimple1. - -Examples of the cyclic loading response of TzSimple1 are given in the following plots. Note that the response for tzType = 2 has greater nonlinearity at smaller displacements (and hence greater hysteretic damping) and that it approaches tult more gradually (such that t/tult is still well below - - -.. figure:: TzSimple1.gif - :align: center - :figclass: align-center - - -.. admonition:: Example - - The following constructs a TzSimple material with tag **102**, soil type **2** (Mosher relationship for backbone), :math:`t_{ult}` of **0.734** and a :math:`Z_{50}` of **0.0000254**. C is set to **0.0** for zero damping. - - 1. **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial TzSimple1 102 2 0.734 2.54e-5 0.0 - - 2. **Python Code** - - .. code-block:: python - - uniaxialMaterial('TzSimple1', 102, 2, 0.734, 2.54e-5, 0.0) - -Code Developed by: `Ross Boulanger `_, UC Davis - - -.. [BoulangerEtAl1990] Boulanger, R.W., Curras, C.J., Kutter, B.L., Wilson, D.W., and Abghari, A. (1990). "Seismic Soil-pile-strcture interaction experiments and analysis", Jornal of Geotechnical and Geoenvironmental Engineering, ASCS, 125(9):750-759. diff --git a/docs/_sources/user/manual/modelCommands.rst.txt b/docs/_sources/user/manual/modelCommands.rst.txt index 1cdf0a58..a77ed8de 100644 --- a/docs/_sources/user/manual/modelCommands.rst.txt +++ b/docs/_sources/user/manual/modelCommands.rst.txt @@ -28,6 +28,7 @@ In addition to these commands, other commands needed for modelling include comma .. toctree:: :maxdepth: 1 + model/damping model/mass model/region model/damping diff --git a/docs/_sources/user/messageBoard.rst.txt b/docs/_sources/user/messageBoard.rst.txt index 9c6afcb7..100192bb 100644 --- a/docs/_sources/user/messageBoard.rst.txt +++ b/docs/_sources/user/messageBoard.rst.txt @@ -5,3 +5,13 @@ Questions, Bugs & Feature Requests *********************************** If you have any bugs, feature requests, or questions about how to install or use the application please post on the |messageBoard|. + +Frequently Asked Question +========================= + #. My Recorder does not contain after analysis is completed. + + By default, recorder will write to file after the wipe (Python: ops.wipe() ) command is called unless the default is overridden. + + #. What is the Unit for OpenSees? + + OpenSees has no unit, please use a consistent input-units for your input. \ No newline at end of file diff --git a/docs/_static/OpenSeesLogo.png b/docs/_static/OpenSeesLogo.png index aeda05e3..635a9b39 100644 Binary files a/docs/_static/OpenSeesLogo.png and b/docs/_static/OpenSeesLogo.png differ diff --git a/docs/_static/basic.css b/docs/_static/basic.css index e5d44f9c..215d0fb7 100644 --- a/docs/_static/basic.css +++ b/docs/_static/basic.css @@ -236,16 +236,6 @@ div.body p, div.body dd, div.body li, div.body blockquote { a.headerlink { visibility: hidden; } -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - h1:hover > a.headerlink, h2:hover > a.headerlink, @@ -334,11 +324,15 @@ aside.sidebar { p.sidebar-title { font-weight: bold; } +nav.contents, +aside.topic, div.admonition, div.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, div.topic { border: 1px solid #ccc; padding: 7px; @@ -377,6 +371,8 @@ div.body p.centered { div.sidebar > :last-child, aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; @@ -384,6 +380,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, +nav.contents::after, +aside.topic::after, div.topic::after, div.admonition::after, blockquote::after { @@ -608,19 +606,26 @@ ol.simple p, ul.simple p { margin-bottom: 0; } -dl.footnote > dt, -dl.citation > dt { +aside.footnote > span, +div.citation > span { float: left; - margin-right: 0.5em; } - -dl.footnote > dd, -dl.citation > dd { +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { margin-bottom: 0em; } - -dl.footnote > dd:after, -dl.citation > dd:after { +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { content: ""; clear: both; } @@ -636,10 +641,6 @@ dl.field-list > dt { padding-left: 0.5em; padding-right: 5px; } -dl.field-list > dt:after { - content: ":"; -} - dl.field-list > dd { padding-left: 0.5em; diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css index 8cd4f101..0d9ae7e1 100644 --- a/docs/_static/css/theme.css +++ b/docs/_static/css/theme.css @@ -1,4 +1,4 @@ -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}/*! +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 .eqno .headerlink:before,.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 p .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 button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.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 + */@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 .eqno .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 p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.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 .eqno .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 .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 button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.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 .eqno .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 .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 button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.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 .eqno .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 .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 button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .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 .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 button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.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 button.toctree-expand:before,.wy-menu-vertical li.on a button.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 button.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 .eqno .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 p .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 button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .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 p .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 button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.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 .eqno 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 p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .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 p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.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 .eqno .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 .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .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 .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .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 .btn .headerlink,.rst-content p .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 button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .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 .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 button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .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 .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 button.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 .eqno .btn .fa-large.headerlink,.rst-content .eqno .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 .btn .fa-large.headerlink,.rst-content p .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 button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.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 .eqno .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 .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 button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .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 .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 button.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 .eqno .btn .fa-spin.headerlink,.rst-content .eqno .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 .btn .fa-spin.headerlink,.rst-content p .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 button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.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 .eqno .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 .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.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 .eqno .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 .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 button.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 .eqno .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 .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 button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .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 .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 button.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,.rst-content section 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,.rst-content section 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,.rst-content section ul li p:last-child,.rst-content section 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,.rst-content section 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,.rst-content section 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,.rst-content section 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 .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol 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.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol 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 button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.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 button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;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 button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.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{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.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 1.618em .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 button.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 button.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 button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.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;max-width:100%}.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 .eqno .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 .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 .eqno .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 .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 button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.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 .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.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,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.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,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.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,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.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>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.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,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.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,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.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,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.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,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.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,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.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 .eqno .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 p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.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%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}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.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;white-space:normal}.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.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;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.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/doctools.js b/docs/_static/doctools.js index c3db08d1..527b876c 100644 --- a/docs/_static/doctools.js +++ b/docs/_static/doctools.js @@ -10,6 +10,13 @@ */ "use strict"; +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + const _ready = (callback) => { if (document.readyState !== "loading") { callback(); @@ -18,73 +25,11 @@ const _ready = (callback) => { } }; -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - /** * Small JavaScript module for the documentation. */ const Documentation = { init: () => { - Documentation.highlightSearchWords(); Documentation.initDomainIndexTable(); Documentation.initOnKeyListeners(); }, @@ -126,51 +71,6 @@ const Documentation = { Documentation.LOCALE = catalog.locale; }, - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords: () => { - const highlight = - new URLSearchParams(window.location.search).get("highlight") || ""; - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - const url = new URL(window.location); - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - }, - /** * helper function to focus on search bar */ @@ -210,15 +110,11 @@ const Documentation = { ) return; - const blacklistedElements = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", - ]); document.addEventListener("keydown", (event) => { - if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements - if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; if (!event.shiftKey) { switch (event.key) { @@ -240,10 +136,6 @@ const Documentation = { event.preventDefault(); } break; - case "Escape": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.hideSearchWords(); - event.preventDefault(); } } 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.4.1.js b/docs/_static/jquery-3.4.1.js deleted file mode 100644 index 773ad95c..00000000 --- a/docs/_static/jquery-3.4.1.js +++ /dev/null @@ -1,10598 +0,0 @@ -/*! - * jQuery JavaScript Library v3.4.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2019-05-01T21:04Z - */ -( 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 = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( 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; -} -/* global Symbol */ -// Defining this global in .eslintrc.json 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.4.1", - - // 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; - -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 all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // 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" && !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 ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // 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() {}, - - 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 ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); - }, - - 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, - - // 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 = toType( obj ); - - if ( isFunction( obj ) || 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.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(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(), - nonnativeSelectorCache = 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 + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - 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" ) - }, - - rhtml = /HTML$/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)|^-$|[^\0-\x1f\x7f-\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(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { 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 && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { - - // 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; - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } 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: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - } ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box - if ( ( !support.boxSizingReliable() && isBorderBox || - val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url, options ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - + + - - - +
- -
- - -
-

2.3. Ubuntu

-
-

2.3.1. Software Requirements

+

2.3. Ubuntu

+
+

2.3.1. Software Requirements

  1. Needed Applications and Libraries: For Ubuntu, the user must have a number of packages installed on their system. These can be installed following commands issued in a terminal window.

    sudo apt-get update
     sudo apt install -y cmake
     sudo apt install -y gcc
     sudo apt install -y gfortran
    -sudo apt install -y python3-pip
     sudo apt install -y liblapack-dev
    +sudo apt install -y python3-pip
     sudo apt install -y libopenmpi-dev
     sudo apt install -y libmkl-rt
     sudo apt install -y libmkl-blacs-openmpi-lp64
     sudo apt install -y libscalapack-openmpi-dev
    -git clone https://github.com/OpenSees/mumps.git
    +git clone https://github.com/scivision/mumps.git
     cd mumps
     mkdir build
     cd build
     cmake .. -Darith=d
     cmake --build . --config Release --parallel 4
    -cd ../..
    -pip3 install conan
    +cd ..
     
  2. -
-
-

Warning

-

Read the output from the last command. When building OpenSees below you will use the conan executable just installed. If located in a different location to the path used below, you will get an error. Change the command below to path where conan was just installed.

+
  • Install conan In a new terminal window type

    +
    pip3 install conan
    +
    +.. warning::
    +
    +Read the output from the last command. When installing conan, the path to conan may not be added to your PATH environ variable. You will need to add it to your PATH variable, or modify the **conan install ** command below to include full path to the **conan** exe.
    +
    +
  • +
    -
    -

    2.3.2. Obtaining the Source Code

    -

    You need to obtain the OpenSees source code from github. To obtain the source code, from a terminal cd to the directory you want to place OpenSees and then type the following:

    +
    +

    2.3.2. Obtaining the Source Code & Other setup

    +

    You need to obtain both OpenSees and install MUMPS +To obtain the source code, from a terminal cd to the directory you want to place OpenSees and then type the following:

    git clone https://github.com/OpenSees/OpenSees.git
     
    @@ -481,29 +423,41 @@

    2.3.2. Obtaining the Source Code

    -
    -

    2.3.3. Building the OpenSees Applications

    -

    With everything installed the build process is somehwat simple! Again from a terminal window enter the following commands:

    +
    +

    2.3.3. Building the OpenSees Tcl Interpreter

    +

    With everything installed the build process is somehwat simple! Again from a terminal window:

    cd OpenSees
     mkdir build
     cd build
    -/home/ubuntu/.local/bin/conan install .. --build missing
    -cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libmkl_blacs_openmpi_lp64.so;/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1"
    +conan install .. --build missing
    +cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libmkl_blacs_openmpi_lp64.so;/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" -DMUMPS_DIR="..\..\mumps\build
     cmake --build . --config Release --target OpenSees --parallel 4
    -cmake --build . --config Release --target OpenSeesPy
    -cmake --build . --config Release --target OpenSeesMP
    -cmake --build . --config Release --target OpenSeesSP
    -mv ./OpenSeesPy.so ./opensees.so
     

    Note

      -
    1. If you have more than 4 cores available, you can use the extra cores by changing the 4 value!

    2. +
    3. You only have to issue the first nine commands once. The tenth command is only needed if you change a CMakeFile.txt. Typically if you are just editing code you only need to type the last commands.

    4. +
    5. If you have more than 4 cores available, you can use the exra cores by changing the 4 value!

    +
    +
    +

    2.3.4. Building the OpenSeesPy Library

    +

    With everything installed the build process is somewhat simple! Again from a terminal window:

    +
    +
    cd OpenSees
    +mkdir build
    +cd build
    +conan install .. --build missing
    +cmake ..
    +cmake --build . --config Release --target OpenSeesPy
    +mv ./lib/OpenSeesPy.so ./lib/opensees.so
    +
    +
    +

    Warning

    This last copy is needed as the OpenSeesPy.dylib module at present actually needs to load from a file named opensees.so (go figure). Also to import this module now in your code you can do one of 2 things:

    @@ -518,7 +472,7 @@

    2.3.3. Building the OpenSees Application

    You may of course want to give the existing file a new name with the mv command.

  • If you have not installed openseespy or you want to load the .so you built instead of the installed one you can add the path to opensees.so to your PYTHONPATH env variables with export PYTHONPATH=$PWD or PYTHONPATH=$PWD:$PYTHONPATH depending on if PYTHONPATH exists when you type env in the terminal. NOTE: Using $PWD assumes you are in the directory containg the lib file.

  • -
  • Finally please note you will get a segmentation fault if you run with a different python exe than the one you build with. Look in output of cmake .. for the python library used.

  • +
  • Finally plase note you will get a segmentation fault if you run with a different python exe than the one you build for. Look in output of cmake .. for the python library used.

  • @@ -527,59 +481,41 @@

    2.3.3. Building the OpenSees Application -

    -

    - © Copyright 2020, The Regents of the University of California. - -

    +

    © Copyright 2022, The Regents of the University of California.

    - - - - Built with Sphinx using a - + + Built with Sphinx using a theme - - provided by Read the Docs. + provided by Read the Docs. +
    -

    - - - - - - - - + - - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + - - - - - \ No newline at end of file diff --git a/docs/user/examples/thermalExamples.html b/docs/user/examples/thermalExamples.html index 70879398..46a751e4 100644 --- a/docs/user/examples/thermalExamples.html +++ b/docs/user/examples/thermalExamples.html @@ -1,79 +1,38 @@ - - - - + - 4.2. Thermal Examples — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - - - +
    - -
    - - -
    - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/BandGeneral.html b/docs/user/manual/analysis/BandGeneral.html deleted file mode 100644 index 8632aae3..00000000 --- a/docs/user/manual/analysis/BandGeneral.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - 3.2.3.1. BandGeneral System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.1. BandGeneral System

    -

    This command is used to construct a BandGeneral linear system of equation object. As the name implies, this class is used for matrix systems which have a banded profile. The matrix is stored as shown below in a 1dimensional array of size equal to the bandwidth times the number of unknowns. When a solution is required, the Lapack routines DGBSV and SGBTRS are used. The following command is used to construct such a system:

    -
    -
    -system BandGeneral
    -
    - -

    An n×n matrix A=(ai,j) is a band matrix if all matrix elements are zero outside a diagonally bordered band whose range is determined by constants k1 and k2:

    -

    \(a_{i,j}=0 \quad\mbox{if}\quad j<i-k_1 \quad\mbox{ or }\quad j>i+k_2; \quad k_1, k_2 \ge 0.\ \) -The quantities k1 and k2 are the left and right half-bandwidth, respectively. The bandwidth of the matrix is \(k1 + k2 + 1\) and only the entries in the band are stored; the rest being implicitly zero.

    -

    For example, 6-by-6 a matrix with bandwidth 3:

    -
    -\[\begin{split}\begin{bmatrix} -B_{11} & B_{12} & 0 & \cdots & \cdots & 0 \\ -B_{21} & B_{22} & B_{23} & \ddots & \ddots & \vdots \\ - 0 & B_{32} & B_{33} & B_{34} & \ddots & \vdots \\ - \vdots & \ddots & B_{43} & B_{44} & B_{45} & 0 \\ - \vdots & \ddots & \ddots & B_{54} & B_{55} & B_{56} \\ - 0 & \cdots & \cdots & 0 & B_{65} & B_{66} - \end{bmatrix}\end{split}\]
    -

    is stored as the 6-by-3 matrix

    -
    -\[\begin{split}\begin{bmatrix} -0 & B_{11} & B_{12}\\ -B_{21} & B_{22} & B_{23} \\ -B_{32} & B_{33} & B_{34} \\ -B_{43} & B_{44} & B_{45} \\ -B_{54} & B_{55} & B_{56} \\ -B_{65} & B_{66} & 0 -\end{bmatrix}\end{split}\]
    -
    -

    Example

    -

    The following example shows how to construct a ProfileSPD system

    -
      -
    1. Tcl Code

    2. -
    -
    system BandGeneral
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('BandGeneral')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/BandSPD.html b/docs/user/manual/analysis/BandSPD.html deleted file mode 100644 index 0d9c9805..00000000 --- a/docs/user/manual/analysis/BandSPD.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - - - - - 3.2.3.2. BandSPD System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.2. BandSPD System

    -

    This command is used to construct a BandSPD linear system of equation object. As the name implies, this class is used for symmetric positive definite matrix systems which have a banded profile. The matrix is stored as shown below in a 1 dimensional array of size equal to the (bandwidth/2) times the number of unknowns. When a solution is required, the Lapack routines DPBSV and DPBTRS are used. The following command is used to construct such a system:

    -
    -
    -system BandSPD
    -
    - -

    An n×n matrix is a symmetric positive definite banded matrix if:

    -
      -
    1. \(A_{i,j}=0 \quad\mbox{if}\quad j<i-k \quad\mbox{ or }\quad j>i+k; \quad k \ge 0.\)

    2. -
    3. \(A_{i,j} = A_{j,i}\)

    4. -
    5. \(y^T A y != 0\) for all non-zero vectors y with real entries (\(y \in \mathbb{R}^n\)),

    6. -
    -

    The bandwidth of the matrix is k + k + 1.

    -

    For example, a symmetric 6-by-6 matrix with a right bandwidth of 2:

    -
    -\[\begin{split}\begin{bmatrix} -A_{11} & A_{12} & A_{13} & 0 & \cdots & 0 \\ -& A_{22} & A_{23} & A_{24} & \ddots & \vdots \\ -& & A_{33} & A_{34} & A_{35} & 0 \\ -& & & A_{44} & A_{45} & A_{46} \\ -& sym & & & A_{55} & A_{56} \\ -& & & & & A_{66} -\end{bmatrix}\end{split}\]
    -

    is stored as follows:

    -
    -\[\begin{split}\begin{bmatrix} -A_{11} & A_{12} & A_{13} \\ -A_{22} & A_{23} & A_{24} \\ -A_{33} & A_{34} & A_{35} \\ -A_{44} & A_{45} & A_{46} \\ -A_{55} & A_{56} & 0 \\ -A_{66} & 0 & 0 -\end{bmatrix}\end{split}\]
    -
    -

    Example

    -

    The following example shows how to construct a BandSPD system

    -
      -
    1. Tcl Code

    2. -
    -
    system BandSPD
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('BandSPD')
    -
    -
    -
    -

    Code developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/DisplacementControl.html b/docs/user/manual/analysis/DisplacementControl.html deleted file mode 100644 index 43d27fac..00000000 --- a/docs/user/manual/analysis/DisplacementControl.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - - - - 3.2.6.2. DisplacementControl Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.6.2. DisplacementControl Command

    -

    This command is used to construct a DisplacementControl integrator object. In an analysis step with Displacement Control we seek to determine the time step that will result in a displacement increment for a particular degree-of-freedom at a node to be a prescribed value.

    -
    -
    -integrator DisplacementControl $node $dof $incr <$numIter :math`\Delta U \text{min}` $:math:\Delta U \text{max}`>
    -

    $node, integer, node whose response controls solution -$dof, integer, degree of freedom at the node, valid options: 1 through ndf at node. -$incr, float, first displacement increment <math>Delta U_{text{dof}}</math> -$numIter, integer, the number of iterations the user would like to occur in the solution algorithm. Optional, default = 1.0. -$:math:Delta U text{min}, float, the min step size the user will allow. optional: default :math`= Delta U_{min} = Delta U_0` -$<math>Delta U text{max}</math>, float, the max step size the user will allow. optional: default \(= \Delta U_{max} = \Delta U_0\)

    -
    - -

    integrator DisplacementControl 1 2 0.1; # displacement control algorithm seeking constant increment of 0.1 at node 1 at 2’nd dof.

    -
    -

    3.2.6.2.1. THEORY

    -

    If we write the governing finite element equation at :math:`t + Delta t` as:

    -
    -\[R(U_{t+\Delta t}, \lambda_{t+\Delta t}) = \lambda_{t+\Delta t} F^{ext} - F(U_{t+\Delta t}) \!`\]
    -

    where \(F(U_{t+\Delta t})\!\) are the internal forces which are a function of the displacements \(U_{t+\Delta t}\!\), \(F^{ext}\!\) is the set of reference loads and \(\lambda\!\) is the load multiplier. Linearizing the equation results in:

    -
    -\[K_{t+\Delta t}^{*i} \Delta U_{t+\Delta t}^{i+1} = \left ( \lambda^i_{t+\Delta t} + \Delta \lambda^i \right ) F^{ext} - F(U_{t+\Delta t})\]
    -

    This equation represents n equations in <math> n+1</math> unknowns, and so an additional equation is needed to solve the equation. For displacement control, we introduce a new constraint equation in which in each analysis step we set to ensure that the displacement increment for the degree-of-freedom <math>text{dof}</math> at the specified node is:

    -
    -\[\Delta U_\text{dof} = \text{incr}\!</math>\]
    -

    MORE TO COME:

    -

    In Displacement Control the <math>Delta_Utext{dof}</math> set to <math>t + lambda_{t+1}</math> where,

    -

    <math> Delta U_text{dof}^{t+1} = max left ( Delta U_{min}, min left ( Delta U_text{max}, frac{text{numIter}}{text{lastNumIter}} Delta U_text{dof}^{t} right ) right ) </math>

    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/FullGeneral.html b/docs/user/manual/analysis/FullGeneral.html deleted file mode 100644 index 7108da31..00000000 --- a/docs/user/manual/analysis/FullGeneral.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - - - - - 3.2.3.6. FullGeneral System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.6. FullGeneral System

    -

    This command is used to construct a Full General linear system of equation object. As the name implies, the class utilizes NO space saving techniques to cut down on the amount of memory used. If the matrix is of size, nxn, then storage for an nxn array is sought from memory when the program runs. When a solution is required, the Lapack routines DGESV and DGETRS are used. The following command is used to construct such a system:

    -
    -
    -system FullGeneral
    -
    - -
    -

    Warning

    -
      -
    1. This type of system should almost never be used in production! This is because it requires a lot more memory than every other solver and takes more time in the actual solving operation than any other solver.

    2. -
    3. It is required if the user is interested in looking at the global system matrix, using the printA command

    4. -
    -
    -
    -

    Example

    -

    The following example shows how to construct a FullGeneral system

    -
      -
    1. Tcl Code

    2. -
    -
    system FullGeneral
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('FullGeneral')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/LinerAlgorithm.html b/docs/user/manual/analysis/LinerAlgorithm.html deleted file mode 100644 index 94e4a136..00000000 --- a/docs/user/manual/analysis/LinerAlgorithm.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - - - Linear Algorithm — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    Linear Algorithm

    -

    This command is used to construct a Linear algorithm object which takes one iteration to solve the system of equations.

    -
    -
    -algorithm Linear <-initial> <-factorOnce>
    -
    - - ----- - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    -initial

    string

    optional flag to indicate to use initial stiffness

    -factorOnce

    string

    optional flag to indicate to only set up and factor matrix once

    -
    -

    Note

    -

    As the tangent matrix typically will not change during the analysis in case of an elastic system it is highly advantageous to use the -factorOnce option. Do not use this option if you have a nonlinear system and you want the tangent used to be actual tangent at time of the analysis step.

    -

    The Linear algorithm REQUIRES NO test Command and will complain if one is provided. This means that convergence is not checked.

    -

    Certain transient explicit integration schemes require a Linear algorithm.

    -
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a Linear solution algorithm.

    -
      -
    1. Tcl Code

    2. -
    -
    algorithm Linear
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    algorithm('Linear')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/LoadControl.html b/docs/user/manual/analysis/LoadControl.html deleted file mode 100644 index e880af65..00000000 --- a/docs/user/manual/analysis/LoadControl.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - - 3.2.6.1. LoadControl Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.6.1. LoadControl Command

    -

    This command is used to construct a LoadControl integrator object.

    -
    -
    -integrator LoadControl $lambda <$numIter $minLambda $maxLambda>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $lambda

    float

    the load factor increment \(\lambda\)

    $numIter

    integer

    the number of iterations the user would like to occur in the solution algorithm. Optional: optional default = 1

    $minLambda

    float

    the min stepsize the user will allow. optional: defualt \(= \lambda_{min} = \lambda\)

    $maxLambda

    float

    the max stepsize the user will allow. optional: default \(= \lambda_{max} = \lambda\)

    -
    -

    Note

    -

    The change in applied loads that this causes depends on the active load patterns (those load patterns not set constant) and the loads in the load patterns. If the only active loads acting on the domain are in load patterns with a Linear time series with a factor of 1.0, this integrator is the same as the classical load control method.

    -

    The optional arguments are supplied to speed up the step size in cases where convergence is too fast and slow down the step size in cases where convergence is too slow.

    -
    -
    -

    3.2.6.1.1. Theory

    -

    In Load Control the time in the domain is set to \(t + \lambda_{t+1}\) where,

    -
    -
    -\[\lambda_{t+1} = \max \left ( \lambda_{min}, \min \left ( \lambda_{max}, \frac{\text{numIter}}{\text{lastNumIter}} \lambda_{t} \right ) \right )\]
    -
    -

    where lastNumIter is number of steps required to achieve convergence in the previous step. Changing the step size based on number of iterations in previous step, allows user to reduce the step size when the analysis struggles to converge.

    -
    -

    Example

    -

    The following example shows how to construct a Load Control Integrator with a step size of 0.1, which in a static analysis would increment the pseudo time by the 0.1 factor at each analysis step, thus requiring 10 analysis steps if the full load is considered to be applied when the pseudo domain time is 1.0.

    -
      -
    1. Tcl Code

    2. -
    -
    integrator LoadControl 0.1
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    integrator('LoadControl', 0.1)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/Mumps.html b/docs/user/manual/analysis/Mumps.html deleted file mode 100644 index 4d3ec76a..00000000 --- a/docs/user/manual/analysis/Mumps.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - 3.2.3.8. Mumps Solver — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.8. Mumps Solver

    -

    This command is used to construct a sparse system of equations which uses the Mumps solver. The following command is used to construct such a system:

    -
    -
    -system Mumps
    -
    - -
    -

    Warning

    -

    It is presently limited to the parallel OpenSeesSP and OpenSeesMP applications.

    -
    -
    -

    Example

    -

    The following example shows how to construct a sparse system solved using the Mumps solver.

    -
      -
    1. Tcl Code

    2. -
    -
    system Mumps
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('Mumps')
    -
    -
    -
    -

    Code developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/Newmark.html b/docs/user/manual/analysis/Newmark.html deleted file mode 100644 index fd057184..00000000 --- a/docs/user/manual/analysis/Newmark.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - 3.2.6.3. Newmark Method — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.6.3. Newmark Method

    -

    This command is used to construct a Newmark integrator object.

    -
    -
    -integrator Newmark $gamma $beta
    -
    - - ----- - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $gamma

    float

    \(\gamma\) factor

    $beta

    float

    \(\beta\) factor

    -
    -

    Note

    -
      -
    1. If the accelerations are chosen as the unknowns and \(\beta\) is chosen as 0, the formulation results in the fast but conditionally stable explicit Central Difference method. Otherwise the method is implicit and requires an iterative solution process.

    2. -
    3. Two common sets of choices are:

      -

      Average Acceleration Method (\(\gamma=\frac{1}{2}, \beta = \frac{1}{4}\))

      -

      Linear Acceleration Method (\(\gamma=\frac{1}{2}, \beta = \frac{1}{6}\))

      -
    4. -
    5. \(\gamma > \frac{1}{2}\) results in numerical damping proportional to \(\gamma - \frac{1}{2}\)

    6. -
    7. The method is second order accurate if and only if \(\gamma = \frac{1}{2}\)

    8. -
    9. The method is conditionally stable for \(\beta >= \frac{\gamma}{2} >= \frac{1}{4}\)

    10. -
    -
    -
    -

    3.2.6.3.1. Theory

    -

    The Newmark method is a one step implicit method for solving the transient problem, represented by the residual for the momentum equation:

    -
    -\[R_{t + \Delta t} = F_{t+\Delta t}^{ext} - M \ddot U_{t + \Delta t} - C \dot U_{t + \Delta t} + F(U_{t + \Delta t})^{int}\]
    -

    Using the Taylor series approximation of \(U_{t+\Delta t}\) and \(\dot U_{t+\Delta t}\):

    -
    -\[ \begin{align}\begin{aligned}U_{t+\Delta t} = U_t + \Delta t \dot U_t + \frac{\Delta t^2}{2} \ddot U_t + \frac{\Delta t^3}{6} \dddot U_t + \cdots\\\dot U_{t+\Delta t} = \dot U_t + \Delta t \ddot U_t + \frac{\Delta t^2}{2} \dddot U_t + \cdots\end{aligned}\end{align} \]
    -

    Newton truncated these using the following:

    -
    -\[ \begin{align}\begin{aligned}U_{t+\Delta t} = u_t + \Delta t \dot U_t + \frac{\Delta t^2}{2} \ddot U + \beta {\Delta t^3} \dddot U\\\dot U_{t + \Delta t} = \dot U_t + \Delta t \ddot U_t + \gamma \Delta t^2 \dddot U\end{aligned}\end{align} \]
    -

    in which he assumed linear acceleration within a time step, i.e.,

    -
    -\[\dddot U = \frac{{\ddot U_{t+\Delta t}} - \ddot U_t}{\Delta t}\]
    -

    which results in the following expressions:

    -
    -\[ \begin{align}\begin{aligned}U_{t+\Delta t} = U_t + \Delta t \dot U_t + [(0.5 - \beta) \Delta t^2] \ddot U_t + [\beta \Delta t^2] \ddot U_{t+\Delta t}\\\dot U_{t+\Delta t} = \dot U_t + [(1-\gamma)\Delta t] \ddot U_t + [\gamma \Delta t ] \ddot U_{t+\Delta t}\end{aligned}\end{align} \]
    -

    The variables \(\beta\) and \(\gamma\) are numerical parameters that control both the stability of the method and the amount of numerical damping introduced into the system by the method. For \(\gamma=\frac{1}{2}\) there is no numerical damping; for \(\gamma>=\frac{1}{2}\) numerical damping is introduced. Two well known and commonly used cases are:

    -
    -
      -
    1. Average Acceleration Method (\(\gamma=\frac{1}{2}, \beta = \frac{1}{4}\))

    2. -
    3. Constant Acceleration Method (\(\gamma=\frac{1}{2}, \beta = \frac{1}{6}\))

    4. -
    -
    -

    The linearization of the Newmark equations gives:

    -
    -\[ \begin{align}\begin{aligned}dU_{t+\Delta t}^{i+1} = \beta \Delta t^2 d \ddot U_{t+\Delta t}^{i+1}\\d \dot U_{t+\Delta t}^{i+1} = \gamma \Delta t \ddot U_{t+\Delta t}^{i+1}\end{aligned}\end{align} \]
    -

    which gives the update formula when displacement increment is used as unknown in the linearized system as:

    -
    -\[ \begin{align}\begin{aligned}U_{t+\Delta t}^{i+1} = U_{t+\Delta t}^i + dU_{t+\Delta t}^{i+1}\\\dot U_{t+\Delta t}^{i+1} = \dot U_{t+\Delta t}^i + \frac{\gamma}{\beta \Delta t}dU_{t+\Delta t}^{i+1}\\\ddot U_{t+\Delta t}^{i+1} = \ddot U_{t+\Delta t}^i + \frac{1}{\beta \Delta t^2}dU_{t+\Delta t}^{i+1}\end{aligned}\end{align} \]
    -

    The linearization of the momentum equation using the displacements as the unknowns leads to the following linear equation:

    -
    -\[K_{t+\Delta t}^{*i} \Delta U_{t+\Delta t}^{i+1} = R_{t+\Delta t}^i\]
    -

    where,

    -
    -\[K_{t+\Delta t}^{*i} = K_t + \frac{\gamma}{\beta \Delta t} C_t + \frac{1}{\beta \Delta t^2} M\]
    -

    and,

    -
    -\[R_{t+\Delta t}^i = F_{t + \Delta t}^{ext} - F(U_{t + \Delta t}^{i-1})^{int} - C \dot U_{t+\Delta t}^{i-1} - M \ddot U_{t+ \Delta t}^{i-1}\]
    -
    -

    Example

    -

    The following example shows how to construct a Newmark Integrator.

    -
      -
    1. Tcl Code

    2. -
    -
    integrator Newmark 0.5 0.25
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    integrator('Newmark', 0.5, 0.25)
    -
    -
    -
    -
    -
    Newmark1959
    -

    Newmark, N.M. “A Method of Computation for Structural Dynamics” ASCE Journal of Engineering Mechanics Division, Vol 85. No EM3, 1959.

    -
    -
    -

    Code Developed by: fmk

    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/Newton.html b/docs/user/manual/analysis/Newton.html deleted file mode 100644 index bc34b503..00000000 --- a/docs/user/manual/analysis/Newton.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - - - - <no title> — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    This command is used to construct a NewtonRaphson algorithm object which is uses the Newton-Raphson algorithm to solve the nonlinear residual equation. The Newton-Raphson method is the most widely used and most robust method for solving nonlinear algebraic equations. The command is of the following form:

    -
    -
    -algorithm Newton <-initial> <-initialThenCurrent>
    -
    - - ----- - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    -initial

    string

    optional flag to indicate to use initial stiffness

    -initialThenCurrent

    string

    optional flag to indicate to use initial stiffness on first step and then current on subsequent steps

    -

    The Newton method used in finite element analysis is identical to that taught in basic calculus courses. It is just extended for the n unknown degrees-of-freedom. The method as taught in basic calculus, is a root-finding algorithm that uses the first few terms of the Taylor series of a function \(f(x)\,\!\) in the vicinity of a suspected root \(x_n\,\!\) to find the root \(x_{n+1}\,\!\). Newton’s method is sometimes also known as Newton’s iteration, although in this work the latter term is reserved to the application of Newton’s method for computing square roots.

    -

    The Taylor series of \(r(x)\,\!\) about the point \(x=x_n+\Delta x\,\!\) is given by

    -

    \(f(x_n+\Delta x) = f(x_n)+r^{'}(x_n)\Delta x + 1/2r^{}(x_n) \Delta x^2+....\,\!\) -Keeping terms only to first order,

    -

    \(f(x_n+\Delta x) \approx f(x_n)+r^'(x_n)\Delta x = f(x_n)+ \frac{df(x_n)}{dx}\Delta x\) -and since at the root we wish to find \(x_n + \Delta x\), the function equates to 0, i.e. \(f(x_n+\Delta x) = 0\), we can solve for an approximate \(\Delta x\)

    -

    :math:` Delta x approx -frac{f(x_n)}{f^’(x_n)} = - frac{df(x_n)}{dx}^{-1}f(x_n)` -The Newmark method is thus an iterative method in which, starting at a good initial guess \(x_0\,\!\) we keep iterating until our convergence criteria is met with the following:

    -

    :math:` Delta x = - frac{df(x_n)}{dx}^{-1}f(x_n),!` -:math:` x_{n+1} = x_n + Delta x,!`

    -

    The method is generalized to n unknowns by replacing the above scalar equations with matrix ones.

    -

    \(R(U_n+\Delta x) = R(U_n)+\frac{\partial R(U_n)}{\partial U} \Delta U + O(\Delta U ^2) \,\!\) -The matrix \(\frac{\partial R(U_n)}{\partial U}\,\!\) is called the system Jacobian matrix and will be denoted K:

    -
    -\[`K = \frac{\partial R(U_n)}{\partial U}\,\!\]
    -

    resulting in our iterative procedure where starting from a good initial guess we iterate until our convergence criteria is met with the following:

    -
    -\[\Delta U = - K^{-1}R(U_n),\!\]
    -
    -\[U_{n+1} = U_n + \Delta U\,\!\]
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a Linear solution algorithm.

    -
      -
    1. Tcl Code

    2. -
    -
    algorithm Newton
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    algorithm('Newton')
    -
    -
    -
    -

    Code Developed by: fmk

    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/NormDispIncr.html b/docs/user/manual/analysis/NormDispIncr.html deleted file mode 100644 index b48656a7..00000000 --- a/docs/user/manual/analysis/NormDispIncr.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - - - - - 3.2.4.2. Norm Displacement Increment — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.4.2. Norm Displacement Increment

    -

    This command is used to construct a convergence test which uses the norm of the solution, \(x\) vector, of the matrix equation, \(Ax=b\) to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the change in nodal displacements in the system due to the current unbalance. The command to create a NormUnbalance test is the following:

    -
    -
    -test NormDispIncr $tol $iter <$pFlag> <$nType>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $tol

    float

    the tolerance criteria used to check for convergence

    $iter

    integer

    the max number of iterations to check before returning failure condition

    $pFlag

    integer

    -
    -
    print flag (optional: default is 0) valid options:
    -
    0 print nothing
    -
    1 print information on norms each time test() is invoked
    -
    2 print information on norms and number of iterations at end of successful test
    -
    4 at each step it will print the norms and also the <math>Delta U</math> and <math>R(U)</math> vectors.
    -
    5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test.
    -
    -
    -

    $nType

    integer

    type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm …))

    -
    -

    Note

    -

    When using a penalty constraint handler, large forces (those necessary to enforce the constraint) are included in the \(x\) vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the \(x\) vector.

    -
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a NormDispIncr test which allows 10 iterations till failure with a 2-norm in the \(x\) vector, i.e. \(\sqrt(x^T x)\) of 1.0e-2.

    -
      -
    1. Tcl Code

    2. -
    -
    test NormDispIncr 1.0e-2  10 2
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    test('NormDispIncr', 1.0e-2, 10, 2)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/NormEnergyIncr.html b/docs/user/manual/analysis/NormEnergyIncr.html deleted file mode 100644 index 3992aa52..00000000 --- a/docs/user/manual/analysis/NormEnergyIncr.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - 3.2.4.3. Energy Increment — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.4.3. Energy Increment

    -

    This command is used to construct a convergence test which uses the energy increment, \(0.5 (x^T b)\), where the two vector come from the matrix equation \(Ax=b\), to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, \(x\) is equal to the incremental displacement and \(b\) the unbalanced force. The command to create a NormEnergyIncr test is the following:

    -
    -
    -test EnergyIncr $tol $iter <$pFlag>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $tol

    float

    the tolerance criteria used to check for convergence

    $iter

    integer

    the max number of iterations to check before returning failure condition

    $pFlag

    integer

    -
    -
    print flag (optional: default is 0) valid options:
    -
    0 print nothing
    -
    1 print information on norms each time test() is invoked
    -
    2 print information on norms and number of iterations at end of successful test
    -
    4 at each step it will print the norms and also the <math>Delta U</math> and <math>R(U)</math> vectors.
    -
    5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test.
    -
    -
    -
    -
    -

    Note

    -

    When using a penalty constraint handler, large forces (those necessary to enforce the constraint) are included in the \(x\) vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the \(x\) vector.

    -
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a NormEnergyIncr test which allows 10 iterations till failure with an energy increment \(0.5 (x^T b)\) of 1.0e-2.

    -
      -
    1. Tcl Code

    2. -
    -
    test EnergyIncr 1.0e-2  10 2
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    test('EnergyIncr', 1.0e-2, 10, 2)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/NormUnbalance.html b/docs/user/manual/analysis/NormUnbalance.html deleted file mode 100644 index 57910bff..00000000 --- a/docs/user/manual/analysis/NormUnbalance.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - - - - - - 3.2.4.1. Norm Unbalance — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.4.1. Norm Unbalance

    -

    This command is used to construct a convergence test which uses the norm of the right hand side of the matrix equation, i.e. \(b\) vector in \(Ax=b\), to determine if convergence has been reached. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the unbalanced forces in the system. The command to create a NormUnbalance test is the following:

    -
    -
    -test NormUnbalance $tol $iter <$pFlag> <$nType>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $tol

    float

    the tolerance criteria used to check for convergence

    $iter

    integer

    the max number of iterations to check before returning failure condition

    $pFlag

    integer

    -
    -
    print flag (optional: default is 0) valid options:
    -
    0 print nothing
    -
    1 print information on norms each time test() is invoked
    -
    2 print information on norms and number of iterations at end of successful test
    -
    4 at each step it will print the norms and also the <math>Delta U</math> and <math>R(U)</math> vectors.
    -
    5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test.
    -
    -
    -

    $nType

    integer

    type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm …))

    -
    -

    Note

    -

    When using a penalty constraint handler, large forces (those necessary to enforce the constraint) are included in the \(b\) vector. Even for very small changes in the displacement, if user has selected overly large penalty factor, large forces can appear in the \(b\) vector.

    -
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a NormUnbalance test which allows 10 iterations till failure with a 2-norm in the \(b\) vector, i.e. \(\sqrt(b^T b)\) of 1.0e-2.

    -
      -
    1. Tcl Code

    2. -
    -
    test NormUnbalance 1.0e-2  10 2
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    test('NormUnbalance', 1.0e-2, 10, 2)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/PenaltyMethod.html b/docs/user/manual/analysis/PenaltyMethod.html deleted file mode 100644 index 47ebabbb..00000000 --- a/docs/user/manual/analysis/PenaltyMethod.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - 3.2.1.2. Penalty Method — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.1.2. Penalty Method

    -

    This command is used to construct a PenaltyMethod constraint handler, which enforces the constraints by using the penalty method. The following is the command to construct such a constraint handler:

    -
    -
    -constraints Penalty $alphaS $alphaM
    -
    - - ----- - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $alphaS

    float

    \(\alpha_S\) factor on singe points.

    $alphaM

    float

    \(\alpha_M\) factor on multi-points.

    -
    -

    Warning

    -

    The degree to which the constraints are enforced is dependent on the penalty values chosen. Problems can arise if these values are too small (constraint not enforced strongly enough) or too large (problems associated with conditioning of the system of equations).

    -
    -
    -

    Example

    -

    The following example shows how to construct a Penalty Method constraint handler

    -
      -
    1. Tcl Code

    2. -
    -
    numberer Penalty 1.0e10 1.0e10
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    numberer('Penalty', 1.0e10, 1.0e10)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/PlainConstraints.html b/docs/user/manual/analysis/PlainConstraints.html deleted file mode 100644 index 76efd595..00000000 --- a/docs/user/manual/analysis/PlainConstraints.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - 3.2.1.1. Plain Constraint Handler — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.1.1. Plain Constraint Handler

    -

    This command is used to construct a Plain constraint handler. A plain constraint handler can only enforce homogeneous single point constraints (fix command) and multi-point constraints constructed where the constraint matrix is equal to the identity (equalDOF command). The following is the command to construct a plain constraint handler:

    -
    -
    -constraints Plain
    -
    - -

    This constraint handler can only enforce homogeneous single point constraints (fix command) and multi-pont constraints where the constraint matrix is equal to the identity (equalDOF command).

    -

    It does not follow constraints, by that we mean the constrained node in a MP_Constraint cannot be a retained node in another MP_Constraint.

    -
    -

    Example

    -

    The following example shows how to construct a reverse Cuthill-McKee numberer.

    -
      -
    1. Tcl Code

    2. -
    -
    constraints Plain
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    constraints('Plain')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/PlainNumberer.html b/docs/user/manual/analysis/PlainNumberer.html deleted file mode 100644 index a5661bcc..00000000 --- a/docs/user/manual/analysis/PlainNumberer.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - 3.2.2.1. Plain Numberer — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.2.1. Plain Numberer

    -

    This command is used to construct a Plain degree-of-freedom numbering object to provide the mapping between the degrees-of-freedom at the nodes and the equation numbers. A Plain numberer just takes whatever order the domain gives it nodes and numbers them, this ordering is both dependent on node numbering and size of the model. The command to construct a Plain numberer is a follows:

    -
    -
    -numberer Plain
    -
    - -
    -

    Note

    -

    For very small problems and for the sparse matrix solvers which provide their own numbering scheme, order is not really important so plain numberer is just fine. For large models and analysis using solver types other than the sparse solvers, the order will have a major impact on performance of the solver and the plain handler is a poor choice.

    -
    -
    -

    Example

    -

    The following example shows how to construct a plain numberer

    -
      -
    1. Tcl Code

    2. -
    -
    numberer Plain
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    numberer('Plain')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/ProfileSPD.html b/docs/user/manual/analysis/ProfileSPD.html deleted file mode 100644 index 3b9464f4..00000000 --- a/docs/user/manual/analysis/ProfileSPD.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - 3.2.3.3. ProfileSPD System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.3. ProfileSPD System

    -

    This command is used to construct a ProfileSPD linear system of equation object. As the name implies, this class is used for symmetric positive definite matrix systems. The matrix is stored as shown below in a 1 dimensional array with only those values below the first non-zero row in any column being stored. This is sometimes also referred to as a skyline storage scheme. The following command is used to construct such a system:

    -
    -
    -system ProfileSPD
    -
    - -

    An n×n matrix A= is a symmetric positive definite matrix if:

    -
      -
    1. \(a_{i,j} = a_{j,i}\)

    2. -
    3. \(y^T A y != 0\) for all non-zero vectors y with real entries (\(y \in \mathbb{R}^n\)).

    4. -
    -

    In the skyline or profile storage scheme only the entries below the first no-zero row entry in any column are stored if storing by rows: The reason for this is that as no reordering of the rows is required in gaussian eleimination because the matrix is SPD, no non-zero entries will ocur in the elimination process outside the area stored.

    -

    For example, a symmetric 6-by-6 matrix with a structure as shown below:

    -
    -\[\begin{split}\begin{bmatrix} -A_{11} & A_{12} & 0 & 0 & 0 \\ -& A_{22} & A_{23} & 0 & A_{25} \\ -& & A_{33} & 0 & 0 \\ -& & & A_{44} & A_{45} \\ -& sym & & & A_{55} -\end{bmatrix}\end{split}\]
    -

    The matrix is stored as 1-d array

    -
    -\[\begin{bmatrix} -A_{11} & A_{12} & A_{22} & A_{23} & A_{33} & A_{44} & A_{25} & 0 & A_{45} & A_{55} -\end{bmatrix}\]
    -

    with a further array containing indices of diagonal elements:

    -
    -\[\begin{bmatrix} -1 & 3 & 5 & 6 & 10 -\end{bmatrix}\]
    -
    -

    Example

    -

    The following example shows how to construct a ProfileSPD system

    -
      -
    1. Tcl Code

    2. -
    -
    system ProfileSPD
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('ProfileSPD')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/RCM.html b/docs/user/manual/analysis/RCM.html deleted file mode 100644 index d007e141..00000000 --- a/docs/user/manual/analysis/RCM.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - 3.2.2.2. Reverse Cuthill McKee Numberer — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.2.2. Reverse Cuthill McKee Numberer

    -

    This command is used to construct an RCM degree-of-freedom numbering object to provide the mapping between the degrees-of-freedom at the nodes and the equation numbers. An RCM numberer uses the reverse Cuthill-McKee scheme to order the matrix equations. The command to construct an RCM numberer is a follows:

    -
    -
    -numberer RCM
    -
    - -
    -

    Note

    -

    For very small problems and for the sparse matrix solvers which provide their own numbering scheme, order is not really important so plain numberer is just fine. For large models and analysis using solver types other than the sparse solvers, the order will have a major impact on performance of the solver and the plain handler is a poor choice.

    -
    -
    -

    Example

    -

    The following example shows how to construct a reverse Cuthill-McKee numberer.

    -
      -
    1. Tcl Code

    2. -
    -
    numberer RCM
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    numberer('RCM')
    -
    -
    -
    -
    -
    REFERNCES
    -
      -
    1. Cuthill and J. McKee. Reducing the bandwidth of sparse symmetric matrices In Proc. 24th Nat. Conf. ACM, pages 157–172, 1969.

    2. -
    -
      -
      1. -
      2. George and J. W-H. Liu, Computer Solution of Large Sparse Positive Definite Systems, Prentice-Hall, 1981

      3. -
      -
    1. -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/RelativeNormUnbalance.html b/docs/user/manual/analysis/RelativeNormUnbalance.html deleted file mode 100644 index 753cc37b..00000000 --- a/docs/user/manual/analysis/RelativeNormUnbalance.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - - 3.2.4.4. Relative Norm Unbalance — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.4.4. Relative Norm Unbalance

    -

    This command is used to construct a convergence test which uses the norms of the right hand side of the matrix equation, i.e. \(b\) vector in \(Ax=b\), to determine if convergence has been reached. It uses the ratio of the current norm to the first norm, i.e. :math:`frac{sqrt({b_i}^T{b_i})}{sqrt({b_1}^T{b_1})}. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the unbalanced forces in the system. The command to create a RelativeNormUnbalance test is the following:

    -
    -
    -test RelativeNormUnbalance $tol $iter <$pFlag> <$nType>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $tol

    float

    the tolerance criteria used to check for convergence

    $iter

    integer

    the max number of iterations to check before returning failure condition

    $pFlag

    integer

    -
    -
    print flag (optional: default is 0) valid options:
    -
    0 print nothing
    -
    1 print information on norms each time test() is invoked
    -
    2 print information on norms and number of iterations at end of successful test
    -
    4 at each step it will print the norms and also the <math>Delta U</math> and <math>R(U)</math> vectors.
    -
    5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test.
    -
    -
    -

    $nType

    integer

    type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm …))

    -
    -

    Note

    -

    The convergence test compares the current norm of the unbalance with the norm of the first step to determine if convergence has been achieved. As a consequence it will always take at least two steps to achieve convergence.

    -

    If numerically the solution has a very small unbalance at the first step, this may mean that the test may never indicate success even though the solution had indeed converged to a solution. This is because machine precision and numerical round-off limit how small the unbalance can become.

    -
    -
    -

    Example:

    -

    The following examples demonstrate the command to create a RelativeNormUnbalance test which allows 10 iterations till failure with a 2-norm in the \(b\) vector, i.e. \(\sqrt(b^T b)\) of 1.0e-2.

    -
      -
    1. Tcl Code

    2. -
    -
    test RelativeNormUnbalance 1.0e-2  10 2
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    test('RelativeNormUnbalance', 1.0e-2, 10, 2)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/SparseSYM.html b/docs/user/manual/analysis/SparseSYM.html deleted file mode 100644 index 5aece4be..00000000 --- a/docs/user/manual/analysis/SparseSYM.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - - - - 3.2.3.7. SparseSYM Solver — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.7. SparseSYM Solver

    -

    This command is used to construct a sparse symmetric system of equations which uses a row-oriented solution method in the solution phase. The following command is used to construct such a system:

    -
    -
    -system SparseSYM
    -
    - -
    -

    Note

    -

    Versions of OpenSees up to and including 2.2.0 used SparseSPD instead of SparseSYM as the option to create this system. The code is more general than the SPD moniker implies, working for negative definite as well as positive definite. For backward compatibility this old option continues to work.

    -
    -
    -

    Example

    -

    The following example shows how to construct a SparseSYM system:

    -
      -
    1. Tcl Code

    2. -
    -
    system SparseSYM
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('SparseSYM')
    -
    -
    -
    -

    Code developed by: J. Peng

    -
    -
    REFERENCES
    -
    -
    -

    Kincho H. Law and David R. McKay, “A Parallel Row-Oriented Sparse Solution Method for Finite Element Structural Analysis,” International Journal for Numerical Methods in Engineering, 36:2895-2919, 1993.

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/SuperLU.html b/docs/user/manual/analysis/SuperLU.html deleted file mode 100644 index 12af2c90..00000000 --- a/docs/user/manual/analysis/SuperLU.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - 3.2.3.4. SuperLU System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.4. SuperLU System

    -

    This command is used to construct a SparseGEN linear system of equation object. As the name implies, this class is used for sparse matrix systems. The solution of the sparse matrix is carried out using .. SuperLU. To following command is used to construct such a system:

    -
    -
    -system SuperLU
    -
    - -
    -

    Note

    -
      -
    1. When using the SuperLU system, the software will renumber the equations to ensure a fast solve. As a consequence it is a waste of time specifying anything but a Plain numberer.

    2. -
    3. The original and still working command was system SparseGEN

    4. -
    -
    -
    -

    Example

    -

    The following example shows how to construct a SuperLU system

    -
      -
    1. Tcl Code

    2. -
    -
    system SuperLU
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('SuperLU')
    -
    -
    -
    -

    Code developed by: fmk

    -
    -
    REFERENCES
    -

    James W. Demmel and Stanley C. Eisenstat and John R. Gilbert and Xiaoye S. Li and Joseph W. H. Liu, “A supernodal approach to sparse partial pivoting”, SIAM J. Matrix Analysis and Applications, 20(3), 720-755, 1999.

    -
    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/TransformationMethod.html b/docs/user/manual/analysis/TransformationMethod.html deleted file mode 100644 index 7c003bc6..00000000 --- a/docs/user/manual/analysis/TransformationMethod.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - - - - - 3.2.1.3. Transformation Method — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.1.3. Transformation Method

    -

    This command is used to construct a PenaltyMethod constraint handler, which enforces the constraints by using the penalty method. The following is the command to construct such a constraint handler:

    -
    -
    -constraints Transformation
    -
    - -
    -

    Note

    -

    The single-point constraints when using the transformation method are done directly. The matrix equation is not manipulated to enforce them, rather the trial displacements are set directly at the nodes at the start of each analysis step.

    -
    -
    -
    Great care must be taken when multiple constraints are being enforced as the transformation method does not follow constraints:
      -
    1. If a node is fixed, constrain it with the fix command and not equalDOF or other type of constraint.

    2. -
    3. If multiple nodes are constrained, make sure that the retained node is not constrained in any other constraint.

    4. -
    -
    -
    -
    -

    Example

    -

    The following example shows how to construct a Lagrange constraint handler

    -
      -
    1. Tcl Code

    2. -
    -
    numberer Transformation
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    numberer('Transformation')
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/Umfpack.html b/docs/user/manual/analysis/Umfpack.html deleted file mode 100644 index 341183e9..00000000 --- a/docs/user/manual/analysis/Umfpack.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - - - - 3.2.3.5. Umfpack System — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.2.3.5. Umfpack System

    -

    This command is used to construct a sparse system of equations which uses the UmfPack solver. The following command is used to construct such a system:

    -
    -
    -system Umfpack <-lvalueFact $LVALUE>
    -
    - -

    (LVALUE*the number of nonzero entries) is the amount of additional memory set aside for fill in during the matrix solution, by default the LVALUE factor is 10. You only need to experiment with this if you get error messages back about LVALUE being too small.

    -
    -

    Example

    -

    The following example shows how to construct a SuperLU system

    -
      -
    1. Tcl Code

    2. -
    -
    system Umfpack
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    system('Umfpack')
    -
    -
    -
    -

    Code developed by: fmk

    -
    -
    REFERNCES
    -
      -
    1. A column pre-ordering strategy for the unsymmetric-pattern multifrontal method, T. A. Davis, ACM Transactions on Mathematical Software, vol 30, no. 2, June 2004, pp. 165-195.

    2. -
    3. Algorithm 832: UMFPACK, an unsymmetric-pattern multifrontal method, T. A. Davis, ACM Transactions on Mathematical Software, vol 30, no. 2, June 2004, pp. 196-199.

    4. -
    5. A combined unifrontal/multifrontal method for unsymmetric sparse matrices, T. A. Davis and I. S. Duff, ACM Transactions on Mathematical Software, vol. 25, no. 1, pp. 1-19, March 1999.

    6. -
    7. An unsymmetric-pattern multifrontal method for sparse LU factorization, T. A. Davis and I. S. Duff, SIAM Journal on Matrix Analysis and Applications, vol 18, no. 1, pp. 140-158, Jan. 1997.

    8. -
    -
    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/analysis/algorithm.html b/docs/user/manual/analysis/algorithm.html index cfabbaf1..aaf84e57 100644 --- a/docs/user/manual/analysis/algorithm.html +++ b/docs/user/manual/analysis/algorithm.html @@ -1,79 +1,38 @@ - - - - + - 3.2.5. algorithm Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - + - - - + -

    -

    - © Copyright 2020, The Regents of the University of California. - -

    +

    © Copyright 2022, The Regents of the University of California.

    - - - - Built with Sphinx using a - + + Built with Sphinx using a theme - - provided by Read the Docs. + provided by Read the Docs. +
    -
    - - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + + + + + + \ No newline at end of file diff --git a/docs/user/manual/analysis/algorithm/Broyden.html b/docs/user/manual/analysis/algorithm/Broyden.html new file mode 100644 index 00000000..7edba7c0 --- /dev/null +++ b/docs/user/manual/analysis/algorithm/Broyden.html @@ -0,0 +1,194 @@ + + + + + + + 3.2.5.8. Broyden Algorithm — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.2.5.8. Broyden Algorithm

    +
    +
    +algorithm Broyden <$count>
    +
    + + +++++ + + + + + + + + + + + + +

    Argument

    Type

    Description

    $count

    integer

    number of iterations within a time step until a new tangent is formed

    +

    This command is used to construct a Broyden algorithm object for general unsymmetric systems which performs successive rank-one updates of the tangent at the first iteration of the current time step.

    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/analysis/algorithm/KrylovNewton.html b/docs/user/manual/analysis/algorithm/KrylovNewton.html new file mode 100644 index 00000000..3a4116ad --- /dev/null +++ b/docs/user/manual/analysis/algorithm/KrylovNewton.html @@ -0,0 +1,207 @@ + + + + + + + 3.2.5.5. Krylov-Newton Algorithm — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.2.5.5. Krylov-Newton Algorithm

    +
    +
    +algorithm KrylovNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim>
    +
    + + +++++ + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $tangIter

    string

    tangent to iterate on, options are current, initial, noTangent. default is current.

    $tangIncr

    string

    tangent to increment on, options are current, initial, noTangent. default is current

    $maxDim

    float

    max number of iterations until the tangent is reformed and acceleration restarts (default = 3) of iterations within a time step until a new tangent is formed

    +

    This command is used to construct a KrylovNewton algorithm object which uses a modified Newton method with Krylov subspace acceleration to advance to the next time step.

    +
    +

    Note

    +

    References: +* Scott, M.H. and G.L. Fenves. “A Krylov Subspace Accelerated Newton Algorithm: Application to Dynamic Progressive Collapse Simulation of Frames.” Journal of Structural Engineering, 136(5), May 2010. DOI

    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/analysis/algorithm/LinearAlgorithm.html b/docs/user/manual/analysis/algorithm/LinearAlgorithm.html index 8509135d..a9b834d9 100644 --- a/docs/user/manual/analysis/algorithm/LinearAlgorithm.html +++ b/docs/user/manual/analysis/algorithm/LinearAlgorithm.html @@ -1,79 +1,38 @@ - - - - + - 3.2.5.1. Linear Algorithm — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/analysis/analysis.html b/docs/user/manual/analysis/analysis.html index aa9f493b..8761b861 100644 --- a/docs/user/manual/analysis/analysis.html +++ b/docs/user/manual/analysis/analysis.html @@ -1,79 +1,38 @@ - - - - + - 3.2.7. analysis Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/analysis/integrator/LoadControl.html b/docs/user/manual/analysis/integrator/LoadControl.html index 856d87db..32c859b0 100644 --- a/docs/user/manual/analysis/integrator/LoadControl.html +++ b/docs/user/manual/analysis/integrator/LoadControl.html @@ -1,80 +1,39 @@ - - - - + - 3.2.6.1. LoadControl Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - + - - - - + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete02.html b/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete02.html new file mode 100644 index 00000000..13d3dbcf --- /dev/null +++ b/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete02.html @@ -0,0 +1,253 @@ + + + + + + + 3.4.1.13. Concrete02 Material – Linear Tension Softening — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.4.1.13. Concrete02 Material – Linear Tension Softening

    +

    This command is used to construct a uniaxial concrete material as described in [Yassin1994] +.. function:: uniaxialMaterial Concrete02 $matTag $fpc $epsc0 $fpcu $epsU $lambda $ft $Ets

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $fpc

    float

    concrete compressive strength at 28 days (compression is negative)* .

    $epsc0

    float

    concrete strain at maximum strength* .

    $fpcu

    float

    concrete crushing strength*.

    $epsU

    float

    concrete strain at crushing strength*.

    $lambda

    float

    ratio between unloading slope at $epscu and initial slope.

    $ft

    float

    tensile strength.

    $ets

    float

    tension softening stiffness (absolute value) (slope of the linear tension softening branch)

    +
    +

    Note

    +
      +
    • Compressive concrete parameters should be input as negative values (if input as positive, they will be converted to negative internally).

    • +
    • The initial slope for this model is (2*$fpc/$epsc0)

    • +
    +
    +

    Typical Hysteretic Stress-Strain Relation for material

    +
    +../../../../../_images/Concrete02.jpg +
    +

    Comparison with Concrete01

    +
    +../../../../../_images/Concrete02Hysteretic.jpg +
    +

    Code Developed by: Filip Filippou, UC Berkeley +Images Developed by Silvia Mazzoni

    +
    +
    +[Yassin1994] +

    Mohd Hisham Mohd Yassin, “Nonlinear Analysis of Prestressed Concrete Structures under Monotonic and Cycling Loads”, PhD dissertation, University of California, Berkeley, 1994.

    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete04.html b/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete04.html new file mode 100644 index 00000000..c9f3d63e --- /dev/null +++ b/docs/user/manual/material/uniaxialMaterials/Concrete/Concrete04.html @@ -0,0 +1,261 @@ + + + + + + + 3.4.1.14. Concrete04 Material – Popovics Concrete Material — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.4.1.14. Concrete04 Material – Popovics Concrete Material

    +

    This command is used to construct a uniaxial Popovics concrete material object with degraded linear unloading/reloading stiffness according to the work of Karsan-Jirsa and tensile strength with exponential decay. +.. function:: uniaxialMaterial Concrete04 $matTag $fc $ec $ecu $Ec <$fct $et> <$beta>

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $fc

    float

    concrete compressive strength at 28 days (compression is negative)*.

    $ec

    float

    concrete strain at maximum strength*.

    $ecu

    float

    concrete crushing strength*.

    $Ec

    float

    initial stifness**.

    $fct

    float

    maximum tensile strength of concrete.

    $et

    float

    ultimate tensile strain of concrete.

    $beta

    float

    exponential curve parameter to define the residual stress (as a factor of $ft) at $etu.

    +
    +

    Note

    +
      +
    • Compressive concrete parameters should be input as negative values (if input as positive, they will be converted to negative internally).

    • +
    • The envelope of the compressive stress-strain response is defined using the model proposed by [Popovic1973]. If the user defines \(E_c = 57000 \sqrt(f_{cc})\) (in psi unit) then the envelope curve is identical to proposed by [Mander1988].

    • +
    • Model Characteristic: For loading in compression, the envelope to the stress-strain curve follows the model proposed by Popovics (1973) until the concrete crushing strength is achieved and also for strains beyond that corresponding to the crushing strength. For unloading and reloading in compression, the [Karsan1969] is used to determine the slope of the curve. For tensile loading, an exponential curve is used to define the envelope to the stress-strain curve. For unloading and reloading in tensile, the secant stiffness is used to define the path.

    • +
    +
    +
    +../../../../../_images/Concrete04A.png +
    +
    +../../../../../_images/Concrete04B.png +
    +

    Code Developed by: Laura Lowes, University of Washington and Michael Berry, University of Washington +Images Developed by Silvia Mazzoni

    +
    +
    +[Mander1988] +

    Mander, J. B., Priestley, M. J. N., and Park, R. (1988). “Theoretical stress-strain model for confined concrete.” Journal of Structural Engineering ASCE, 114(8), 1804-1825.

    +
    +
    +[Popovic1973] +

    Popovics, S. (1973). “ A numerical approach to the complete stress strain curve for concrete.” Cement and concrete research, 3(5), 583-599.

    +
    +
    +[Karsan1969] +

    Karsan, I. D., and Jirsa, J. O. (1969). “Behavior of concrete under compressive loading.” Journal of Structural Division ASCE, 95(ST12).

    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Concrete01.html b/docs/user/manual/material/uniaxialMaterials/Concrete01.html deleted file mode 100644 index c337d544..00000000 --- a/docs/user/manual/material/uniaxialMaterials/Concrete01.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - - - - 3.4.1.5. Concrete01 Material – Zero Tensile Strength — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.5. Concrete01 Material – Zero Tensile Strength

    -

    This command is used to construct a uniaxial Kent-Scott-Park concrete material object with degraded linear unloading/reloading stiffness according to the work of Karsan-Jirsa and no tensile strength. (REF: Fedeas).

    -
    -
    -uniaxialMaterial Concrete01  $matTag $fpc $epsc0 $fpcu $epsu
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $fpc

    float

    concrete compressive strength at 28 days (compression is negative)* .

    $epsc0

    float

    concrete strain at maximum strength* .

    $fpcu

    float

    concrete crushing strength*.

    $epsU

    float

    concrete strain at crushing strength*.

    -
    -

    Note

    -
      -
    • Compressive concrete parameters should be input as negative values (if input as positive, they will be converted to negative internally).

    • -
    • The initial slope for this model is (2*$fpc/$epsc0)

    • -
    -
    -

    Typical Hysteretic Stress-Strain Relation for material

    -
    -../../../../_images/Concrete01.gif -
    -

    Code Developed by: Filip Filippou, UC Berkeley -Images Developed by Silvia Mazzoni

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Concrete02.html b/docs/user/manual/material/uniaxialMaterials/Concrete02.html deleted file mode 100644 index 445d814e..00000000 --- a/docs/user/manual/material/uniaxialMaterials/Concrete02.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - - - - - - 3.4.1.6. Concrete02 Material – Linear Tension Softening — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.6. Concrete02 Material – Linear Tension Softening

    -

    This command is used to construct a uniaxial concrete material as described in [Yassin1994] -.. function:: uniaxialMaterial Concrete02 $matTag $fpc $epsc0 $fpcu $epsU $lambda $ft $Ets

    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $fpc

    float

    concrete compressive strength at 28 days (compression is negative)* .

    $epsc0

    float

    concrete strain at maximum strength* .

    $fpcu

    float

    concrete crushing strength*.

    $epsU

    float

    concrete strain at crushing strength*.

    $lambda

    float

    ratio between unloading slope at $epscu and initial slope.

    $ft

    float

    tensile strength.

    $ets

    float

    tension softening stiffness (absolute value) (slope of the linear tension softening branch)

    -
    -

    Note

    -
      -
    • Compressive concrete parameters should be input as negative values (if input as positive, they will be converted to negative internally).

    • -
    • The initial slope for this model is (2*$fpc/$epsc0)

    • -
    -
    -

    Typical Hysteretic Stress-Strain Relation for material

    -
    -../../../../_images/Concrete02.jpg -
    -

    Comparison with Concrete01

    -
    -../../../../_images/Concrete02Hysteretic.jpg -
    -

    Code Developed by: Filip Filippou, UC Berkeley -Images Developed by Silvia Mazzoni

    -
    -
    Yassin1994
    -

    Mohd Hisham Mohd Yassin, “Nonlinear Analysis of Prestressed Concrete Structures under Monotonic and Cycling Loads”, PhD dissertation, University of California, Berkeley, 1994.

    -
    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Concrete04.html b/docs/user/manual/material/uniaxialMaterials/Concrete04.html deleted file mode 100644 index 268d7851..00000000 --- a/docs/user/manual/material/uniaxialMaterials/Concrete04.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - - - - - 3.4.1.7. Concrete04 Material – Popovics Concrete Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.7. Concrete04 Material – Popovics Concrete Material

    -

    This command is used to construct a uniaxial Popovics concrete material object with degraded linear unloading/reloading stiffness according to the work of Karsan-Jirsa and tensile strength with exponential decay. -.. function:: uniaxialMaterial Concrete04 $matTag $fc $ec $ecu $Ec <$fct $et> <$beta>

    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $fc

    float

    concrete compressive strength at 28 days (compression is negative)*.

    $ec

    float

    concrete strain at maximum strength*.

    $ecu

    float

    concrete crushing strength*.

    $Ec

    float

    initial stifness**.

    $fct

    float

    maximum tensile strength of concrete.

    $et

    float

    ultimate tensile strain of concrete.

    $beta

    float

    exponential curve parameter to define the residual stress (as a factor of $ft) at $etu.

    -
    -

    Note

    -
      -
    • Compressive concrete parameters should be input as negative values (if input as positive, they will be converted to negative internally).

    • -
    • The envelope of the compressive stress-strain response is defined using the model proposed by [Popovic1973]. If the user defines \(E_c = 57000 \sqrt(f_{cc})\) (in psi unit) then the envelope curve is identical to proposed by [Mander1988].

    • -
    • Model Characteristic: For loading in compression, the envelope to the stress-strain curve follows the model proposed by Popovics (1973) until the concrete crushing strength is achieved and also for strains beyond that corresponding to the crushing strength. For unloading and reloading in compression, the [Karsan1969] is used to determine the slope of the curve. For tensile loading, an exponential curve is used to define the envelope to the stress-strain curve. For unloading and reloading in tensile, the secant stiffness is used to define the path.

    • -
    -
    -
    -user/manual/material/uniaxialMaterials/figures/Concrete04a.jpg -
    -
    -../../../../_images/Concrete0B.png -
    -

    Code Developed by: Laura Lowes, University of Washington and Michael Berry, University of Washington -Images Developed by Silvia Mazzoni

    -
    -
    Mander1988
    -

    Mander, J. B., Priestley, M. J. N., and Park, R. (1988). “Theoretical stress-strain model for confined concrete.” Journal of Structural Engineering ASCE, 114(8), 1804-1825.

    -
    -
    Popovic1973
    -

    Popovics, S. (1973). ” A numerical approach to the complete stress strain curve for concrete.” Cement and concrete research, 3(5), 583-599.

    -
    -
    Karsan1969
    -

    Karsan, I. D., and Jirsa, J. O. (1969). “Behavior of concrete under compressive loading.” Journal of Structural Division ASCE, 95(ST12).

    -
    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/HystereticPoly.html b/docs/user/manual/material/uniaxialMaterials/HystereticPoly.html deleted file mode 100644 index 436abfdd..00000000 --- a/docs/user/manual/material/uniaxialMaterials/HystereticPoly.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - 3.4.1.11. HystereticPoly Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.11. HystereticPoly Material

    -

    This command is used to construct the uniaxial HystereticPoly material producing smooth hysteretic loops and local maxima/minima. It is based on a polynomial formulation of its tangent stiffness.

    -
    -
    -uniaxialMaterial HystereticPoly $matTag $ka $kb $alpha $beta1 $beta2 <$delta>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $ka

    float

    Tangent stiffness of the initial “elastic” part of the loop.

    $kb

    float

    Tangent stiffness of the asymptotic part of the loop.

    $alpha

    float

    Parameter governing the amplitude of the loop.

    $beta1

    float

    Parameter governing the shape of the asymptotic region of the loop.

    $beta2

    float

    Parameter governing the shape of the asymptotic region of the loop.

    $delta

    float

    Asymptotic tolerance (optional. Default 1.0e-20).

    -
    -

    Note

    -

    Determination of constitutive parameters is quite intuitive and is reported below, although, their identification can be performed by the strategy formulated in [SessaEtAl2020] implemented in the freeware available here.

    -
    -

    The equations describing HystereticPoly behavior are described in [VaianaEtAl2019]. Only minor changes have been made in its implementation for OpenSees.

    -

    The model may reproduce either force-displacement or stress-strain relationships. It is formulated by means of two asymptotic lines (blue) linked by transition curves (red):

    -
    -../../../../_images/HystereticPoly01.gif -
    -

    Parameter $alpha governs the transition between such curves so that:

    -

    \(u_0=\frac{1}{2}\left[\left(\frac{k_a-k_b}{\delta}\right)^{1/\alpha}-1\right]\)

    -

    \(\bar{f}=\frac{k_a-k_b}{2}\left[\frac{\left(1+2u_0\right)^{1-\alpha}-1}{1-\alpha}\right]\)

    -

    Where \(\bar{f}\) is the value at which the asymptotic line crosses the vertical axis and \(2u_0\) is the generalized displacement for which the transition curve reaches the asymptotic line.

    -

    In general, $alpha= \(\alpha\) influences the amplitude of the loop:

    -
    -../../../../_images/HystereticPoly02.gif -
    -

    while parameters $beta1 and $beta2 modify the shape of the loop:

    -
    -../../../../_images/HystereticPoly03.gif -
    -
    -

    Example

    -

    The following constructs a HystereticPoly material with tag 1, parameters corresponding to line (d) of the table above and tolerance $delta = \(10^{-20}\).

    -
      -
    1. Tcl Code

    2. -
    -
    uniaxialMaterial HystereticPoly 1  100.0 10.0 20.0 -10.0 10.0 1.0e-20
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    uniaxialMaterial('HystereticPoly', 1, 100.0, 10.0, 20.0, -10.0, 10.0, 1.0e-20)
    -
    -
    -
    -

    Code Developed by: Salvatore Sessa, University of Naples Federico II, Italy

    -
    -
    VaianaEtAl2019
    -

    Vaiana, N., Sessa, S., Marmo, F. and Rosati, L. (2019). “An accurate and computationally efficient uniaxial phenomenological model for steel and fiber reinforced elastomeric bearings.” Composite Structures, 211: 196-212. DOI: https://doi.org/10.1016/j.compstruct.2018.12.017

    -
    -
    SessaEtAl2020
    -

    Sessa, S., Vaiana, N., Paradiso, M. and Rosati, L. (2020). “An inverse identification strategy for the mechanical parameters of a phenomenological hysteretic constitutive model.”, Mechanical Systems and Signal Processing, 139: 106622. DOI: https://doi.org/10.1016/j.ymssp.2020.106622

    -
    -
    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/IMKBilin.html b/docs/user/manual/material/uniaxialMaterials/IMKBilin.html deleted file mode 100644 index 445732eb..00000000 --- a/docs/user/manual/material/uniaxialMaterials/IMKBilin.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - 3.4.1.8. IMKBilin Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.8. IMKBilin Material

    -

    This command is used to construct a material with a hysteretic bilinear response based on the modified Ibarra-Medina-Krawinkler deterioration model.

    -
    -
    -uniaxialMaterial IMKBilin $matTag $Ke $Up_pos $Upc_pos $Uu_pos $Fy_pos $FmaxFy_pos $FresFy_pos $Up_neg $Upc_neg $Uu_neg $Fy_neg $FmaxFy_neg $FresFy_neg $Lamda_S $Lamda_C $Lamda_K $c_S $c_C $c_K $D_pos $D_neg
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $Ke

    float

    Elastic stiffness

    $dp_pos

    float

    Pre-capping deformation in positive loading direction

    $dpc_pos

    float

    Post-capping deformation in positive loading direction

    $du_pos

    float

    Ultimate deformation in positive loading direction

    $Fy_pos

    float

    Yield strength in positive loading direction

    $FmaxFy_pos

    float

    Maximum-to-yield strength ratio in positive loading direction

    $FresFy_pos

    float

    Residual-to-yield strength ratio in positive loading direction

    $dp_neg

    float

    Pre-capping deformation in negative loading direction

    $dpc_neg

    float

    Post-capping deformation in negative loading direction

    $du_neg

    float

    Ultimate deformation in negative loading direction

    $Fy_neg

    float

    Yield strength in negative loading direction

    $FmaxFy_neg

    float

    Maximum-to-yield strength ratio in negative loading direction

    $FresFy_neg

    float

    Residual-to-yield strength ratio in negative loading direction

    $Lamda_S

    float

    Cyclic deterioration parameter for yield strength deterioration

    $Lamda_C

    float

    Cyclic deterioration parameter for post-capping stiffness deterioration

    $Lamda_K

    float

    Cyclic deterioration parameter for unloading stiffness deterioration

    $c_S

    float

    Rate of yield strength deterioration

    $c_C

    float

    Rate of post-capping stiffness deterioration

    $c_K

    float

    Rate of unloading stiffness deterioration

    $D_pos

    float

    rate of cyclic deterioration in the positive loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $D_neg

    float

    rate of cyclic deterioration in the negative loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    -
    -

    Note

    -

    All material model parameters (in both the positive and negative direction) shall be specified as positive values.

    -
    -
    -
    IbarraEtAl2005
    -

    Ibarra, L. F., Medina, R. A., and Krawinkler, H. (2005). “Hysteretic models that incorporate strength and stiffness deterioration.” Earthquake Engineering & Structural Dynamics, 34(12), 1489-1511, Doi: 10.1002/eqe.495.

    -
    -
    -
    -

    IMKBilin backbone curve

    -
    -
    -../../../../_images/IMKBilin.jpg -
    -

    Fig. 3.4.1.9 IMKBilin sample response

    -
    -
    -
    -user/manual/material/uniaxialMaterials/figures/IMKBilin-sampleresponse.jpg -
    -
    -

    Example

    -

    The following is used to construct a IMKBilin material with symmetric hysteretic response.

    -
      -
    1. Tcl Code

    2. -
    -
    set Ke            100000.0;
    -set My            100.0;
    -set Mc_My   1.15;
    -set Mres_My 0.1;
    -set thetap  0.010;
    -set thetau  0.2;
    -set thetapc 0.1;
    -set lambdaS 1;
    -set lambdaC 1;
    -set lambdaK 1;
    -
    -uniaxialMaterial IMKBilin 1 $Ke $thetap $thetapc $thetau $My $Mc_My $Mres_My $thetap $thetapc $thetau $My $Mc_My $Mres_My $lambdaS $lambdaC $lambdaK 1 1 1 1 1;
    -
    -
    -
    -

    Code Developed by: |aelkady|

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/IMKPeakOriented.html b/docs/user/manual/material/uniaxialMaterials/IMKPeakOriented.html deleted file mode 100644 index de216156..00000000 --- a/docs/user/manual/material/uniaxialMaterials/IMKPeakOriented.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - - - - - - 3.4.1.9. IMKPeakOriented Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.9. IMKPeakOriented Material

    -

    This command is used to construct a material with a peak-oriented hysteretic response based on the modified Ibarra-Medina-Krawinkler deterioration model.

    -
    -
    -uniaxialMaterial IMKPeakOriented $Mat_Tag $Ke $Up_pos $Upc_pos $Uu_pos $Fy_pos $FmaxFy_pos $FresFy_pos $Up_neg $Upc_neg $Uu_neg $Fy_neg $FmaxFy_neg $FresFy_neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $D_pos $D_neg
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $Ke

    float

    Elastic stiffness

    $dp_pos

    float

    Pre-capping deformation in positive loading direction

    $dpc_pos

    float

    Post-capping deformation in positive loading direction

    $du_pos

    float

    Ultimate deformation in positive loading direction

    $Fy_pos

    float

    Yield strength in positive loading direction

    $FmaxFy_pos

    float

    Maximum-to-yield strength ratio in positive loading direction

    $FresFy_pos

    float

    Residual-to-yield strength ratio in positive loading direction

    $dp_neg

    float

    Pre-capping deformation in negative loading direction

    $dpc_neg

    float

    Post-capping deformation in negative loading direction

    $du_neg

    float

    Ultimate deformation in negative loading direction

    $Fy_neg

    float

    Yield strength in negative loading direction

    $FmaxFy_neg

    float

    Maximum-to-yield strength ratio in negative loading direction

    $FresFy_neg

    float

    Residual-to-yield strength ratio in negative loading direction

    $Lamda_S

    float

    Cyclic deterioration parameter for yield strength deterioration

    $Lamda_C

    float

    Cyclic deterioration parameter for post-capping stiffness deterioration

    $Lamda_A

    float

    Cyclic deterioration parameter for accelerated reloading stiffness deterioration

    $Lamda_K

    float

    Cyclic deterioration parameter for unloading stiffness deterioration

    $c_S

    float

    Rate of yield strength deterioration

    $c_C

    float

    Rate of post-capping stiffness deterioration

    $c_A

    float

    Rate of accelerated reloading stiffness deterioration

    $c_K

    float

    Rate of unloading stiffness deterioration

    $D_pos

    float

    rate of cyclic deterioration in the positive loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $D_neg

    float

    rate of cyclic deterioration in the negative loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    -
    -

    Note

    -

    All material model parameters (in both the positive and negative direction) shall be specified as positive values.

    -
    -
    -
    IbarraEtAl2005
    -

    Ibarra, L. F., Medina, R. A., and Krawinkler, H. (2005). “Hysteretic models that incorporate strength and stiffness deterioration.” Earthquake Engineering & Structural Dynamics, 34(12), 1489-1511, Doi: 10.1002/eqe.495.

    -
    -
    -
    -

    IMKPeakOriented backbone curve

    -
    -
    -../../../../_images/IMKPeakOriented.jpg -
    -

    Fig. 3.4.1.10 IMKPeakOriented sample responses and validations

    -
    -
    -
    -user/manual/material/uniaxialMaterials/figures/IMKPeakOriented-sampleresponses&validations.jpg -
    -
    -

    Example

    -

    The following is used to construct a IMKBilin material with symmetric hysteretic response.

    -
      -
    1. Tcl Code

    2. -
    -
    set Ke            100000.0;
    -set My            100.0;
    -set Mc_My   1.15;
    -set Mres_My 0.1;
    -set thetap  0.010;
    -set thetau  0.2;
    -set thetapc 0.1;
    -set lambdaS 1;
    -set lambdaC 1;
    -set lambdaA 1;
    -set lambdaK 1;
    -
    -uniaxialMaterial ModIMKPeakOriented 1 $Ke $as $as $My -$My $lambda $lambda $lambda $lambda 1 1 1 1 1 1;
    -
    -
    -
    -

    Code Developed by: |aelkady|

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/IMKPinching.html b/docs/user/manual/material/uniaxialMaterials/IMKPinching.html deleted file mode 100644 index f09db425..00000000 --- a/docs/user/manual/material/uniaxialMaterials/IMKPinching.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - 3.4.1.10. IMKPinching Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.10. IMKPinching Material

    -

    This command is used to construct a material with a pinched hysteretic response based on the modified Ibarra-Medina-Krawinkler deterioration model.

    -
    -
    -uniaxialMaterial IMKPinching $Mat_Tag $Ke $Up_pos $Upc_pos $Uu_pos $Fy_pos $FmaxFy_pos $FresFy_pos $Up_neg $Upc_neg $Uu_neg $Fy_neg $FmaxFy_neg $FresFy_neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $D_pos $D_neg $kappaF $kappaD
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $Ke

    float

    Elastic stiffness

    $dp_pos

    float

    Pre-capping deformation in positive loading direction

    $dpc_pos

    float

    Post-capping deformation in positive loading direction

    $du_pos

    float

    Ultimate deformation in positive loading direction

    $Fy_pos

    float

    Yield strength in positive loading direction

    $FmaxFy_pos

    float

    Maximum-to-yield strength ratio in positive loading direction

    $FresFy_pos

    float

    Residual-to-yield strength ratio in positive loading direction

    $dp_neg

    float

    Pre-capping deformation in negative loading direction

    $dpc_neg

    float

    Post-capping deformation in negative loading direction

    $du_neg

    float

    Ultimate deformation in negative loading direction

    $Fy_neg

    float

    Yield strength in negative loading direction

    $FmaxFy_neg

    float

    Maximum-to-yield strength ratio in negative loading direction

    $FresFy_neg

    float

    Residual-to-yield strength ratio in negative loading direction

    $Lamda_S

    float

    Cyclic deterioration parameter for yield strength deterioration

    $Lamda_C

    float

    Cyclic deterioration parameter for post-capping stiffness deterioration

    $Lamda_A

    float

    Cyclic deterioration parameter for accelerated reloading stiffness deterioration

    $Lamda_K

    float

    Cyclic deterioration parameter for unloading stiffness deterioration

    $c_S

    float

    Rate of yield strength deterioration

    $c_C

    float

    Rate of post-capping stiffness deterioration

    $c_A

    float

    Rate of accelerated reloading stiffness deterioration

    $c_K

    float

    Rate of unloading stiffness deterioration

    $D_pos

    float

    rate of cyclic deterioration in the positive loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $D_neg

    float

    rate of cyclic deterioration in the negative loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $kappaF

    float

    Pinching parameter defining the break point with respect to the maximum force experienced in the direction of loading (0 <kappaF <1).

    $kappaD

    float

    Pinching parameter defining the break point with respect to the maximum permanent deformation experienced in the direction of loading (0 <kappaD <1).

    -
    -

    Note

    -

    All material model parameters (in both the positive and negative direction) shall be specified as positive values.

    -
    -
    -
    IbarraEtAl2005
    -

    Ibarra, L. F., Medina, R. A., and Krawinkler, H. (2005). “Hysteretic models that incorporate strength and stiffness deterioration.” Earthquake Engineering & Structural Dynamics, 34(12), 1489-1511, Doi: 10.1002/eqe.495.

    -
    -
    -
    -

    IMKPinching backbone curve

    -
    -
    -../../../../_images/IMKPinching.jpg -
    -

    Fig. 3.4.1.11 IMKPinching sample responses and validations

    -
    -
    -
    -user/manual/material/uniaxialMaterials/figures/IMKPinching-sampleresponses&validations.jpg -
    -
    -

    Example

    -

    The following is used to construct a IMKBilin material with symmetric hysteretic response.

    -
      -
    1. Tcl Code

    2. -
    -
    set Ke            100000.0;
    -set My            100.0;
    -set Mc_My   1.15;
    -set Mres_My 0.1;
    -set thetap  0.010;
    -set thetau  0.2;
    -set thetapc 0.1;
    -set lambdaS 1;
    -set lambdaC 1;
    -set lambdaA 1;
    -set lambdaK 1;
    -set kappaF 0.3;
    -set kappaD 0.6;
    -
    -uniaxialMaterial IMKPinching 1 $Ke $as $as $My -$My $lambda $lambda $lambda $lambda 1 1 1 1 1 1 $kappaF $kappaD;
    -
    -
    -
    -

    Code Developed by: |aelkady|

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.html b/docs/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.html new file mode 100644 index 00000000..526193cb --- /dev/null +++ b/docs/user/manual/material/uniaxialMaterials/Other/BoucWenInfill.html @@ -0,0 +1,300 @@ + + + + + + + 3.4.1.20. BoucWenInfill Material — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.4.1.20. BoucWenInfill Material

    +

    This command is used to construct the uniaxial BoucWenInfill material producing smooth hysteretic loops with stiffness and strength degradation and pinching effect. The pinching formulation is particularly suitable to simulate the behavior of infill panels and masonry walls.

    +
    +
    +uniaxialMaterial BoucWenInfill $matTag $mass $alpha $beta0 $eta0 $n $k $xy $deltak $deltaf $psi $Zs $As $epsp $tol $maxIter
    +
    + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material.

    $mass

    float

    mass of the system.

    $alpha

    float

    ratio of post-yield stiffness to the initial elastic stiffness (0<$alpha<1).

    $beta0 $eta0

    float

    parameters that control the shape of the hysteresis loop (-1<$eta0<1).

    $n

    float

    Parameter that controls the transition from linear to nonlinear range.

    $k

    float

    Initial elastic stiffness.

    $xy

    float

    yielding displacement of the system

    $deltak $deltaf

    float

    Parameters that control respectively stiffness and strength degradation.

    $psi

    float

    Parameter that controls the rate of stiffness degradation.

    $Zs

    float

    parameter that controls the extension of pinching along z-axis.

    $As

    float

    parameter that controls the extension of pinching along x-axis.

    $epsp

    float

    pinching activation energy.

    $tol

    float

    tolerance in each integration step.

    $maxIter

    float

    maximum number of iterations for each integration step.

    +
    +

    Note

    +

    The determination of constitutive parameters is supported by their physical meaning. In case of infill panels, empirical correlation laws between the model parameters and the geometrical and mechanical properties of infilled frames can be found in [SirottiEtAL2021].

    +
    +

    The equations governing the BoucWenInfill behavior are described in [SirottiEtAl2021]. Other references can be found in [PelliciariEtAl2020] for stiffness and strength degradation and in [MadanEtAl1997] for the pinching formulation.

    +

    The model may reproduce either force-displacement or stress-strain relationships.

    +

    Parameters $deltak, $deltaf and $psi regulate respectively stiffness, strength degradation and the rate of stiffness degradation.

    +
    +../../../../../_images/BoucWenInfill1.png +
    +

    Parameters $Zs, $As and $epsp control the amount and activation of the pinching effect:

    +
    +../../../../../_images/BoucWenInfill2.png +
    +
    +../../../../../_images/BoucWenInfill3.png +
    +
    +

    Example

    +

    The following instruction builds a BoucWenInfill material with tag 1, parameters reported in the table above, tolerance $tol = \(10^{-6}\) and maximum number of iterations $maxIter = \(10^{6}\).

    +

    Tcl Code

    +
    uniaxialMaterial BoucWenInfill 1 1 0.06 0.25 0.1 1.2 65 1 0.005 0.005 0.001 0.01 5 10000 10e-6 10e6
    +
    +
    +
    +

    Code Developed by: Stefano Sirotti, University of Modena and Reggio Emilia, Italy, stefano.sirotti@unimore.it

    +
    +
    +[SirottiEtAL2021] +(1,2) +

    Sirotti, S., Pelliciari, M., Di Trapani, F., Briseghella, B., Carlo Marano, G., Nuti, C., & Tarantino, A. M. (2021). Development and validation of new Bouc–Wen data-driven hysteresis model for masonry infilled RC frames. Journal of Engineering Mechanics, 147(11), 04021092. DOI: https://doi.org/10.1061/(ASCE)EM.1943-7889.0002001.

    +
    +
    +[PelliciariEtAl2020] +

    Pelliciari, M., Briseghella, B., Tondolo, F., Veneziano, L., Nuti, C., Greco, R., … & Tarantino, A. M. (2020). A degrading Bouc–Wen model for the hysteresis of reinforced concrete structural elements. Structure and Infrastructure Engineering, 16(7), 917-930. DOI: https://doi.org/10.1080/15732479.2019.1674893.

    +
    +
    +[MadanEtAl1997] +

    Madan, A., Reinhorn, A. M., Mander, J. B., & Valles, R. E. (1997). Modeling of masonry infill panels for structural analysis. Journal of structural engineering, 123(10), 1295-1302. DOI: https://doi.org/10.1061/(ASCE)0733-9445(1997)123:10(1295).

    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/DowelType.html b/docs/user/manual/material/uniaxialMaterials/Other/DowelType.html similarity index 67% rename from docs/user/manual/material/uniaxialMaterials/DowelType.html rename to docs/user/manual/material/uniaxialMaterials/Other/DowelType.html index e74c9a03..363c24f6 100644 --- a/docs/user/manual/material/uniaxialMaterials/DowelType.html +++ b/docs/user/manual/material/uniaxialMaterials/Other/DowelType.html @@ -1,226 +1,137 @@ - - - - + - - 3.4.1.12. DowelType Timber Joint Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + 3.4.1.19. DowelType Timber Joint Material — OpenSees Documentation documentation + + + - - - - - - - + + + + + + - - - - - - - - + + + + + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Other/IMKPinching.html b/docs/user/manual/material/uniaxialMaterials/Other/IMKPinching.html new file mode 100644 index 00000000..aee88b06 --- /dev/null +++ b/docs/user/manual/material/uniaxialMaterials/Other/IMKPinching.html @@ -0,0 +1,353 @@ + + + + + + + 3.4.1.17. IMKPinching Material — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.4.1.17. IMKPinching Material

    +

    This command is used to construct a material with a pinched hysteretic response based on the modified Ibarra-Medina-Krawinkler deterioration model.

    +
    +
    +uniaxialMaterial IMKPinching $Mat_Tag $Ke $Up_pos $Upc_pos $Uu_pos $Fy_pos $FmaxFy_pos $FresFy_pos $Up_neg $Upc_neg $Uu_neg $Fy_neg $FmaxFy_neg $FresFy_neg $Lamda_S $Lamda_C $Lamda_A $Lamda_K $c_S $c_C $c_A $c_K $D_pos $D_neg $kappaF $kappaD
    +
    + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $Ke

    float

    Elastic stiffness

    $dp_pos

    float

    Pre-capping deformation in positive loading direction

    $dpc_pos

    float

    Post-capping deformation in positive loading direction

    $du_pos

    float

    Ultimate deformation in positive loading direction

    $Fy_pos

    float

    Yield strength in positive loading direction

    $FmaxFy_pos

    float

    Maximum-to-yield strength ratio in positive loading direction

    $FresFy_pos

    float

    Residual-to-yield strength ratio in positive loading direction

    $dp_neg

    float

    Pre-capping deformation in negative loading direction

    $dpc_neg

    float

    Post-capping deformation in negative loading direction

    $du_neg

    float

    Ultimate deformation in negative loading direction

    $Fy_neg

    float

    Yield strength in negative loading direction

    $FmaxFy_neg

    float

    Maximum-to-yield strength ratio in negative loading direction

    $FresFy_neg

    float

    Residual-to-yield strength ratio in negative loading direction

    $Lamda_S

    float

    Cyclic deterioration parameter for yield strength deterioration

    $Lamda_C

    float

    Cyclic deterioration parameter for post-capping stiffness deterioration

    $Lamda_A

    float

    Cyclic deterioration parameter for accelerated reloading stiffness deterioration

    $Lamda_K

    float

    Cyclic deterioration parameter for unloading stiffness deterioration

    $c_S

    float

    Rate of yield strength deterioration

    $c_C

    float

    Rate of post-capping stiffness deterioration

    $c_A

    float

    Rate of accelerated reloading stiffness deterioration

    $c_K

    float

    Rate of unloading stiffness deterioration

    $D_pos

    float

    rate of cyclic deterioration in the positive loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $D_neg

    float

    rate of cyclic deterioration in the negative loading direction. This parameter is used to create asymmetric hysteretic behavior as in the case of a composite beam (0< D_pos <1). For symmetric hysteretic response use 1.0.

    $kappaF

    float

    Pinching parameter defining the break point with respect to the maximum force experienced in the direction of loading (0 <kappaF <1).

    $kappaD

    float

    Pinching parameter defining the break point with respect to the maximum permanent deformation experienced in the direction of loading (0 <kappaD <1).

    +
    +

    Note

    +

    All material model parameters (in both the positive and negative direction) shall be specified as positive values.

    +
    +
    +
    +[IbarraEtAl2005] +

    Ibarra, L. F., Medina, R. A., and Krawinkler, H. (2005). “Hysteretic models that incorporate strength and stiffness deterioration.” Earthquake Engineering & Structural Dynamics, 34(12), 1489-1511, Doi: 10.1002/eqe.495.

    +
    +
    +
    +

    IMKPinching backbone curve

    +
    +
    +../../../../../_images/IMKPinching.jpg +
    +

    Fig. 3.4.1.11 IMKPinching sample responses and validations

    +
    +
    +
    +../../../../../_images/IMKPinching_sample_responses_validations.jpg +
    +
    +

    Example

    +

    The following is used to construct a IMKBilin material with symmetric hysteretic response.

    +
      +
    1. Tcl Code

    2. +
    +
    set Ke            100000.0;
    +set My            100.0;
    +set Mc_My   1.15;
    +set Mres_My 0.1;
    +set thetap  0.010;
    +set thetau  0.2;
    +set thetapc 0.1;
    +set lambdaS 1;
    +set lambdaC 1;
    +set lambdaA 1;
    +set lambdaK 1;
    +set kappaF 0.3;
    +set kappaD 0.6;
    +
    +uniaxialMaterial IMKPinching 1 $Ke $as $as $My -$My $lambda $lambda $lambda $lambda 1 1 1 1 1 1 $kappaF $kappaD;
    +
    +
    +
    +

    Code Developed by: |aelkady|

    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/PyLiq1.html b/docs/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.html similarity index 65% rename from docs/user/manual/material/uniaxialMaterials/PyLiq1.html rename to docs/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.html index fce99bdd..e58b9e0d 100644 --- a/docs/user/manual/material/uniaxialMaterials/PyLiq1.html +++ b/docs/user/manual/material/uniaxialMaterials/PyTzQZ/PyLiq1.html @@ -1,226 +1,137 @@ - - - - + - - 3.4.1.17. PyLiq1 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + 3.4.1.24. PyLiq1 Material — OpenSees Documentation documentation + + + - - - - - - - + + + + + + - - - - - - - - + + + + + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/material/uniaxialMaterials/Steel02.html b/docs/user/manual/material/uniaxialMaterials/Steel/Steel02.html similarity index 51% rename from docs/user/manual/material/uniaxialMaterials/Steel02.html rename to docs/user/manual/material/uniaxialMaterials/Steel/Steel02.html index 1fda1706..c84a6c93 100644 --- a/docs/user/manual/material/uniaxialMaterials/Steel02.html +++ b/docs/user/manual/material/uniaxialMaterials/Steel/Steel02.html @@ -1,236 +1,147 @@ - - - - + - 3.4.1.2. Steel02 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + - - - +
    - -
    - - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/materialCommands.html b/docs/user/manual/materialCommands.html index e75e8bf3..b26b0906 100644 --- a/docs/user/manual/materialCommands.html +++ b/docs/user/manual/materialCommands.html @@ -1,79 +1,38 @@ - - - - + - 3.4. Material Commands — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - - - +
    - -
    - - -
    - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + + + + + + \ No newline at end of file diff --git a/docs/user/manual/model/damping/rayleigh.html b/docs/user/manual/model/damping/rayleigh.html new file mode 100644 index 00000000..d052322d --- /dev/null +++ b/docs/user/manual/model/damping/rayleigh.html @@ -0,0 +1,213 @@ + + + + + + + 3.1.8.1. Rayleigh Damping Command — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    3.1.8.1. Rayleigh Damping Command

    +
    +
    +rayleigh $alphaM $betaK $betaKInit $betaKcomm
    +
    + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

    Argument

    Type

    Description

    $alphaM

    float

    factor applied to elements or nodes mass matrix

    $betaK

    float

    factor applied to elements current stiffness matrix.

    $betaKInit

    float

    factor applied to elements initial stiffness matrix

    $betaKcomm

    float

    factor applied to elements committed stiffness matrix

    +

    This command is used to assign damping to all previously-defined elements and nodes. When using rayleigh damping in OpenSees, the damping matrix for an element or node, D is specified as a combination of stiffness and mass-proportional damping matrices:

    +

    \(D = \alpha_m M + \beta_k K_{current} + \beta_{k_{init}} K_{init} + \beta_{K_{comm}} K_{last commit}\)

    +
    +

    Note

    +
      +
    • The command overwrites any existing damping coeeficients at the Elements and Nodes.

    • +
    • The usage of Rayleigh damping may provide incorrect result when used with Non-Linear Time History Analysis using Concentrated Plasticity Model. [ChopraMcKenna2015]

    • +
    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/model/eleLoad.html b/docs/user/manual/model/eleLoad.html index 5a5df4fe..0c2a28c2 100644 --- a/docs/user/manual/model/eleLoad.html +++ b/docs/user/manual/model/eleLoad.html @@ -1,79 +1,36 @@ - - - - + - - 3.1.7.1.2. eleLoad Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + eleLoad Command — OpenSees Documentation documentation + + + - - - - - - + + - - - + - - - +
    - -
    - - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/fixZ.html b/docs/user/manual/model/fixZ.html deleted file mode 100644 index 0576a43d..00000000 --- a/docs/user/manual/model/fixZ.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - - - - - - 3.1.4.4. fixY Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.1.4.4. fixY Command

    -

    This command is used to construct multiple homogeneous single-point boundary constraints for all nodes whose z-coordinate lies within a specified distance from a specified coordinate.

    - ----- - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $zCoordinate

    float

    z-coordinate of nodes to be constrained

    $constrValues

    list integer

    -
    ndf constraint values (0 or 1) corresponding to the ndf
    -
    degrees-of-freedom.
    -
    0 unconstrained (or free)
    -
    1 constrained (or fixed)
    -
    -

    $tol

    float

    user-defined tolerance (optional: default = 1e-10)

    -
    -

    Example:

    -

    The following example demonstrate the command to fix the first 3 degrees-of-freedom at all nodes in the model at z location 30.0.

    -
      -
    1. Tcl Code

    2. -
    -
    fixZ 30.0 1 1 1 0 0 0
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    fixZ(30.0, 1, 1, 1, 0, 0, 0)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/imposedMotion.html b/docs/user/manual/model/imposedMotion.html deleted file mode 100644 index 6ca6a9bb..00000000 --- a/docs/user/manual/model/imposedMotion.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - - - - - 3.1.7.3.2. Imposed Motion Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.1.7.3.2. Imposed Motion Command

    -

    This command is used to construct an ImposedMotionSP constraint which is used to enforce the response of a dof at a node in the model. The response enforced at the node at any give time is obtained from the GroundMotion object associated with the constraint.

    -
    -
    -imposedMotion $nodeTag $dirn $gMotionTag
    -

    $nodeTag, integer, tag of node on which constraint is to be placed -$dof, integer, dof of enforced response. Valid range is from 1 through ndf at node. -$gMotionTag, integer, pre-defined GroundMotion object tag

    -
    - -
    -

    Example:

    -

    The following example shows how to construct a Multi-Suppert Excitation pattern with a tag of 1* that will constrain the nodes **1, 4, and 7 to move in the 1 dof direcection with the ground Motion supplied by the groundMotion with tag 101, whose displacement is given by timeSeries with a tag of 3.

    -
      -
    1. Tcl Code

    2. -
    -
    timeSeries Path 3 -filePath elCentroDisp.dat -dt 0.02
    -pattern MultipleSupport  1  {
    -     groundMotion 101 Series -disp 3
    -
    -     imposedSupportMotion 1 1 101
    -     imposedSupportMotion 4 1 101
    -     imposedSupportMotion 7 1 101
    -}
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    timeSeries('Path', 3, '-dt', 0.02, '-filePath', 'elCentroDisp.dat')
    -pattern('MultiSupport', 1)
    -groundMotion(101, 'Series', '-disp', 3)
    -imposedSupportMotion(1,1,101)
    -imposedSupportMotion(4,1,101)
    -imposedSupportMotion(7,1,101)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/interpolatedGroundMotion.html b/docs/user/manual/model/interpolatedGroundMotion.html deleted file mode 100644 index 0d2ba231..00000000 --- a/docs/user/manual/model/interpolatedGroundMotion.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - Interpolated Ground Motion — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    Interpolated Ground Motion

    -

    This command is used to construct an interpolated GroundMotion object, where the motion is determined by combining several previously defined ground motions in the load pattern. The command is as follows:

    -
    -
    -groundMotion $tag Interpolated $gmTag1 $gmTag2 ... -fact $fact1 $fact2 ...
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $tag

    integer

    unique tag among ground motions in load pattern

    $gmTags

    list integer

    the tags of existing ground motions in pattern to be used for interpolation.

    $factors

    list float

    the interpolation factors.

    -
    - - -
    - -
    -
    - - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California - -

    -
    - Built with Sphinx using a theme provided by Read the Docs. - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/load.html b/docs/user/manual/model/load.html index 3b50a110..0f0c809d 100644 --- a/docs/user/manual/model/load.html +++ b/docs/user/manual/model/load.html @@ -1,79 +1,36 @@ - - - - + - - 3.1.7.1.1. load Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + load Command — OpenSees Documentation documentation + + + - - - - - - + + - - - + - - - +
    - -
    - - -
    - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/spConstraint.html b/docs/user/manual/model/spConstraint.html deleted file mode 100644 index c328d37a..00000000 --- a/docs/user/manual/model/spConstraint.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - - - - - sp — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    sp

    -
    - - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California. - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/spConstraints.html b/docs/user/manual/model/spConstraints.html index 62940d61..36c6dd96 100644 --- a/docs/user/manual/model/spConstraints.html +++ b/docs/user/manual/model/spConstraints.html @@ -1,79 +1,38 @@ - - - - + - 3.1.4. SP_Constraint Commands — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - - + + - - - +
    - -
    - - -
    - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); + + + + + + \ No newline at end of file diff --git a/docs/user/manual/model/fixX.html b/docs/user/manual/model/sp_constraint/fixX.html similarity index 50% rename from docs/user/manual/model/fixX.html rename to docs/user/manual/model/sp_constraint/fixX.html index 36a57e1d..50b2a8fc 100644 --- a/docs/user/manual/model/fixX.html +++ b/docs/user/manual/model/sp_constraint/fixX.html @@ -1,218 +1,124 @@ - - - - + - 3.1.4.2. fixX Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - + + + + + + + + + - - - +
    - -
    - - -
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/model/sp_constraint/sp.html b/docs/user/manual/model/sp_constraint/sp.html new file mode 100644 index 00000000..b0cecb1c --- /dev/null +++ b/docs/user/manual/model/sp_constraint/sp.html @@ -0,0 +1,147 @@ + + + + + + + sp Command — OpenSees Documentation documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    sp Command

    +

    This command is used to construct a single-point constraint object and add it to the enclosing LoadPattern.

    +
    +
    +sp $nodeTag $dofTag $dofValue
    +

    $nodeTag, integer, tag of node to which constraint is applied. +$dofTag, integer, the degree-of-freedom at the node to which constraint is applied (1 through ndf) +$dofValue, integer, reference constraint value.

    +
    + +
    +

    Note

    +

    The $dofValue is a reference value, it is the time series that provides the load factor. The load factor times the reference value is the constraint that is actually applied to the node.

    +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2022, The Regents of the University of California.

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/docs/user/manual/model/timeSeries.html b/docs/user/manual/model/timeSeries.html index f0ee481f..4188541d 100644 --- a/docs/user/manual/model/timeSeries.html +++ b/docs/user/manual/model/timeSeries.html @@ -1,80 +1,39 @@ - - - - + - 3.1.6. Time Series Command — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - + - - - - + - - + + - - - +
    - -
    - - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/uniaxialMaterials/QzSimple1.html b/docs/user/manual/model/uniaxialMaterials/QzSimple1.html deleted file mode 100644 index ad798ae4..00000000 --- a/docs/user/manual/model/uniaxialMaterials/QzSimple1.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - 3.4.1.5. QzSimple1 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.5. QzSimple1 Material

    -

    This command is used to construct a QzSimple1 uniaxial material object:

    -
    -
    -uniaxialMaterial QzSimple1 $matTag $qzType $qult $Z50 <$suction $c>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $qzType

    integer

    1 or 2 see note.

    $qult

    float

    Ultimate capacity of the q-z material. SEE NOTE 1.

    $Z50

    float

    Displacement at which 50% of qult is mobilized in monotonic loading.

    $suction

    float

    Uplift resistance is equal to suction*qult. Default = 0.0.

    $c

    float

    Viscous damping term (default = 0.0). see note

    -
    -

    Note

    -

    qzType = 1 Backbone of q-z curve approximates Reese and O’Neill’s (1987) relation for drilled shafts in clay.

    -

    qzType = 2 Backbone of q-z curve approximates Vijayvergiya’s (1977) relation for piles in sand.

    -

    $qult: Ultimate capacity of the q-z material. Note that “q” or “qult” are stresses [force per unit area of pile tip] in common design equations, but are both loads for this uniaxialMaterial [i.e., stress times tip area].

    -

    $Y50: Displacement at which 50% of pult is mobilized in monotonic loading. Note that Vijayvergiya’s relation (qzType=2) refers to a “critical” displacement (zcrit) at which qult is fully mobilized, and that the corresponding z50 would be 0. 125zcrit.

    -

    $suction: The value of suction must be 0.0 to 0.1.*

    -

    $c: The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero c values are used to represent radiation damping effects.*

    -

    optional args $suction and $c must either both be omitted or both provided.

    -
    -

    EQUATIONS and EXAMPLE RESPONSES:

    -

    The equations describing QzSimple1 behavior are similar to those for p-y materials by [BoulangerEtAl1999]. Modifications were required for representing the different responses of a <math>q-z` material in compression versus uplift.

    -

    The nonlinear q-z behavior is conceptualized as consisting of elastic (q-\(z^e\)), plastic (q-\(z^p\)), and gap (\(q-z^g\)) components in series. Radiation damping is modeled by a dashpot on the “far-field” elastic component (\(q-z^e\)) of the displacement rate. The gap component consists of a bilinear closure spring (\(q^c-z^g\)) in parallel with a nonlinear drag spring (\(q^d-z^g\)). Note that \(z = z^e + z^p + z^g\), and that \(q = q^d + q^c\).

    -

    The plastic component has an initial range of rigid behavior between \(-C_r q_{ult} < q < C_r q_{ult}\) with \(C_r\) = the ratio of \(\frac{q}{q_{{ult}}}\) when plastic yielding first occurs in virgin loading. The rigid range of q, which is initially \(2 C_r q_{ult}\), translates and grows with plastic yielding. The rigid range of q is constrained to a maximum size of \(0.7q_{{ult}}\). Beyond the rigid range, loading of the plastic (\(q-z^p\)) component is described by:

    -
    -\[q = q_{{ult}} - (q_{{ult}} - q_0) \left [\frac{c * z_{50}}{c * z_{50} + | z_p - z^p_0|} \right ]\]
    -

    where \(q_ult\) = the ultimate resistance of the \(q-z\) material in the current loading direction, \(q_o = q\) at the start of the current plastic loading cycle, p \(z^p_o = z^p\) at the start of the current plastic loading cycle, and c and n are constants that control the shape of \(q-z^p\) curve.

    -

    The closure (\(q^c-z^g\)) component is simply a bilinear elastic spring, which is relatively rigid in compression and extremely flexible in tension (uplift).

    -

    The nonlinear drag (\(q^d-z^g\)) component is used to allow thethe specification of some minimum “suction” on the pile tip during uplift. It is described by:

    -
    -\[q^d = C_d q_{ult} - (C_d q_{{ult}} - q^d_0) \left [\frac{z_{50}}{z_{50} + 2| z^g - z^g_0|} \right ]\]
    -

    where \(C_d\) = ratio of the maximum drag (suction) force to the ultimate resistance of the \(q-z\) material, \(q^d_o = q^d\) at the start of the current loading cycle, and \(z^g_o = z^g\) at the start of the current loading cycle.

    -

    The flexibility of the above equations can be used to approximate different q-z backbone relations. Reese and O’Neill’s (1987) recommended backbone for drilled shafts in clay is closely approximated using \(c = 0.35\), \(n = 1.2\), and \(C_r = 0.2\). Vijayvergiya’s (1977) recommended backbone for piles in sand is closely approximated using \(c = 12.3\), \(n = 5.5\), and \(C_r = 0.3\).

    -

    QzSimple1 is currently implemented to allow use of these two default sets of values. Values of \(q_{ult}\), \(z_50\), and suction (i.e., \(C_d\)) must then be specified to define the \(q-z\) material behavior.

    -

    Viscous damping on the far-field (elastic) component of the \(q-z\) material is included for approximating radiation damping. For implementation in OpenSees the viscous damper is placed across the entire material, but the viscous force is calculated as proportional to the component of velocity (or displacement) that developed in the far-field elastic component of the material. For example, this correctly causes the damper force to become zero during load increments across a fully formed gap in uplift. In addition, the total force across the \(q-z\) material is restricted to \(q_{ult}\) in magnitude so that the viscous damper cannot cause the total force to exceed the near-field soil capacity. Users should also be familiar with numerical oscillations that can develop in viscous damper forces under transient loading with certain solution algorithms and damping ratios. In general, an HHT algorithm is preferred over a Newmark algorithm for reducing such oscillations in materials like QzSimple1.

    -

    Examples of the monotonic backbones and cyclic loading response of QzSimple1 are given in the following plots.

    -
    -../../../../_images/QzSimple1A.gif -
    -
    -../../../../_images/QzSimple1B.gif -
    -
    -

    Example

    -

    The following constructs a PySimple material with tag 101, soil type 2 (sand), \(q_{ult}\) of 47216.4 and a \(Z_{50}\) of 0.00625. suction and c are set to 0.0.

    -
      -
    1. Tcl Code

    2. -
    -
    uniaxialMaterial QzSimple1 101  2  47216.4  0.00625  0.0  0.0
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    uniaxialMaterial('QzSimple1', 101,  2,  47216.4,  0.00625,  0.0,  0.0)
    -
    -
    -
    -

    Code Developed by: Ross Boulanger, UC Davis

    -
    -
    BoulangerEtAl1999
    -

    Boulanger, R. W., Curras, C. J., Kutter, B. L., Wilson, D. W., and Abghari, A. (1999). “Seismic soil-pile-structure interaction experiments and analyses.” Journal of Geotechnical and Geoenvironmental Engineering, ASCE, 125(9): 750-759. Only minor changes have been made in its implementation for OpenSees.

    -
    -
    -
    - - -
    - -
    -
    - - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California - -

    -
    - Built with Sphinx using a theme provided by Read the Docs. - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/uniaxialMaterials/Steel01.html b/docs/user/manual/model/uniaxialMaterials/Steel01.html deleted file mode 100644 index 70d18af6..00000000 --- a/docs/user/manual/model/uniaxialMaterials/Steel01.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - - - - - 3.4.1.1. Steel01 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.1. Steel01 Material

    -

    This command is used to construct a uniaxial bilinear steel material object with kinematic hardening and optional isotropic hardening described by a non-linear evolution equation (REF: Fedeas).

    -
    -
    -uniaxialMaterial Steel01 $matTag $Fy $E0 $b <$a1 $a2 $a3 $a4>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $Fy

    float

    yield strength

    $E0

    float

    initial elastic tangent

    $b

    float

    strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent)

    $a1

    float

    optional: isotropic hardening parameter: increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0).

    $a2

    float

    optional:isotropic hardening parameter (see explanation under $a1)

    $a3

    float

    optional: isotropic hardening parameter: increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0)

    $a4

    float

    optional: isotropic hardening parameter (see explanation under $a3)

    -
    -

    Note

    -

    By default there is no isotropic hardening.

    -
    -
    -../../../../_images/Steel01.gif -

    Fig. 3.4.1.1 Steel01

    -
    -
    -../../../../_images/Steel01HystereticA.jpg -

    Fig. 3.4.1.2 Steel01 Material – Default Hysteretic Behavior (NO isotropic hardening)

    -
    -
    -../../../../_images/Steel01HystereticB.jpg -

    Fig. 3.4.1.3 Steel01 Material – Hysteretic Behavior of Model with Isotropic Hardening in Compression

    -
    -
    -../../../../_images/Steel01HystereticC.jpg -

    Fig. 3.4.1.4 Steel01 Material – Hysteretic Behavior of Model with Isotropic Hardening in Tension

    -
    -
    -

    Example

    -

    The following is used to construct a Steel01 mataerial with a tag of 1, a yield strength of $60.0** and an initial tangent stiffness of 30000,0.

    -
      -
    1. Tcl Code

    2. -
    -
    uniaxialMaterial Steel01 60.0 30000.0
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    uniaxialMaterial('Steel01',60.0,30000.0)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California - -

    -
    - Built with Sphinx using a theme provided by Read the Docs. - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/uniaxialMaterials/Steel02.html b/docs/user/manual/model/uniaxialMaterials/Steel02.html deleted file mode 100644 index c73fbdd3..00000000 --- a/docs/user/manual/model/uniaxialMaterials/Steel02.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - - - - Steel02 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    Steel02 Material

    -

    This command is used to construct a uniaxial Giuffre-Menegotto-Pinto steel material object with isotropic strain hardening.

    -
    -
    -uniaxialMaterial Steel02 $matTag $Fy $E $b $R0 $cR1 $cR2 <$a1 $a2 $a3 $a4 $sigInit>
    -
    - -

    $matTag integer tag identifying material -$Fy yield strength -$E0 initial elastic tangent -$b strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent) -Recommended values: $R0=between 10 and 20, $cR1=0.925, $cR2=0.15

    -

    $a1 isotropic hardening parameter, increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0). (optional) -$a2 isotropic hardening parameter (see explanation under $a1). (optional default = 1.0). -$a3 isotropic hardening parameter, increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0). (optional default = 0.0) -$a4 isotropic hardening parameter (see explanation under $a3). (optional default = 1.0) -$sigInit Initial Stress Value (optional, default: 0.0) the strain is calculated from epsP=$sigInit/$E -if (sigInit!= 0.0) { double epsInit = sigInit/E; eps = trialStrain+epsInit; } else eps = trialStrain;

    -
    -

    $matTag, integer, integer tag identifying material -$Fy, float, yield strength -$E0, float, initial elastic tangent -$b, float, strain-hardening ratio (ratio between post-yield tangent and initial elastic tangent) -$R0 $CR1 $CR2, float, parameters to control the transition from elastic to plastic branches. -$a1, float, optional: isotropic hardening parameter: increase of compression yield envelope as proportion of yield strength after a plastic strain of $a2*($Fy/E0). -$a2, float, optional:isotropic hardening parameter (see explanation under $a1) -$a3, float, optional: isotropic hardening parameter: increase of tension yield envelope as proportion of yield strength after a plastic strain of $a4*($Fy/E0) -$a4, float, optional: isotropic hardening parameter (see explanation under $a3)

    -
    -
    -

    Note

    -

    Recommended values: $R0=between 10 and 20, $cR1=0.925, $cR2=0.15

    -
    -

    ..REFERENCE:

    -

    Filippou, F. C., Popov, E. P., Bertero, V. V. (1983). “Effects of Bond Deterioration on Hysteretic Behavior of Reinforced Concrete Joints”. Report EERC 83-19, Earthquake Engineering Research Center, University of California, Berkeley.

    -
    -user/manual/model/uniaxialMaterials/figures/Steel02.gif -

    Steel01

    -
    -
    -../../../../_images/Steel01HystereticA.jpg -

    Steel01 Material – Default Hysteretic Behavior (NO isotropic hardening)

    -
    -
    -../../../../_images/Steel01HystereticB.jpg -

    Steel01 Material – Hysteretic Behavior of Model with Isotropic Hardening in Compression

    -
    -
    -../../../../_images/Steel01HystereticC.jpg -

    Steel01 Material – Hysteretic Behavior of Model with Isotropic Hardening in Tension

    -
    -
    -

    Example

    -

    The following is used to construct a Steel01 mataerial with a tag of 1, a yield strength of $60.0** and an initial tangent stiffness of 30000,0.

    -
      -
    1. Tcl Code

    2. -
    -
    uniaxialMaterial Steel01 60.0 30000.0
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    uniaxialMaterial('Steel01',60.0,30000.0)
    -
    -
    -
    -

    Code Developed by: fmk

    -
    - - -
    - -
    -
    - - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California - -

    -
    - Built with Sphinx using a theme provided by Read the Docs. - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/model/uniaxialMaterials/TzSimple1.html b/docs/user/manual/model/uniaxialMaterials/TzSimple1.html deleted file mode 100644 index 2383c51a..00000000 --- a/docs/user/manual/model/uniaxialMaterials/TzSimple1.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - 3.4.1.4. TzSimple1 Material — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    3.4.1.4. TzSimple1 Material

    -

    This command is used to construct a TzSimple1 uniaxial material object:

    -
    -
    -uniaxialMaterial TzSimple1 $matTag $tzType $tult $z50 <$c>
    -
    - - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Argument

    Type

    Description

    $matTag

    integer

    integer tag identifying material

    $soilType

    integer

    1 or 2. see note.

    $tult

    float

    Ultimate capacity of the t-z material. see notes

    $Z50

    float

    Displacement at which 50% of tult is mobilized in monotonic loading.

    $c

    float

    The viscous damping term (optional: default = 0.0). see note.

    -
    -

    Note

    -

    soilType = 1 Backbone of t-z curve approximates Reese and O’Neill (1987)

    -

    soilType = 2 Backbone of t-z curve approximates Mosher (1984) relation.

    -

    The argument tult is the ultimate capacity of the t-z material. Note that “t” or “tult” are shear stresses [force per unit area of pile surface] in common design equations, but are both loads for this uniaxialMaterial [i.e., shear stress times the tributary area of the pile].

    -

    The viscous damping term (dashpot) on the far-field (elastic) component of the displacement rate (velocity). Nonzero c values are used to represent radiation damping effects

    -
    -

    EQUATIONS and EXAMPLERESPONSES:

    -

    The equations describing PySimple1 behavior are described in [BoulangerEtAl1990]. Only minor changes have been made in its implementation for OpenSees.

    -

    The nonlinear t-z behavior is conceptualized as consisting of elastic (\(t-z^e\)) and plastic (\(t-z^p\)) components in series. Radiation damping is modeled by a dashpot on the “far-field” elastic component (\(t-z^e\)) of the displacement rate. Note that \(z = z^e + z^p\), and that \(t = t^e = t^p\).

    -

    The plastic component is described by:

    -
    -\[t^p = t_{ult} - (t_{ult} - t^p_0) \left [\frac{c z_{50}}{c z_{50} + | z_p - z^p_0|} \right ]\]
    -

    where \(t_{ult} = \) at the start of the current plastic loading cycle, \(z^p_0 = z^P\) at the start of the current plastic loading cycle, and c = a constant and n = an exponent that define the shape of the \(t-z^p\) curve.

    -

    The elastic component can be conveniently expressed as:

    -
    -\[t^e = C_e \frac{t_{ult}}{z_{50}} z^e\]
    -

    where \(C_e\) = a constant that defines the normalized elastic stiffness. The value of \(C_e\) is not an independent parameter, but rather depends on the constants c & n (along with the fact that \(t = 0.5 t_{ult}\) at \(z = z_{50}\)).

    -

    The flexibility of the above equations can be used to approximate different t-z backbone relations. Reese and O’Neill’s (1987) recommended backbone for drilled shafts is closely approximated using c = 0.5, n = 1.5, and Ce = 0.708. Mosher’s (1984) recommended backbone for axially loaded piles in sand is closely approximated using c = 0.6, n = 0.85, and Ce = 2.05. TzSimple1 is currently implemented to allow use of these two default sets of values. Values of tult and z50 must then be specified to define the t-z material behavior.

    -

    Viscous damping on the far-field (elastic) component of the t-z material is included for approximating radiation damping. For implementation in OpenSees the viscous damper is placed across the entire material, but the viscous force is calculated as proportional to the component of velocity (displacement rate) that developed in the far-field elastic component of the material. In addition, the total force across the t-z material is restricted to tult in magnitude so that the viscous damper cannot cause the total force to exceed the near-field soil capacity. Users should also be familiar with numerical oscillations that can develop in viscous damper forces under transient loading with certain solution algorithms and damping ratios. In general, an HHT algorithm is preferred over a Newmark algorithm for reducing such oscillations in materials like TzSimple1.

    -

    Examples of the cyclic loading response of TzSimple1 are given in the following plots. Note that the response for tzType = 2 has greater nonlinearity at smaller displacements (and hence greater hysteretic damping) and that it approaches tult more gradually (such that t/tult is still well below

    -
    -../../../../_images/TzSimple1.gif -
    -
    -

    Example

    -

    The following constructs a TzSimple material with tag 102, soil type 2 (Mosher relationship for backbone), \(t_{ult}\) of 0.734 and a \(Z_{50}\) of 0.0000254. C is set to 0.0 for zero damping.

    -
      -
    1. Tcl Code

    2. -
    -
    uniaxialMaterial TzSimple1 102  2  0.734  2.54e-5  0.0
    -
    -
    -
      -
    1. Python Code

    2. -
    -
    uniaxialMaterial('TzSimple1', 102, 2, 0.734, 2.54e-5, 0.0)
    -
    -
    -
    -

    Code Developed by: Ross Boulanger, UC Davis

    -
    -
    BoulangerEtAl1990
    -

    Boulanger, R.W., Curras, C.J., Kutter, B.L., Wilson, D.W., and Abghari, A. (1990). “Seismic Soil-pile-strcture interaction experiments and analysis”, Jornal of Geotechnical and Geoenvironmental Engineering, ASCS, 125(9):750-759.

    -
    -
    -
    - - -
    - -
    -
    - - -
    - -
    -

    - © Copyright 2020, The Regents of the University of California - -

    -
    - Built with Sphinx using a theme provided by Read the Docs. - -
    - -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/user/manual/modelCommands.html b/docs/user/manual/modelCommands.html index a926a04c..46c45db3 100644 --- a/docs/user/manual/modelCommands.html +++ b/docs/user/manual/modelCommands.html @@ -1,79 +1,38 @@ - - - - + - 3.1. Modelling Commands — OpenSees Documentation documentation - - - - - - - - - - - - - - - - - - + + + - - - - - - + + - - - +
    - -
    - - -
    -

    -

    - © Copyright 2020, The Regents of the University of California. - -

    +

    © Copyright 2022, The Regents of the University of California.

    - - - - Built with Sphinx using a - + + Built with Sphinx using a theme - - provided by Read the Docs. + provided by Read the Docs. +
    -
    - - - - - - - - + + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); - - + gtag('config', 'UA-2431545-1', { + 'anonymize_ip': false, + }); +